Slide 1

Slide 1 text

分析システムにR Markdownを組み込む Tokyo.R #102 kazutan 2022-10-22

Slide 2

Slide 2 text

はじめに 2 / 23

Slide 3

Slide 3 text

はじめに 自己紹介 名前/アカウント 前田和寛(Maeda Kazuhiro) @kazutan Twitter GitHub Qiita, r-wakalang, etc... 3 / 23

Slide 4

Slide 4 text

はじめに 書籍 4 / 23

Slide 5

Slide 5 text

はじめに 所属 LINE Fukuoka株式会社 Data Scientist DataLabs - Senior Manager Data Science Team Machine Learning Team Data Engineering & Solution Team LINE株式会社 CDO Office 5 / 23

Slide 6

Slide 6 text

はじめに 今回のお話 分析のシステムにR Markdownを組み込んで構築したときのお話 具体的なところについては、すでに発表済み 週次KPIレポートをconfluenceへUpするためにやったこと R, Git, Droneを使ってconfluenceへのKPI予測レポートを自動化した話 今回はこれらを構築するときに私が意識したことや設計時のポイントについてお話しま す R Markdownを組み込んだKPI予測システム 全体設計をするときに考えたこと Rでシステムを組むときに考えたこと R Markdownをシステムに組み込むときに考えたこと 6 / 23

Slide 7

Slide 7 text

R Markdownを組み込んだ予測システム 7 / 23

Slide 8

Slide 8 text

Background KPIsを予測して可視化/レポート化するのを自動化 daily KPIを算出 算出したKPIスコアを用いてモデリング fitting, forecast レポート作成 各KPI指標をplot, table化 関係者が閲覧できる、confluence Wiki上の適切な場所へレポートs区政 上記をすべて自動で定期的に実行できるようにする 詳細は「 R, Git, Droneを使ってconfluenceへのKPI予測レポートを自動化した話」を参照 8 / 23

Slide 9

Slide 9 text

Overview システムアーキテクチャ 9 / 23

Slide 10

Slide 10 text

全体設計をするときに考えたこと 10 / 23

Slide 11

Slide 11 text

プロセスを意味のあるまとまりで分離 プロセスを大きく分割する 1. データ加工 2. モデリング 3. Rmd生成/加工 4. render/publish できるかぎり「疎」な結合にする ブロック別での開発をスムーズにするため 最適化のために必要(次のスライド) それぞれのブロックを差し替え可能にするため -> 1枚のRmdファイルで組まないこと 11 / 23

Slide 12

Slide 12 text

実行(利用)環境を最適化 すべてをR上で処理する必要はない データ加工プロセスはPresto/Sparkなどで実行 「Rは読めないけどSQLは読める」という人はたくさんいる データエンジニアリングを他のメンバーに託せる あるいはDWHやData Martを準備してもらう 時系列モデリングについても、適切なツールがあるならそれを利用 ただし、組み合わせるものが増えるとコストも上がる 主にメンテナンスやトラブルシューティング パフォーマンスとのバランスなどで決定 12 / 23

Slide 13

Slide 13 text

Rでシステムを組むときに考えたこと 13 / 23

Slide 14

Slide 14 text

関数化・モジュール化の徹底 処理は関数に書き出す プロセスを構造化 後のメンテナンスコストを低下 各処理でのI/Oを明確化 テスト設計がスムーズに バグ対策にも パッケージ化とは異なることを意識 パッケージの関数は汎用性などを求める システムにおける関数化の目的は上述の通り 汎用性は二の次 14 / 23

Slide 15

Slide 15 text

テスト/エラー検知を意識する ちゃんと動くのが前提 動作確認はきっちりする必要あり テストは重要 単体/ユニットテストをできるように組む 「テストがしやすい」粒度での関数化/モジュール化を 増やしすぎるとコストが跳ね上がる バグを見つけやすいレベルを意識して 想定できないからエラーは発生する エラーが発生しないシステムなんてない どの処理でエラーが発生したのかをnoticeするように 15 / 23

Slide 16

Slide 16 text

自分ではない人がメンテできるように マニアックよりもクオリティを 高い技術力を発揮できるのは気持ちいい でも、あなたがずっとそれを見続けるのですか? 属人化に直結する 複雑な構成にするのは避けよう どうせメンテナンス性も低下する 資料をちゃんと作る 他の人が読んでも理解できるようにする工夫を コメント充実 ドキュメントを作成 資料作成まで含めての工数を見積もること そして、1ヶ月後の自分は別人だと考えよう 16 / 23

Slide 17

Slide 17 text

R Markdownをシステムに組み込むとき に考えたこと 17 / 23

Slide 18

Slide 18 text

要件定義を忠実にRmdへ 使われないレポートは価値がない 価値 = ユーザーの期待に応えること ユーザーニーズをきっちりと把握すること そのうえで、R Markdownを設計する テンプレート化 Rmdの特徴はテンプレート化できること 定常的/定型的なレポートがいい Rmdは基本テキストファイル(md) 普通にRから文字列をいじれる glue パッケージなどを利用して動的に書き換えると楽 18 / 23

Slide 19

Slide 19 text

極力Rの処理を入れない Rmd内のチャンクで複雑な処理はしない Rチャンク内でのエラーは追いにくい Rでの実行環境など想定しにくいものが多い Rmdでのデバッキングはめんどくさい 毎回renderするのは大変 あくまで表出層のみに留める だいたいこんな感じに 整形済みの必要なデータ読み込み 可視化 数値の動的な代入 (必要なら)文字列の加工など 19 / 23

Slide 20

Slide 20 text

R Markdownを使うメリットって? 表出層を作成するときのコストがかなり少ない ベースがmd UIエンジニアリングスキルがなくても作れる Skeletonがシンプルになる 表現力が高い Pandocを活用できる 非常にパワフル Publishもいろいろできる システム的に連携しやすい 分析環境からそのまま処理できる render 一発でいけるのは、やっぱりすごい 20 / 23

Slide 21

Slide 21 text

まとめ 21 / 23

Slide 22

Slide 22 text

要点のまとめ 全体設計 プロセスを意味のあるまとまりで分離 実行(利用)環境を最適化 Rでの実装について 関数化・モジュール化の徹底 テスト/エラー検知を意識 自分ではない人がメンテできるように R Markdownの実装について 要件定義を忠実にRmdへ 極力Rの処理を入れない 22 / 23

Slide 23

Slide 23 text

Enjoy! 23 / 23