Upgrade to Pro — share decks privately, control downloads, hide ads and more …

R package for a team

R package for a team

Tokyo.R 78th 発表資料。社内用のRパッケージでチームに貢献する話。

0c9d8cf130d5f1f6fe4876d3e18f1d37?s=128

takuma koshiishi

May 25, 2019
Tweet

Transcript

  1. チーム規模で Rを活用している話 Takuma Koshiishi @kotaku08 Tokyo.R 78th 2019/5/25

  2. 自己紹介 2 はじめまして こっしー 株式会社ヴァリューズ/データアナリスト @kotaku08 @kosshi • R歴3年くらい •

    会社でRキャラ • ジンベエザメとシャチと クジラが好き
  3. 3 ある日突然、、、 タカヤナギ=サンにサガサレル

  4. 4 qiitaに書いた記事がキッカケ https://qiita.com/kosshi/items/a7ae2dfcc57ab5340e4f

  5. 5 お会いしてRの会社での利用についてお話した際に・・・ Rを会社的に?使ってる事例って 他にありますか?? あまり聞かないですね~ こんな会話をした記憶

  6. 6 あまり聞かない・・・ あったらもっと知りたい。 いや、もっとあったらいいのに。 まずは自分が発表してみよ・・・ (恐縮)

  7. 今日のモチベーション 7 そんなこんなで 0からRの社内活用を推進した事例を紹介。 R活用の可能性を布教したい!!! その過程で思ったこととか共有したい!

  8. 今日話すこと 8 ✓ 会社に入ったときの話(こんな環境がちょっとイヤ) ✓ 他社での解決策の話 ✓ チームR化計画 ✓ 社内Rパッケージ(メイン)

    ✓ Rの普及・教育(少し)
  9. VALUES:なんの会社? 9 会社に入ったときの話 • インターネット行動ログ分析 • 分析チームに新卒で2人目のタイミングで入社 (+先輩3人くらいのチームだった)

  10. 当時の分析環境 10 会社に入ったときの話 使用ツールと、チームメンバーのスキルセット • Redshift • R、Python以外のスクリプト言語 • Tableau

    • Excel!!Access!! 創業期のデータ基盤構築の流れで、当時のチームのスキルセッ トはデータ分析というよりもエンジニア、SE、SIに近い。
  11. ここがチョット?変えたかった 11 会社に入ったときの話 ①それ◦◦でやるの!!?? タスクとツールがあってない。 • 簡単なデータ加工をPHPで。 • 複雑なデータ加工をExcelで。 ②コレ何やってるの??

    可読性・再現性・再利用性がない。 • 新卒、PHP読めない/書けない。 • 謎のExcel呪文式。 • Excelでやった結果ワークシートしかない。 • 可視化だったら全部Tableauでやる。 ③データ抽出だけで一苦労。 • Redshiftへの接続が大変。簡単なデータ抽出で気が重い。
  12. 12 こんな感じでRユーザは少ない。。。 みんなで使えたらいいのに。。。

  13. 13 そんな時出会ったairbnbの記事 https://medium.com/airbnb-engineering/using-r-packages-and-education-to-scale-data-science-at-airbnb- 906faa58e12d

  14. 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

  15. airbnb社が言うには・・・(要約) 15 • 分析チームでRを使っている人は多いよ! • 業務で使う用のRパッケージ「Rbnb」を作ってるよ! • Rの教育も頑張ってるよ! • データ分析が効率化されて、再現性もバッチリだよ!

  16. 16 ここはRユーザの天国か??

  17. 17 ボクもやろ(単純)

  18. 18 チームR化計画

  19. チームR化計画 19 そんなこんなで 「社内パッケージ開発」と「Rの社内勉強会」の2本柱。 今日は社内パッケージを作った話をメインでします。 以降4つほどパッケージの内容を紹介。

  20. ①データの抽出を簡単に。 20 Rパッケージの話 Airbnbの記事でも一番最初にやるべきことと書いてある。

  21. ①データの抽出を簡単に。 21 Rパッケージの話 データの抽出時にこんなことないですか・・・? • ID、パスワード、ホストを毎回入力している。 たまに思い出せないデータベースとかある。 • そもそもセキュリティやシステムの関係でODBCで直接ア クセスできない。

    • 多段階認証とかある。何回認証するの?? • いくつもソフトを立ち上げる必要がある。(ターミナル→ エディタ→S3クライアント→Rstudio)
  22. ①データの抽出を簡単に。 22 Rパッケージの話 弊社の事情はこんな感じでした。 • Redshiftが高セキュリティ領域にあって直接アクセス不可。 • ターミナル開く→認証→踏み台サーバーにアクセス →Redshiftの近くのサーバーに移動→クエリをunloadで投 げる→S3クライアント開く→ローカルに移動→Rstudio開

    く→読み込む! • 気が重い。
  23. ①データの抽出を簡単に。 23 Rパッケージの話 簡単なシステムを作りました。 ①S3にクエリを置く ②EC2がS3を監視し、 クエリが来たら投げる。 ③クエリが完了したら S3に結果を戻す。 ④S3を監視し、結果

    が戻ったら読み込む。 セキュリティ高 先輩に頼んでプログラムを書いても らった。
  24. ①データの抽出を簡単に。 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. ①データの抽出を簡単に。 25 Rパッケージの話 Rで書いてパッケージ化したのはここだけ クラウドサービスとのやり取りはaws.s3パッケージで簡単。 ①S3にクエリを置く ④S3を監視し、結果 が戻ったら読み込む。

  26. ①データの抽出を簡単に。 26 Rパッケージの話 やってみて思ったこと • データの抽出が簡単なる→別世界。ストレス大幅減。 • Rはミドルウェアを操作するパッケージが充実。 • ミドルウェアを操作するパッケージと裏で動くシステムの

    組み合わせ次第でなんでもできそう。 • 「Rはシステムに向かない」はこの意味でウソ。
  27. ①データの抽出を簡単に。 27 Rパッケージの話 cloudyrのパッケージ群は要チェック。 Rとクラウドの連携性を高めるパッケージを作っている。 aws.s3もcloudyr製。

  28. ②クエリを簡単に書きたい。 28 Rパッケージの話

  29. ②クエリを簡単に書きたい。 29 Rパッケージの話 クエリの作成/管理に関する話題は多い。 ※メルカリさんのクエリ管理系の記事 https://tech.mercari.com/entry/2018/05/16/142433

  30. ②クエリを簡単に書きたい。 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. 31 glueでクエリを書く記事 https://qiita.com/kosshi/items/fb8b745975ca6fd2515c

  32. ②クエリを簡単に書きたい。 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. ②クエリを簡単に書きたい。 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. 34 地味だけど、すごく便利。

  35. ③社内ツールをRから操作 35 Rパッケージの話

  36. ③社内ツールをRから操作 36 Rパッケージの話 こんなことないですか・・・? • 特定の管理画面からしか取り出せないデータがある。 • 特定のツールを通さないと集計できないデータがある。

  37. ③社内ツールをRから操作 37 Rパッケージの話 社内ツールの影響。 • 途中でRstudioを離れてブラウザポチポチ。 • 定義変えてやり直し?? → ポチポチ。

    • 去年のあれやって?? → この部分何?? (ポチポチ部分がRmdになくてわからない) 少し面倒!!再現性低い!!
  38. ③社内ツールをRから操作 38 Rパッケージの話 いずれか2つの方法で自動化できないか検討しよう。 httrパッケージ • WEBのリクエストが送れる。 • ツール作成者にリクエストの仕様がないか聞いてみよう。 Rseleniumパッケージ

    • Rからブラウザを操作できる。 • リクエストの仕様がわからなければこっちで対処。
  39. ③社内ツールをRから操作 39 Rパッケージの話 目指すべき姿。

  40. ③社内ツールをRから操作 40 Rパッケージの話 目指すべき姿。 • 全部がRmdに記述できる。 • 定義変えてやり直し?? → 変数書き換えて「run

    all」ポチ! • 去年のあれやって?? → 変数書き換えて「run all」ポチ! Rmdの再現性に日々感謝できる!
  41. ④その他やったこと(一部) 41 Rパッケージの話

  42. ④その他やったこと(一部) 42 Rパッケージの話 研修向けに、RからslackにSQLの確認依頼をする関数を作成。 vls_req_sql_check(sql, message = "テストです。", mention =

    "koshiishi")
  43. ④その他やったこと(一部) 43 Rパッケージの話 研修向けに、RからslackにSQLの確認依頼をする関数を作成。 vls_req_sql_check(sql, message = "テストです。", mention =

    "koshiishi") slack上で確認しやすいように、 SQLのインデントなどを整形したかった。 Rのパッケージ探しても無い、自分で作 るのは大変そう。。。
  44. 44 業務効率化 →Rの不得意分野をRでやる必要性

  45. ④その他やったこと(一部) 45 Rパッケージの話 Rで実現できなそうなことは他の言語に任せよう。 V8パッケージ • Rからjavascriptのコードを評価できる。 • 今回はこっちを使用 raticulateパッケージ

    • RからPythonが使える。 他にもrjavaとか。
  46. ④その他やったこと(一部) 46 Rパッケージの話 Rで実現できなそうなことは他の言語に任せよう。 • Rからは色んな言語が使える(glue言語というらしい) • データ分析系でないエンジニアに 「こんなことできるjavascript/Pythonのコード無い?」 とか聞いてみよう。

    少し探してくれたら大体みつかる。
  47. 47 パッケージは作った。 だがユーザ数=1では意味なし。

  48. 48 Rの普及の話 既存メンバー • パッケージを作ったことにより、Rからなら簡単にデータ抽出 できるというウワサ → スクリプト言語書ける系の人たちがRに歩み寄る!! データ抽出を簡単にする仕組みだけで 数人のRユーザを獲得。

    新卒メンバー(主にプログラミング未経験) • 配属直後にR研修:スタンダード感を演出 • 「データ抽出」という避けては通れないデータ分析の入り口 がRになったことでRに接する機会が増加。 • 1対1でRを使った分析フォロー • 大抵は3か月程度でtidyverseが問題なく使える。
  49. 49 Rユーザ率は8割くらいに。 パッケージ開発/メンテも 新卒ちゃん2人と一緒にやるように Rの普及の話

  50. 50 チームR化計画

  51. 51 • 社内用のRパッケージを軸に業務効率化しRを普及。 • データ抽出の簡略化は大事。業務効率大幅アップ。 • Rだけでなく、ミドルウェア含め実現できないか検討しよう。 • クエリはglueに渡す想定の形式でリスト管理がオススメ。 •

    少し面倒なよくやる系コードをパッケージにしておくと便利。 • 社内ツール、WEBツールもRから操作できるようにすると再 現性が劇的に高まる。(Rmdで管理できるようにしよう。) • Rの不得意分野は他の言語に任せて解決。 まとめ
  52. 52 Python版も作りたい

  53. Enjoy! 53