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, Git, Droneを使ってconfluenceへのKPI予測レポートを自動化した話
Search
Kazuhiro Maeda
April 04, 2020
Programming
690
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
R, Git, Droneを使ってconfluenceへのKPI予測レポートを自動化した話
Tokyo.R #84で発表したスライドです。
Kazuhiro Maeda
April 04, 2020
More Decks by Kazuhiro Maeda
See All by Kazuhiro Maeda
Will Positron accelerate us? (update)
kazutan
1
190
積もってく会議メモをどうにかしたかった
kazutan
0
290
分析システムにR Markdownを組み込む
kazutan
0
570
Rに管理されてみる
kazutan
0
500
私とR、そしてキャリア
kazutan
2
4k
tubeplayR v1.0への道
kazutan
2
250
週次KPIレポートをconfluenceへUpするためにやったこと
kazutan
1
1.6k
xaringanパッケージの内容をちょっとだけ
kazutan
0
1.1k
最近のRパッケージ開発事情
kazutan
0
400
Other Decks in Programming
See All in Programming
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
110
net-httpのHTTP/2対応について
naruse
0
470
正しくソフトウェアを作る、前提を疑うための認知の視点 / doubt-premise
minodriven
20
6.5k
AIで効率化できた業務・日常
ochtum
0
120
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
110
LLM Plugin for Node-REDの利用方法と開発について
404background
0
170
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
120
RTSPクライアントを自作してみた話
simotin13
0
580
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2k
AIとASP.NET Coreで雑Webアプリを作った話
mayuki
0
500
ユニットテストの先へ:テスト技法で要求・仕様を整理するJava開発実践 / Beyond_Unit_Testing_Practical_Java_Development_Techniques_for_Organizing_Requirements_and_Specifications
shimashima35
0
390
CSC307 Lecture 17
javiergs
PRO
0
320
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
370
The Invisible Side of Design
smashingmag
302
52k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
200
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
230
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Speed Design
sergeychernyshev
33
1.8k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
210
Transcript
R, Git, Droneを使って confluenceへのKPI予測レポートを 自動化した話 Tokyo.R #84 kazutan 2020-04-04
はじめに 2 / 32
はじめに 自己紹介 名前/アカウント 前田和寛(Maeda Kazuhiro) @kazutan Twitter GitHub Qiita, r-wakalang,
etc... 所属 LINE Fukuoka株式会社 開発センター - DataLabs - DataAnalysisチーム マネージャー 3 / 32
R 本 #宇宙本 #犬四匹本 はじめに 4 / 32
はじめに おしごと LINEグループにあるデータを活用して様々な課題にアプローチ サービス関連 サービスの成長につながる分析 施策の効果検証など オペレーション関連 オペレーションの可視化 オペレーションの効率化につながる分析など 福岡で一緒にEnjoyしませんか?
http://linefukuoka.blog.jp/archives/81637302_people_engineer_interview.html お気軽にご連絡ください 5 / 32
今日のお話 6 / 32
今日のお話 背景 Tokyo.R #82で以下の内容を発表 週次KPIレポートをconfluenceへUpするためにやったこと 担当していた週次KPI予測レポートをconfluenceへPublishする、という内容 この発表をみた社内の方から「これ、うちでもできませんか!?」と問い合わせを受ける 要件を整理し、以前のProductから改良・改善を加える 実装・deployして現在稼働中 今日はこの内容についてお話します
免責事項 具体的なデータおよびコードは社内情報のため伏せてます 量が多いので、かいつまんで説明します 詳細の実装については個人的に質問してください 7 / 32
今日のお話 要件整理 大枠の処理は以下の通り daily KPIsを算出 算出したKPIスコアを用いてモデリング fitting forecast レポート作成 各KPI指標をplot、table化
関係者が閲覧できる、confluence Wiki上の適切な場所へレポート作成 各指標ごとにページを分けていく 8 / 32
Overview 9 / 32
Overview システムアーキテクチャ こんな感じで構築しました: 10 / 32
Overview Outlines 1. R実行環境用のDocker imageのビルド 2. 分析フローの構築 1. データ取得、指標算出 2.
モデリング、forecast 3. レポート用Rmdファイルを生成 4. Rmdファイルをrender & Confluence Wikiへpublish 5. 上記処理をオーガナイズするスクリプト 3. Droneをセット 4. Jenkinsをセット 11 / 32
Overview ポイント1 - Droneを採用 cf. Jenkinsに代わるGo製OSS CIツールDrone 実行環境がdockerコンテナベース 実行環境の構築やカスタマイズが容易、再現性の担保 Rをフルに使える!!!
gitとの連携、UIがシンプルで使いやすい トリガー設定やsecretsが簡単・便利 すでに弊社はDroneを採用していてすぐに使える状態だった <- 重要!! ポイント2 - メンバーで共同開発 データ処理・モデリングをメンバーに、全体設計・その他を私が担当 タスクを細分化していくことで、効率よく開発ができた 12 / 32
実装(1) R実行環境用のDocker imageのビルド 13 / 32
実装(1) Docker imageのビルド 構築するDocker imageの内容 詳細は書けないので、要点のみ rockerjp/verse をベースに構築 https://hub.docker.com/r/rockerjp/verse 基本的に必要なものがすべて含まれている(重いけど)
追加要素 xgboost, prophetなど conflr 社内便利パッケージ 社内分析用DBへの接続に必要な諸設定 14 / 32
実装(1) Docker imageのビルド Docker imageのdeploy image build/deployにDroneを利用 1. 社内のGHEにdocker用リポジトリを準備 2.
Dockerfileを設置 3. Droneの設定用yamlファイルを準備 公式のDocker pluginを利用 http://plugins.drone.io/drone-plugins/drone-docker/ imageは社内のHarborへ Harborと接続する設定などはDroneのsecretsを利用 triggerはpush, mergeに設定(定期実行にはしない) こんな感じでうまくできました 15 / 32
実装(2) 分析フローの構築 16 / 32
実装(2-1) データ取得、指標算出 データ取得 発表時間の都合により省略 基本的な部分は、以前発表したこちらの内容を参照してください: 週次KPIレポートをconfluenceへUpするためにやったこと - 2.前処理とKPI算出 指標算出 発表時間の都合により省略
基本的な部分は、以前発表したこちらの内容を参照してください: 週次KPIレポートをconfluenceへUpするためにやったこと - 2.前処理とKPI算出 17 / 32
実装(2-2) モデリング、forecast モデリング 発表時間の都合に省略 基本的な部分は、以前発表したこちらの内容を参照してください: 週次KPIレポートをconfluenceへUpするためにやったこと - 3.モデリング forecast 発表時間の都合により省略
基本的な部分は、以前発表したこちらの内容を参照してください: 週次KPIレポートをconfluenceへUpするためにやったこと - 3.モデリング 18 / 32
実装(2-3) レポート用Rmd生成 今回の要件 KPI指標それぞれでforecast それぞれの指標ごとにレポートを作成・publishする 基本的なレイアウトは同一 対象とする変数が変わる title: をそれぞれの指標に合わせて変更する必要がある これが厄介で、R
Markdownのパラメータでは対応不可 今回のアプローチ 1. glue を想定した、Rmdファイル自体のテンプレRmdファイルを準備 2. テンプレRmdファイルをreadlines して文字列として取得 3. glue glue() を利用して、取得した文字列へ変数名などを流し込む 4. 文字列をwritelines して、Rmdファイルを生成する 19 / 32
実装(2-3) レポート用Rmd生成 テンプレの内容(例) title: KPI予測 - {var_name} (中略) ```{r} target_var
= '{var_name}' (以下 target_var 利用 filter 処理) ``` glueして生成したRmdの内容(例) title: KPI予測 - uu (中略) ```{r} target_var = 'uu' (以下 target_var 利用 filter 処理) ``` 20 / 32
実装(2-4) render & publish line/conflrパッケージ Rmdファイルをrenderしてconfluence WikiへPublishするのに利用 conflr confl_create_post_from_Rmd で可能
しかし、できればRmdのyamlヘッダに設定を書いておきたい… PR出した https://github.com/line/conflr/pull/44 (現在はさらに改良されているけど)これで設定はRmdテンプレに書けばOKに output: conflr::confluence_document: space_key: "kosaki" parent_id: "20200404" update: TRUE use_original_size: TRUE 21 / 32
実装(2-5) 分析処理のオーガナイズ exec.R 「このファイルを実行すれば1-4の処理が順次実行される」ように組む droneからshellでこのファイルを実行させるため このとき、drone側からパラメータを渡す # 感 設定 最初
入 args commandArgs(trailingOnly = TRUE) confl_username as.character(args[1]) confl_password as.character(args[2]) db_user as.character(args[3]) db_password as.character(args[4]) 22 / 32
実装(3) Droneの設定 23 / 32
実装(3-1) drone.ymlの設定 主な設定内容 こんな感じです: kind: pipeline type: docker name: real_exec
steps: - name: upload_report pull: default image: (実装1 準備 docker image 指定) environment: CONFL_USERNAME from_secret: confl_username CONFL_PASSWORD from_secret: confl_password DB_USER from_secret: db_user DB_PASSWORD from_secret: db_password commands: - Rscript ./exec.R $CONFL_USERNAME $CONFL_PASSWORD $DB_USER $DB_PASSWORD $DRONE_BRANCH 24 / 32
実装(3-1) drone.ymlの設定 drone側の設定 1. DroneのWeb UIを開き、該当のGitリポジトリへ 2. 該当リポジトリをActivate 3. ymlファイルへのパスとSecretsを設定
項目については一つ前のスライド参照 4. Cron Jobsについては設定しない 理由は実装4にて説明 これだけでOK 25 / 32
実装(4) Jenkinsの設定 26 / 32
実装(4) Jenkinsの設定 なぜJenkinsも使うの? Drone v1以降にはCron Jobsを設定可能 しかし、「何時に実行!」という設定は難しい cf. Go製OSS CI/CDプラットフォーム
drone 1.0.0-rc.1 の新機能・変更点 今回はできるだけ更新時間を固定させたい DroneのAPI経由で更新するスクリプトをJenkinsのcronで回すことにした 設定内容 詳細は省略 Drone APIについては公式Doc参照: https://docs.drone.io/api/overview/ これで完成! 27 / 32
まとめ 28 / 32
まとめ: 全体像の確認 これを実装しました: 29 / 32
まとめ: 振り返りと今後の展開 よかったこと Droneを利用することでコンテナベースの実行環境が実現できた 各処理をコンポーネント化して実装したのでメンテしやすい モデルの改善や出力の変更など ほとんどがgitベースでの開発なのでWorkflowがスムーズ 今後の展開 モデル実装に関して 複数のモデルを比較したり、パラメータチューニングなど
今後はMLflowなど活用して、モデリング部分を切り離してスムーズにしたい 出口を切り替えれて応用 plumberを使ったAPI DBに出力し、Tableauやshinyなどへ 30 / 32
今回話さなかった内容 実際にはbeta環境とreal環境を準備してる gitのbranchで管理してる drone.yml側でも調整してる testやnotifyも組んでる 確認や検証はだいじですね Rでのいろいろな小技など この辺はまたどこかで機会があれば 31 /
32
Enjoy! 32 / 32