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
Zoneless Testing
rainerhahnekamp
0
120
生成AIでGitHubソースコード取得して仕様書を作成
shukob
0
200
今年のアップデートで振り返るCDKセキュリティのシフトレフト/2024-cdk-security-shift-left
tomoki10
0
190
テスト自動化失敗から再挑戦しチームにオーナーシップを委譲した話/STAC2024 macho
ma_cho29
1
1.3k
なまけものオバケたち -PHP 8.4 に入った新機能の紹介-
tanakahisateru
1
120
DevFest Tokyo 2025 - Flutter のアプリアーキテクチャ現在地点
wasabeef
5
900
선언형 UI에서의 상태관리
l2hyunwoo
0
140
急成長期の品質とスピードを両立するフロントエンド技術基盤
soarteclab
0
920
17年周年のWebアプリケーションにTanStack Queryを導入する / Implementing TanStack Query in a 17th Anniversary Web Application
saitolume
0
250
From Translations to Multi Dimension Entities
alexanderschranz
2
130
testcontainers のススメ
sgash708
1
120
バグを見つけた?それAppleに直してもらおう!
uetyo
0
170
Featured
See All Featured
KATA
mclloyd
29
14k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
48
2.2k
How to Think Like a Performance Engineer
csswizardry
22
1.2k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
2
290
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.1k
A designer walks into a library…
pauljervisheath
204
24k
Building Applications with DynamoDB
mza
91
6.1k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
26
1.9k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Mobile First: as difficult as doing things right
swwweet
222
9k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
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