Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
580
Rに管理されてみる
kazutan
0
510
私とR、そしてキャリア
kazutan
2
4k
tubeplayR v1.0への道
kazutan
2
260
週次KPIレポートをconfluenceへUpするためにやったこと
kazutan
1
1.6k
xaringanパッケージの内容をちょっとだけ
kazutan
0
1.1k
最近のRパッケージ開発事情
kazutan
0
410
Other Decks in Programming
See All in Programming
FreeBSDでZabbixを動かす.pdf
kenkino
0
280
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
460
ゲームコントローラやキーボードのファームウェアをSwiftで書く
kishikawakatsumi
1
240
Webの地図
yosuke_furukawa
PRO
6
4.5k
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
1
550
速習iPhone Duo対応
yuukiw00w
1
410
海上で動くGoサーバー: goroutineとchannelでさばく航行データストリーム
atsuki_seo
0
700
更なる可用性を求めて、5年間運用したKotlinのアプリケーションをGoでリプレイスする話
ken_tunc
0
240
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
0
1.3k
kubernetes コンポーネント開発入門 / 新卒N年目の勉強会&交流会!〜〇〇への誘い〜 #n_study
mazrean
0
240
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
0
280
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
470
Featured
See All Featured
Technical Leadership for Architectural Decision Making
baasie
3
570
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
830
KATA
mclloyd
PRO
35
15k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
350
Test your architecture with Archunit
thirion
2
2.4k
Everyday Curiosity
cassininazir
0
320
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Navigating Team Friction
lara
192
16k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Claude Code のすすめ
schroneko
67
230k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
410
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