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
700
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
200
積もってく会議メモをどうにかしたかった
kazutan
0
300
分析システムに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
Foundation Models frameworkで画像分析
ryodeveloper
1
510
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
820
React本体のコードリーディング
high_g_engineer
1
130
仕様駆動開発へのトライを機に チームに適合する手法を模索し続けている話
freee
PRO
0
400
AWS DevOps AgentのAzure接続機能を検証して見えた活用法/Use Cases Verified for the AWS DevOps Agent's Azure Connectivity Feature
masakiokuda
1
210
今さら聞けない .NET CLI
htkym
0
180
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
160
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
170
OpenSpecのproposalにbrainstormingを持たせてみた
tigertora7571
1
200
霧の中の代数的エフェクト
funnyycat
1
460
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
580
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
140
Featured
See All Featured
Un-Boring Meetings
codingconduct
0
370
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
890
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
460
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
920
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.2k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Designing for humans not robots
tammielis
254
26k
The Language of Interfaces
destraynor
162
27k
Designing Powerful Visuals for Engaging Learning
tmiket
1
470
Leo the Paperboy
mayatellez
8
2.1k
What does AI have to do with Human Rights?
axbom
PRO
1
2.3k
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