Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
R package for a team
Search
takuma koshiishi
May 25, 2019
Programming
2
2.3k
R package for a team
Tokyo.R 78th 発表資料。社内用のRパッケージでチームに貢献する話。
takuma koshiishi
May 25, 2019
Tweet
Share
More Decks by takuma koshiishi
See All by takuma koshiishi
plotlyで動くグラフを作る
kosshi
0
1.2k
Other Decks in Programming
See All in Programming
SRE、開発、QAが協業して挑んだリリースプロセス改革@SRE Kaigi 2025
nealle
3
4.1k
Amazon S3 TablesとAmazon S3 Metadataを触ってみた / 20250201-jawsug-tochigi-s3tables-s3metadata
kasacchiful
0
100
定理証明プラットフォーム lapisla.net
abap34
1
1.7k
Immutable ActiveRecord
megane42
0
130
社内フレームワークとその依存性解決 / in-house framework and its dependency management
vvakame
1
550
時計仕掛けのCompose
mkeeda
1
280
ASP. NET CoreにおけるWebAPIの最新情報
tomokusaba
0
360
Amazon Bedrock Multi Agentsを試してきた
tm2
1
280
AWSマネコンに複数のアカウントで入れるようになりました
yuhta28
2
160
いりゃあせ、PHPカンファレンス名古屋2025 / Welcome to PHP Conference Nagoya 2025
ttskch
1
270
テストをしないQAエンジニアは何をしているか?
nealle
0
130
CloudNativePGがCNCF Sandboxプロジェクトになったぞ! 〜CloudNativePGの仕組みの紹介〜
nnaka2992
0
220
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
171
14k
The Language of Interfaces
destraynor
156
24k
Visualization
eitanlees
146
15k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Designing Experiences People Love
moore
139
23k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Done Done
chrislema
182
16k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
Designing for Performance
lara
604
68k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Transcript
チーム規模で Rを活用している話 Takuma Koshiishi @kotaku08 Tokyo.R 78th 2019/5/25
自己紹介 2 はじめまして こっしー 株式会社ヴァリューズ/データアナリスト @kotaku08 @kosshi • R歴3年くらい •
会社でRキャラ • ジンベエザメとシャチと クジラが好き
3 ある日突然、、、 タカヤナギ=サンにサガサレル
4 qiitaに書いた記事がキッカケ https://qiita.com/kosshi/items/a7ae2dfcc57ab5340e4f
5 お会いしてRの会社での利用についてお話した際に・・・ Rを会社的に?使ってる事例って 他にありますか?? あまり聞かないですね~ こんな会話をした記憶
6 あまり聞かない・・・ あったらもっと知りたい。 いや、もっとあったらいいのに。 まずは自分が発表してみよ・・・ (恐縮)
今日のモチベーション 7 そんなこんなで 0からRの社内活用を推進した事例を紹介。 R活用の可能性を布教したい!!! その過程で思ったこととか共有したい!
今日話すこと 8 ✓ 会社に入ったときの話(こんな環境がちょっとイヤ) ✓ 他社での解決策の話 ✓ チームR化計画 ✓ 社内Rパッケージ(メイン)
✓ Rの普及・教育(少し)
VALUES:なんの会社? 9 会社に入ったときの話 • インターネット行動ログ分析 • 分析チームに新卒で2人目のタイミングで入社 (+先輩3人くらいのチームだった)
当時の分析環境 10 会社に入ったときの話 使用ツールと、チームメンバーのスキルセット • Redshift • R、Python以外のスクリプト言語 • Tableau
• Excel!!Access!! 創業期のデータ基盤構築の流れで、当時のチームのスキルセッ トはデータ分析というよりもエンジニア、SE、SIに近い。
ここがチョット?変えたかった 11 会社に入ったときの話 ①それ◦◦でやるの!!?? タスクとツールがあってない。 • 簡単なデータ加工をPHPで。 • 複雑なデータ加工をExcelで。 ②コレ何やってるの??
可読性・再現性・再利用性がない。 • 新卒、PHP読めない/書けない。 • 謎のExcel呪文式。 • Excelでやった結果ワークシートしかない。 • 可視化だったら全部Tableauでやる。 ③データ抽出だけで一苦労。 • Redshiftへの接続が大変。簡単なデータ抽出で気が重い。
12 こんな感じでRユーザは少ない。。。 みんなで使えたらいいのに。。。
13 そんな時出会ったairbnbの記事 https://medium.com/airbnb-engineering/using-r-packages-and-education-to-scale-data-science-at-airbnb- 906faa58e12d
14 exploratoryの方の翻訳で知った メルマガいつもありがとうございます。 https://blog.exploratory.io/airbnb%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B5%E 3%82%A4%E3%82%A8%E3%83%B3%E3%83%86%E3%82%A3%E3%82%B9%E3%83%88%E3%81%AF% E3%81%AA%E3%81%9Cr%E3%81%8C%E5%A5%BD%E3%81%8D%E3%81%AA%E3%81%AE%E3%81%8 B-fc1168e81373
airbnb社が言うには・・・(要約) 15 • 分析チームでRを使っている人は多いよ! • 業務で使う用のRパッケージ「Rbnb」を作ってるよ! • Rの教育も頑張ってるよ! • データ分析が効率化されて、再現性もバッチリだよ!
16 ここはRユーザの天国か??
17 ボクもやろ(単純)
18 チームR化計画
チームR化計画 19 そんなこんなで 「社内パッケージ開発」と「Rの社内勉強会」の2本柱。 今日は社内パッケージを作った話をメインでします。 以降4つほどパッケージの内容を紹介。
①データの抽出を簡単に。 20 Rパッケージの話 Airbnbの記事でも一番最初にやるべきことと書いてある。
①データの抽出を簡単に。 21 Rパッケージの話 データの抽出時にこんなことないですか・・・? • ID、パスワード、ホストを毎回入力している。 たまに思い出せないデータベースとかある。 • そもそもセキュリティやシステムの関係でODBCで直接ア クセスできない。
• 多段階認証とかある。何回認証するの?? • いくつもソフトを立ち上げる必要がある。(ターミナル→ エディタ→S3クライアント→Rstudio)
①データの抽出を簡単に。 22 Rパッケージの話 弊社の事情はこんな感じでした。 • Redshiftが高セキュリティ領域にあって直接アクセス不可。 • ターミナル開く→認証→踏み台サーバーにアクセス →Redshiftの近くのサーバーに移動→クエリをunloadで投 げる→S3クライアント開く→ローカルに移動→Rstudio開
く→読み込む! • 気が重い。
①データの抽出を簡単に。 23 Rパッケージの話 簡単なシステムを作りました。 ①S3にクエリを置く ②EC2がS3を監視し、 クエリが来たら投げる。 ③クエリが完了したら S3に結果を戻す。 ④S3を監視し、結果
が戻ったら読み込む。 セキュリティ高 先輩に頼んでプログラムを書いても らった。
①データの抽出を簡単に。 24 Rパッケージの話 データの抽出から読み込みまでをRstudioで完結できるように。 > test_query <- "select aaa from
bbb where ccc = 'ddd'" > data <- vls_unloadauto(query = test_query, s3path = "adhocquery/test", filename = "test_file", schema = "xxxx") 1.passing unload query 2.check query progress count:= 3.unload query completion INFO: UNLOAD completed, 12232 record(s) unloaded successfully.
①データの抽出を簡単に。 25 Rパッケージの話 Rで書いてパッケージ化したのはここだけ クラウドサービスとのやり取りはaws.s3パッケージで簡単。 ①S3にクエリを置く ④S3を監視し、結果 が戻ったら読み込む。
①データの抽出を簡単に。 26 Rパッケージの話 やってみて思ったこと • データの抽出が簡単なる→別世界。ストレス大幅減。 • Rはミドルウェアを操作するパッケージが充実。 • ミドルウェアを操作するパッケージと裏で動くシステムの
組み合わせ次第でなんでもできそう。 • 「Rはシステムに向かない」はこの意味でウソ。
①データの抽出を簡単に。 27 Rパッケージの話 cloudyrのパッケージ群は要チェック。 Rとクラウドの連携性を高めるパッケージを作っている。 aws.s3もcloudyr製。
②クエリを簡単に書きたい。 28 Rパッケージの話
②クエリを簡単に書きたい。 29 Rパッケージの話 クエリの作成/管理に関する話題は多い。 ※メルカリさんのクエリ管理系の記事 https://tech.mercari.com/entry/2018/05/16/142433
②クエリを簡単に書きたい。 30 Rパッケージの話 glueパッケージを使う想定でクエリを管理。 "select aaa from bbb where ccc
= '{condition}'" > glimpse(vls_sql_list) List of 4 $ app :List of 10 ..$ install:List of 1 .. ..$ default: chr "select t.packagename ……… ..$ use :List of 1 .. ..$ default: chr "select t.id,t.age_id ……… クエリをリストオブジェクトに入れておいて参照
31 glueでクエリを書く記事 https://qiita.com/kosshi/items/fb8b745975ca6fd2515c
②クエリを簡単に書きたい。 32 Rパッケージの話 クエリ作成時によく書く少し面倒な処理群も細かく関数化 vls_inclause_make() # c("aa", "bb", "cc") ->
"'aa', 'bb', 'cc'" vls_yyyymm_range() # c("201812", "201902") -> c("201812", "201901", "2 vls_calc_month() # 3/30の1か月前を計算できる感じ。
②クエリを簡単に書きたい。 33 Rパッケージの話 クエリテンプレートと、細かい関数と、 glueを組み合わせる。 tidyverse的な思考でクエリが書ける!! # glue用に作っておいたクエリテンプレート # 毎回変えたい部分だけglueで保管できるように記述。
query_tmp <- "select count(1) from table where yyyymm in ({yyyymm}) and category in ({category})" # よくやる処理系 yyyymm <- vls_yyyymm_range("201812", "201903") %>% vls_inclause_make() category <- vls_inclause_make(c("cat1", "cat2", "cat3")) # glueでクエリを作ってそのまま投げる。 glue::glue(query_tmp, yyyymm = yyyymm, category = category) %>% vls_unloadauto(s3path = "adhocquery/test", filename = "test", schema = "xxx")
34 地味だけど、すごく便利。
③社内ツールをRから操作 35 Rパッケージの話
③社内ツールをRから操作 36 Rパッケージの話 こんなことないですか・・・? • 特定の管理画面からしか取り出せないデータがある。 • 特定のツールを通さないと集計できないデータがある。
③社内ツールをRから操作 37 Rパッケージの話 社内ツールの影響。 • 途中でRstudioを離れてブラウザポチポチ。 • 定義変えてやり直し?? → ポチポチ。
• 去年のあれやって?? → この部分何?? (ポチポチ部分がRmdになくてわからない) 少し面倒!!再現性低い!!
③社内ツールをRから操作 38 Rパッケージの話 いずれか2つの方法で自動化できないか検討しよう。 httrパッケージ • WEBのリクエストが送れる。 • ツール作成者にリクエストの仕様がないか聞いてみよう。 Rseleniumパッケージ
• Rからブラウザを操作できる。 • リクエストの仕様がわからなければこっちで対処。
③社内ツールをRから操作 39 Rパッケージの話 目指すべき姿。
③社内ツールをRから操作 40 Rパッケージの話 目指すべき姿。 • 全部がRmdに記述できる。 • 定義変えてやり直し?? → 変数書き換えて「run
all」ポチ! • 去年のあれやって?? → 変数書き換えて「run all」ポチ! Rmdの再現性に日々感謝できる!
④その他やったこと(一部) 41 Rパッケージの話
④その他やったこと(一部) 42 Rパッケージの話 研修向けに、RからslackにSQLの確認依頼をする関数を作成。 vls_req_sql_check(sql, message = "テストです。", mention =
"koshiishi")
④その他やったこと(一部) 43 Rパッケージの話 研修向けに、RからslackにSQLの確認依頼をする関数を作成。 vls_req_sql_check(sql, message = "テストです。", mention =
"koshiishi") slack上で確認しやすいように、 SQLのインデントなどを整形したかった。 Rのパッケージ探しても無い、自分で作 るのは大変そう。。。
44 業務効率化 →Rの不得意分野をRでやる必要性
④その他やったこと(一部) 45 Rパッケージの話 Rで実現できなそうなことは他の言語に任せよう。 V8パッケージ • Rからjavascriptのコードを評価できる。 • 今回はこっちを使用 raticulateパッケージ
• RからPythonが使える。 他にもrjavaとか。
④その他やったこと(一部) 46 Rパッケージの話 Rで実現できなそうなことは他の言語に任せよう。 • Rからは色んな言語が使える(glue言語というらしい) • データ分析系でないエンジニアに 「こんなことできるjavascript/Pythonのコード無い?」 とか聞いてみよう。
少し探してくれたら大体みつかる。
47 パッケージは作った。 だがユーザ数=1では意味なし。
48 Rの普及の話 既存メンバー • パッケージを作ったことにより、Rからなら簡単にデータ抽出 できるというウワサ → スクリプト言語書ける系の人たちがRに歩み寄る!! データ抽出を簡単にする仕組みだけで 数人のRユーザを獲得。
新卒メンバー(主にプログラミング未経験) • 配属直後にR研修:スタンダード感を演出 • 「データ抽出」という避けては通れないデータ分析の入り口 がRになったことでRに接する機会が増加。 • 1対1でRを使った分析フォロー • 大抵は3か月程度でtidyverseが問題なく使える。
49 Rユーザ率は8割くらいに。 パッケージ開発/メンテも 新卒ちゃん2人と一緒にやるように Rの普及の話
50 チームR化計画
51 • 社内用のRパッケージを軸に業務効率化しRを普及。 • データ抽出の簡略化は大事。業務効率大幅アップ。 • Rだけでなく、ミドルウェア含め実現できないか検討しよう。 • クエリはglueに渡す想定の形式でリスト管理がオススメ。 •
少し面倒なよくやる系コードをパッケージにしておくと便利。 • 社内ツール、WEBツールもRから操作できるようにすると再 現性が劇的に高まる。(Rmdで管理できるようにしよう。) • Rの不得意分野は他の言語に任せて解決。 まとめ
52 Python版も作りたい
Enjoy! 53