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パッケージでチームに貢献する話。

takuma koshiishi

May 25, 2019
Tweet

More Decks by takuma koshiishi

Other Decks in Programming

Transcript

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

    View Slide

  2. 自己紹介
    2
    はじめまして
    こっしー
    株式会社ヴァリューズ/データアナリスト
    @kotaku08
    @kosshi
    • R歴3年くらい
    • 会社でRキャラ
    • ジンベエザメとシャチと
    クジラが好き

    View Slide

  3. 3
    ある日突然、、、
    タカヤナギ=サンにサガサレル

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  10. 当時の分析環境
    10
    会社に入ったときの話
    使用ツールと、チームメンバーのスキルセット
    • Redshift
    • R、Python以外のスクリプト言語
    • Tableau
    • Excel!!Access!!
    創業期のデータ基盤構築の流れで、当時のチームのスキルセッ
    トはデータ分析というよりもエンジニア、SE、SIに近い。

    View Slide

  11. ここがチョット?変えたかった
    11
    会社に入ったときの話
    ①それ○○でやるの!!?? タスクとツールがあってない。
    • 簡単なデータ加工をPHPで。
    • 複雑なデータ加工をExcelで。
    ②コレ何やってるの?? 可読性・再現性・再利用性がない。
    • 新卒、PHP読めない/書けない。
    • 謎のExcel呪文式。
    • Excelでやった結果ワークシートしかない。
    • 可視化だったら全部Tableauでやる。
    ③データ抽出だけで一苦労。
    • Redshiftへの接続が大変。簡単なデータ抽出で気が重い。

    View Slide

  12. 12
    こんな感じでRユーザは少ない。。。
    みんなで使えたらいいのに。。。

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  18. 18
    チームR化計画

    View Slide

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

    View Slide

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

    View Slide

  21. ①データの抽出を簡単に。
    21
    Rパッケージの話
    データの抽出時にこんなことないですか・・・?
    • ID、パスワード、ホストを毎回入力している。
    たまに思い出せないデータベースとかある。
    • そもそもセキュリティやシステムの関係でODBCで直接ア
    クセスできない。
    • 多段階認証とかある。何回認証するの??
    • いくつもソフトを立ち上げる必要がある。(ターミナル→
    エディタ→S3クライアント→Rstudio)

    View Slide

  22. ①データの抽出を簡単に。
    22
    Rパッケージの話
    弊社の事情はこんな感じでした。
    • Redshiftが高セキュリティ領域にあって直接アクセス不可。
    • ターミナル開く→認証→踏み台サーバーにアクセス
    →Redshiftの近くのサーバーに移動→クエリをunloadで投
    げる→S3クライアント開く→ローカルに移動→Rstudio開
    く→読み込む!
    • 気が重い。

    View Slide

  23. ①データの抽出を簡単に。
    23
    Rパッケージの話
    簡単なシステムを作りました。
    ①S3にクエリを置く
    ②EC2がS3を監視し、
    クエリが来たら投げる。
    ③クエリが完了したら
    S3に結果を戻す。
    ④S3を監視し、結果
    が戻ったら読み込む。
    セキュリティ高
    先輩に頼んでプログラムを書いても
    らった。

    View Slide

  24. ①データの抽出を簡単に。
    24
    Rパッケージの話
    データの抽出から読み込みまでをRstudioで完結できるように。
    > test_query > data 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.

    View Slide

  25. ①データの抽出を簡単に。
    25
    Rパッケージの話
    Rで書いてパッケージ化したのはここだけ
    クラウドサービスとのやり取りはaws.s3パッケージで簡単。
    ①S3にクエリを置く
    ④S3を監視し、結果
    が戻ったら読み込む。

    View Slide

  26. ①データの抽出を簡単に。
    26
    Rパッケージの話
    やってみて思ったこと
    • データの抽出が簡単なる→別世界。ストレス大幅減。
    • Rはミドルウェアを操作するパッケージが充実。
    • ミドルウェアを操作するパッケージと裏で動くシステムの
    組み合わせ次第でなんでもできそう。
    • 「Rはシステムに向かない」はこの意味でウソ。

    View Slide

  27. ①データの抽出を簡単に。
    27
    Rパッケージの話
    cloudyrのパッケージ群は要チェック。
    Rとクラウドの連携性を高めるパッケージを作っている。
    aws.s3もcloudyr製。

    View Slide

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

    View Slide

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

    View Slide

  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 ………
    クエリをリストオブジェクトに入れておいて参照

    View Slide

  31. 31
    glueでクエリを書く記事
    https://qiita.com/kosshi/items/fb8b745975ca6fd2515c

    View Slide

  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か月前を計算できる感じ。

    View Slide

  33. ②クエリを簡単に書きたい。
    33
    Rパッケージの話
    クエリテンプレートと、細かい関数と、 glueを組み合わせる。
    tidyverse的な思考でクエリが書ける!!
    # glue用に作っておいたクエリテンプレート
    # 毎回変えたい部分だけglueで保管できるように記述。
    query_tmp and category in ({category})"
    # よくやる処理系
    yyyymm % vls_inclause_make()
    category # glueでクエリを作ってそのまま投げる。
    glue::glue(query_tmp, yyyymm = yyyymm, category = category) %>%
    vls_unloadauto(s3path = "adhocquery/test", filename = "test", schema = "xxx")

    View Slide

  34. 34
    地味だけど、すごく便利。

    View Slide

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

    View Slide

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

    View Slide

  37. ③社内ツールをRから操作
    37
    Rパッケージの話
    社内ツールの影響。
    • 途中でRstudioを離れてブラウザポチポチ。
    • 定義変えてやり直し?? → ポチポチ。
    • 去年のあれやって?? → この部分何??
    (ポチポチ部分がRmdになくてわからない)
    少し面倒!!再現性低い!!

    View Slide

  38. ③社内ツールをRから操作
    38
    Rパッケージの話
    いずれか2つの方法で自動化できないか検討しよう。
    httrパッケージ
    • WEBのリクエストが送れる。
    • ツール作成者にリクエストの仕様がないか聞いてみよう。
    Rseleniumパッケージ
    • Rからブラウザを操作できる。
    • リクエストの仕様がわからなければこっちで対処。

    View Slide

  39. ③社内ツールをRから操作
    39
    Rパッケージの話
    目指すべき姿。

    View Slide

  40. ③社内ツールをRから操作
    40
    Rパッケージの話
    目指すべき姿。
    • 全部がRmdに記述できる。
    • 定義変えてやり直し??
    → 変数書き換えて「run all」ポチ!
    • 去年のあれやって??
    → 変数書き換えて「run all」ポチ!
    Rmdの再現性に日々感謝できる!

    View Slide

  41. ④その他やったこと(一部)
    41
    Rパッケージの話

    View Slide

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

    View Slide

  43. ④その他やったこと(一部)
    43
    Rパッケージの話
    研修向けに、RからslackにSQLの確認依頼をする関数を作成。
    vls_req_sql_check(sql, message = "テストです。",
    mention = "koshiishi")
    slack上で確認しやすいように、
    SQLのインデントなどを整形したかった。
    Rのパッケージ探しても無い、自分で作
    るのは大変そう。。。

    View Slide

  44. 44
    業務効率化
    →Rの不得意分野をRでやる必要性

    View Slide

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

    View Slide

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

    View Slide

  47. 47
    パッケージは作った。
    だがユーザ数=1では意味なし。

    View Slide

  48. 48
    Rの普及の話
    既存メンバー
    • パッケージを作ったことにより、Rからなら簡単にデータ抽出
    できるというウワサ
    → スクリプト言語書ける系の人たちがRに歩み寄る!!
    データ抽出を簡単にする仕組みだけで 数人のRユーザを獲得。
    新卒メンバー(主にプログラミング未経験)
    • 配属直後にR研修:スタンダード感を演出
    • 「データ抽出」という避けては通れないデータ分析の入り口
    がRになったことでRに接する機会が増加。
    • 1対1でRを使った分析フォロー
    • 大抵は3か月程度でtidyverseが問題なく使える。

    View Slide

  49. 49
    Rユーザ率は8割くらいに。
    パッケージ開発/メンテも
    新卒ちゃん2人と一緒にやるように
    Rの普及の話

    View Slide

  50. 50
    チームR化計画

    View Slide

  51. 51
    • 社内用のRパッケージを軸に業務効率化しRを普及。
    • データ抽出の簡略化は大事。業務効率大幅アップ。
    • Rだけでなく、ミドルウェア含め実現できないか検討しよう。
    • クエリはglueに渡す想定の形式でリスト管理がオススメ。
    • 少し面倒なよくやる系コードをパッケージにしておくと便利。
    • 社内ツール、WEBツールもRから操作できるようにすると再
    現性が劇的に高まる。(Rmdで管理できるようにしよう。)
    • Rの不得意分野は他の言語に任せて解決。
    まとめ

    View Slide

  52. 52
    Python版も作りたい

    View Slide

  53. Enjoy!
    53

    View Slide