Saturday 4:15 p.m.–4:45 p.m.

Room 201 #pyconjp_201

SREエンジニアがJupyter+BigQueryでデータ分析基盤をDev&Opsする話

yuzutas0

Audience level:
Novice
Category:
Industry Uses
Slide:
slide https://speakerdeck.com/yuzutas0/20170909
Video:
video https://youtu.be/MR09Jb9cf9A

Description

Python(JupyterNotebook)とBigQueryを用いたモニタリング基盤・データ分析基盤の開発・運用について話します。 多様な部署・職種が関わる大企業において、どのような目的・用途・制約が与えられ、そのためにどのようなシステム・プロセスを採用したのか共有します。

Abstract

# ゴール 1. 定常モニタリング:日々のKPI管理を安定化させる 2. アドホック分析:Build・Measure・Learnを回す # トピック 現場ならではの泥臭い話をたっぷりお届けします。 - モニタリング編 - 非技術者が作った重厚長大なExcelシートをいかに置き換えるか - 「時間を掛けて作ったが誰にも使われない」悲劇をいかに回避するか - モニタリング内容の正しさをいかにテストするか - アドホック編 - 分析経験のないエンジニアチームでいかにデータスキルを装着させるか - システム開発の現場で仮説検証プロセスをいかに組み込むか # アーキテクチャ DWHとしてBigQueryに集約 → Python on EC2 + Jenkins で加工 → 各部署の使いやすいツールに出力 - マーケティング部署の見るExcelシート - ディレクション部署が見るRedash - 開発部署/データ分析部署が見るJupyter - 運用部署に届くSlack通知 # Pythonスクリプトの構成(モニタリング) 日夜改善を続けているので発表時には変わる可能性あり - Controller - Jenkinsが叩くためのエンドポイント - 処理の全体像を記述 → Facadeとして他処理を呼び出す - Enum - Python3.4〜のEnumを活用 - Dictonary型で値を管理 - 使いやすくするメソッドを基底クラスに集約 - Model - 値はpandasで整形 - 中間・最終指標を擬似DataTransterObject(DTO)として代入する - DTOをI/Fする際にはPython3.5〜のTypeHintsを活用 - DTOはBigQueryに反映して、プログラム上ではステートレスに保つ - Query - Python3.6〜のf-stringsを活用してクエリを書く - メソッド切り出し → 値の引き渡しによるスコープ制御 - BigQueryとのシンプルなR/Wに特化 - Interface - 入出力先に応じた接続・変換処理に特化(例:週次売上をmatplotlibで可視化) - .envから環境変数を読み込む(例:Slack連携で本番・開発でチャンネルを分ける) 開発・運用のお試し実行としてはローカルのJupyterNotebookを活用します。 実運用PythonのEnumなどをインポートした上で、検証したい処理のみ差し替えます。 もともとJupyterのみで完結する予定でしたが、定期実行やクラス構成検討で生Pythonの方が都合が良いことが分かりました。 # Jupyter on Github の活用(アドホック分析) - ローカル環境:メインモニタでJupyterNotebook、隣のモニタでアプリケーション本体のソースコード - 分析結果はGithubのプレビュー画面で関係者に共有 - コードの差分は全てコミット履歴で管理
  • このエントリーをはてなブックマークに追加
CONTACT