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.1k
Other Decks in Programming
See All in Programming
CSC509 Lecture 11
javiergs
PRO
0
180
弊社の「意識チョット低いアーキテクチャ」10選
texmeijin
5
24k
Amazon Qを使ってIaCを触ろう!
maruto
0
400
as(型アサーション)を書く前にできること
marokanatani
9
2.6k
Pinia Colada が実現するスマートな非同期処理
naokihaba
4
220
macOS でできる リアルタイム動画像処理
biacco42
9
2.4k
Content Security Policy入門 セキュリティ設定と 違反レポートのはじめ方 / Introduction to Content Security Policy Getting Started with Security Configuration and Violation Reporting
uskey512
1
520
【Kaigi on Rails 2024】YOUTRUST スポンサーLT
krpk1900
1
330
AI時代におけるSRE、 あるいはエンジニアの生存戦略
pyama86
6
1.1k
Contemporary Test Cases
maaretp
0
130
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
1
100
TypeScriptでライブラリとの依存を限定的にする方法
tutinoko
2
660
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
136
6.6k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5k
The Invisible Side of Design
smashingmag
298
50k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
840
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.2k
RailsConf 2023
tenderlove
29
900
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
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