SlideShare a Scribd company logo
1
Jupyter Notebook と
MySQL で
ゼロからはじめるデータサイエンス
株式会社インフィニットループ 技術研究グループ
波多野 信広
Twitter : @nobuhatano
1
本セッションの内容
Web サービスやゲームを運用している DBA やプ
ログラマの方々で、データ分析に興味がある方向
け
●
Jupyter Notebook + MySQL
– SQL と Python で自由にデータ分析
●
はじめてのデータ分析
– ソーシャルゲームのデータ分析事例
2
まずはインストール
Python 全部入り Continuum Analytics 社の Anaconda
Anaconda 4.3.1 for Windows 64 bit Python 3.6 version
https://www.continuum.io/downloads
3
起動してみる
4
インタラクティブな実行環境
セル
(markdown)
セル
(markdown)
セル
(Python3)
セル
(Python3)
Ctrl + Enter
セルのコード実行
Ctrl + Enter
セルのコード実行
5
グラフを表示するおまじない
一つの Notebook 上では1回実行すれば OK
6
ドキュメント
+
コード
+
実行結果
(可視化)
=
Notebook
7
Jupyter の構造
Notebook
Server
Notebook
File
Kernel
Browser
Zero MQHTTP
Websockets
JSON
8
Python Kernel から MySQL へ
>conda install pymysql
1回でOK!
9
クエリを実行して結果をフェッチ
10
本番 MySQL との連携例
Jupyter
http://localhost:8888
Python3
踏み台
サーバー
ssh
トンネル
リードレプリカ
マスタ
予備
スレーブ
アプリ
予備スレーブ
●
管理画面
●
データ可視化
●
OLAP
●
ダンプ取得
●
スレーブ複製の種
●
Jupyter でデータ分析
社内PC
11
この構成のメリット
●
慣れた SQL で分析
●
最初は全部 SQL で
OK
●
Python でデータ分析
●
DB から PC へ処理を
分散
●
データ分析から機械学
習へと発展
●
グラフ化は jupyter 上 matpotlib で一緒
12
SQL は使ってる
Python は...
これだけ知ってれば Ok!
13
Python のデータ型:リストとタプル
14
リストのスライス
覚え方 最初が0で  [以上:未満]
15
リストとタプルの違い
16
列データの抜き出し:リスト内包表記
[ ④要素にする変数 for ②取り出した変数 in ①元リスト if ③条件 ]
[ ③要素にする変数 for ②取り出した変数 in ①元リスト]
フェッチしたデータは1行が1タプル、全体がタプルのタプル
①、②、③の順で
読んでください
17
zip で複数リストの要素を結合
18
いよいよ
ソーシャルゲームの
データ分析へ
19
データ分析とは
●
単変量解析
– 原因と結果1対1。直感で判定可能
– 平均値、相関係数、回帰直線
●
多変量解析
– 多特性データの原因と結果。直感で判定出来ない
– 重回帰分析、ロジスティック回帰
●
データの分析(統計によるモデリング)の用途
– 分類や未来の予測
– PDCAやフィードバックに活用
20
モデルの例:アイス販売
【目的】 アイスの売上を増やしたい
【モデル】 気温が高くなると売れて、値段が高いと売上が減る
【目的変数】 アイスの販売量
【説明変数】 販売量 = 気温 x 値段
【操作変数】 値段
【データ分析】 
統計的なモデルを選定(モデル化、データの説明、分類)
気温を条件に売上を最大化する価格設定を見つける(予測)
21
モデルの例:ゲームアプリの売上
【目的】 ゲームアプリの課金売上を増やしたい
【モデル】 ゲーム自体の魅力(質)、宣伝で売上があがる
【目的変数】 売上 【説明変数】 質 x 宣伝
【データ分析】 
質は定量化が困難。 「質 = 売上」 で説明する程
目的と説明が逆転。説明変数につかえない
売上=宣伝? 
質(新機能、追加イベント)向上抜きのモデル??
統計モデル~ 以前に
定量化可能な説明変数がまず必要
22
KGI と基本 KPI
売上 = *DAU x 課金者率 x *ARPPU
* KGI (Key Goal Index)
* KPI (Key Performance Index)
* DAU (Daily Active User)
* ARPPU (Average Revenue Per Paying User)
目的変数
*KGI
説明変数
基本*KPI
定量化は完璧!
ただし操作変数がないのが懸念
23
KGI と基本 KPI の分析を
進めます
24
今回の分析対象データ
①ログイン
②課金
①ログイン
●
ユーザー登録時に記録
●
セッション再開毎に記録
●
同じユーザーが1日に何度も
●
約3年で2000万行超のデータ
②課金
●
購入処理毎に記録
●
10万行未満のデータ
25
スキーマ
log_login
カラム名 データ型
login_dt DATETIME ログイン日時
user_id INT ユーザーID
tbl_receipt
カラム名 データ型
user_id INT ユーザーID
purchase_dt DATETIME 購入日時
unit_price INT 課金額
26
KGI: 日次の売上
tbl_receipt
カラム名 データ型
user_id INT ユーザーID
purchase_dt DATETIME 購入日時
unit_price INT 課金額
SELECT
SUM(unit_price),
DATE(purchase_dt) AS Dt,
FROM tbl_receipt
GROUP BY Dt
ORDER BY Dt
27
定期的なトゲは
月初に発売される
お得なパック
営業策、質の操作と売上が関係している
操作の立案にKGI だけで?
もっと効果的な KPI が欲しい
28
基本KPI: DAU
SELECT
COUNT(DISTINCT user_id),
DATE(login_dt) AS Dt
FROM log_login
GROUP BY Dt
log_login
カラム名 データ型
login_dt DATETIME ログイン日時
user_id INT ユーザーID
29
売上グラフと
似ているような
似てないような
測ってみましょう
30
売上と DAU の相関を測る
相関係数 (correlation coefficient) = xyの共分散 / (xの標準偏差)(yの標準偏差)
2つの確率変数の間の関係を図る指標 
DAU は定義から
売上と因果関係
にもかからず中程度の相関
31
基本KPI: ARPPU
日付、ユーザー別売上
さらに平均を求める
SELECT
DATE(purchase_dt) AS Dt,
user_id,
SUM(unit_price) AS Uriage
FROM tbl_receipt
GROUP BY Dt, user_id
ORDER BY Dt
SELECT
T.Dt AS Date,
FLOOR(AVG(T.Uriage)) AS ARPPU
FROM (
SELECT
DATE(purchase_dt) AS Dt,
user_id,
SUM(unit_price) AS Uriage
FROM tbl_receipt
GROUP BY Dt,user_id
ORDER BY Dt
) AS T
GROUP BY Date
32
相関係数 0.168
ほとんど相関なし
33
相関係数 0.623
基本 KPI で重要とも言われる
この事例では相関高くない
課金者率(スペンド率)
34
基本 KPI は相関が不十分
(基本 KPI はターゲットが売上と同じく全ユーザーのまま)
相関が高いか、
操作の立案や評価に繋がる
よりよい KPI を模索
なにか見たいグラフ
ないですか?
35
36
継続中ユーザーの線
新機能リリース
大量ユーザー登録
継続ユーザーもいる
継続ユーザーと同じ傾き
この線は?
復帰キャンペーンで
継続ユーザーが大量離脱?
え?課金者はどう?
37
38
課金ユーザーの初回ログイン日とそのプレイ期間
大量離脱が消えた!
無課金ユーザー層
復帰特典
●
課金ユーザー →気にならない
●
無課金ユーザー →もらえなく不公平
●
広告宣伝で新規ユーザー増加
●
広告宣伝を伴わないとユーザー母数が減る
39
見たかったグラフ
「初回ログイン日とプレイ期間」は
ユーザー動向把握に有効
ただ KGI と KPI からは脱線だった
引き続き探ります
40
売上なので...初心にかえり金額で
41
総課金額だと偏りが強烈
ごく少数の熱狂的愛好者
少額課金者
の2種のユーザー層に見えてしまう
プレイ継続して高額に
なっているのでは?
42
43
課金ランキングとプレイ期間から
プレイ中の平均日次課金額
課金ユーザーのプレイ期間
ユーザー毎
総課金額、ランキング順
SELECT
FLOOR(Sougaku / period) AS DRPU
FROM (
SELECT
user_id,
SUM(unit_price) as Sougaku
FROM tbl_receipt
GROUP BY user_id
ORDER BY Sougaku DESC) AS S
INNER JOIN (
SELECT
u.user_id as id,
DATEDIFF(last_login, first_login) as period
FROM user_login AS u
INNER JOIN (
SELECT DISTINCT user_id FROM tbl_receipt) AS r
ON u.user_id = r.user_id
WHERE DATEDIFF(last_login, first_login) > 0) AS P
ON S.user_id = P.id
課金者のプレイ中の日次課金ランキング
ヒストグラムにして、対数化して、合致する
統計的な分布を調べる?
今回は統計分布を使っての分析の前に
全課金者ではなく対象を絞り込む作業を優先
44
売上に貢献している上位者層を特定
課金上位 3326 位で売上の8割貢献
45
課金ランキングと売上貢献度
46
上位者層のプレイ中の平均日次課金額
47
そのデータの特徴を調べる
「売上の8割を支えるトップユーザー」
だけではまだバラつきが激しい
48
スパイクを除外する四分位範囲を適用
平均と中央値が近い
トップ層をよくモデル化?
49
優良課金ユーザーを月単位で
営業策(イベント)は月単位
月単位の KPI に変換
50
優良課金ユーザー数
日次売り上げと相似
全員対象から
200人程度の対象に!
51
優良ユーザー数と月次売上との相関
SELECT SUM(unit_price), CAST(DATE_FORMAT(purchase_dt, '%Y-%m-01') AS DATE) AS Month
FROM tbl_receipt GROUP BY Month ORDER BY Month")
相関係数 0.995
2つの変数が
ほぼ一致!!
相関係数 0.995
2つの変数が
ほぼ一致!!
52
全員での売上(金額)と
優良ユーザー数(人数)が一致
ターゲット絞り込み成功
この事例では KPI として期待!
53
まとめ
●
Jupyter Notebook
MySQL と接続、SQLとPythonで手軽にデータ分析
●
ソーシャルゲームのデータ分析
弊社の例
月額課金である額以上の優良ユーザー数が売上と相関
操作(質の改善、宣伝)を売上や課金率で PDCA
↓
絞り込んだユーザー層できめ細かい行動分析が可能
操作の立案に有効
データ分析、ビジネス固有の KPI から初めてみましょう!!データ分析、ビジネス固有の KPI から初めてみましょう!!
54
ご清聴ありがとうございました!
ご質問は Twitter : @nobuhatano へ
55

More Related Content

PPTX
Pydata_リクルートにおけるbanditアルゴリズム_実装前までのプロセス
PDF
Recent Advances on Transfer Learning and Related Topics Ver.2
PPTX
[DL輪読会] マルチエージェント強化学習と心の理論
PDF
多人数不完全情報ゲームにおけるAI ~ポーカーと麻雀を例として~
PDF
LBFGSの実装
PDF
ベイジアンモデリングによるマーケティングサイエンス〜状態空間モデルを用いたモデリング
PDF
大規模言語モデルとChatGPT
PDF
『自由エネルギー原理入門』勉強会1章&2章前半
Pydata_リクルートにおけるbanditアルゴリズム_実装前までのプロセス
Recent Advances on Transfer Learning and Related Topics Ver.2
[DL輪読会] マルチエージェント強化学習と心の理論
多人数不完全情報ゲームにおけるAI ~ポーカーと麻雀を例として~
LBFGSの実装
ベイジアンモデリングによるマーケティングサイエンス〜状態空間モデルを用いたモデリング
大規模言語モデルとChatGPT
『自由エネルギー原理入門』勉強会1章&2章前半

What's hot (20)

PDF
よくわかるフリストンの自由エネルギー原理
PDF
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
PDF
時系列予測にTransformerを使うのは有効か?
PPTX
差分プライバシーとは何か? (定義 & 解釈編)
PPTX
[DL輪読会]Learning Latent Dynamics for Planning from Pixels
PPTX
機械学習を用いた異常検知入門
PDF
それでも私が研究を続ける理由
PPTX
強化学習 と ゲーム理論 (MARL)
PPTX
強化学習エージェントの内発的動機付けによる探索とその応用(第4回 統計・機械学習若手シンポジウム 招待公演)
PDF
クラシックな機械学習の入門 4. 学習データと予測性能
PDF
CF-FinML 金融時系列予測のための機械学習
PDF
生成モデルの Deep Learning
PDF
Bayes Independence Test - HSIC と性能を比較する-
PDF
Neural Processes Family
PDF
[DLHacks]PyTorch, PixyzによるGenerative Query Networkの実装
PDF
モデル最適化指標・評価指標の選び方
PDF
機械学習で泣かないためのコード設計
PDF
バンディットアルゴリズム入門と実践
PDF
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
PDF
学振特別研究員になるために~2023年度申請版
よくわかるフリストンの自由エネルギー原理
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
時系列予測にTransformerを使うのは有効か?
差分プライバシーとは何か? (定義 & 解釈編)
[DL輪読会]Learning Latent Dynamics for Planning from Pixels
機械学習を用いた異常検知入門
それでも私が研究を続ける理由
強化学習 と ゲーム理論 (MARL)
強化学習エージェントの内発的動機付けによる探索とその応用(第4回 統計・機械学習若手シンポジウム 招待公演)
クラシックな機械学習の入門 4. 学習データと予測性能
CF-FinML 金融時系列予測のための機械学習
生成モデルの Deep Learning
Bayes Independence Test - HSIC と性能を比較する-
Neural Processes Family
[DLHacks]PyTorch, PixyzによるGenerative Query Networkの実装
モデル最適化指標・評価指標の選び方
機械学習で泣かないためのコード設計
バンディットアルゴリズム入門と実践
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
学振特別研究員になるために~2023年度申請版
Ad

Similar to JupyterNotebookとMySQLでゼロからはじめるデータサイエンス (20)

PDF
【Unite Tokyo 2019】開発から運用まで、デベロッパーをサポートするUnity Services
PDF
Kanonってなぁ~に?~楽々Kanonで華麗にお仕事しよう~
PDF
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PPTX
Visual Studio App Centerで始めるCI/CD(iOS)
PDF
Digdagを用いた大規模広告配信ログデータの加工と運用
PDF
コンピュータビジョンの最新ソフトウェア開発環境 SSII2015 チュートリアル hayashi
PPTX
いまできるデータ分析を Power BI ではじめよう
PDF
チケット駆動開発をパターン言語で読み解く~「成功するプロジェクトのための開発基盤と手法」
PPTX
Visual Studio App CenterでAndroid開発にCI/CDを導入しよう
PDF
実験心理学者のためのPython
PPTX
Visual Studio App Centerで始めるCI/CD(Android)
PPTX
DB TechShowcase Tokyo - Intelligent Data Platform
PDF
この Visualization がすごい2014 〜データ世界を彩るツール6選〜
PPTX
自由と統制のバランス_分析基盤のアプローチ
PDF
Logにまつわるエトセトラ
PDF
pg_bigmを用いた全文検索のしくみ(前編)
PDF
NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB ~ クラウドでGridDBを使ってみましょう ~
PDF
NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB - 強化された時系列データ管理・検索機能について -
PDF
DeNAゲーム事業におけるデータエンジニアの貢献 [DeNA TechCon 2019]
PPTX
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
【Unite Tokyo 2019】開発から運用まで、デベロッパーをサポートするUnity Services
Kanonってなぁ~に?~楽々Kanonで華麗にお仕事しよう~
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
Visual Studio App Centerで始めるCI/CD(iOS)
Digdagを用いた大規模広告配信ログデータの加工と運用
コンピュータビジョンの最新ソフトウェア開発環境 SSII2015 チュートリアル hayashi
いまできるデータ分析を Power BI ではじめよう
チケット駆動開発をパターン言語で読み解く~「成功するプロジェクトのための開発基盤と手法」
Visual Studio App CenterでAndroid開発にCI/CDを導入しよう
実験心理学者のためのPython
Visual Studio App Centerで始めるCI/CD(Android)
DB TechShowcase Tokyo - Intelligent Data Platform
この Visualization がすごい2014 〜データ世界を彩るツール6選〜
自由と統制のバランス_分析基盤のアプローチ
Logにまつわるエトセトラ
pg_bigmを用いた全文検索のしくみ(前編)
NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB ~ クラウドでGridDBを使ってみましょう ~
NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB - 強化された時系列データ管理・検索機能について -
DeNAゲーム事業におけるデータエンジニアの貢献 [DeNA TechCon 2019]
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
Ad

More from infinite_loop (20)

PDF
ChatGPT触ってみた
PDF
社内ソフトスキルを考える
PDF
3Dプリンタって いいね
PDF
VRChatでお酒が注げる飲み物アセットの紹介
PDF
アニメーションとスキニングをBurstで独自実装する.pdf
PDF
I ❤ Virtual Machines 仮想環境をより便利に使うツールたち
PDF
500万行のPHPプロジェクトにおけるログ出力の歩み
PDF
ADRという考えを取り入れてみて
PDF
リファクタリングで実装が○○分短縮した話
PDF
ゲームのインフラをAwsで実戦tips全て見せます
PDF
楽しいVR空間を作る技術と支える技術 #osc19do
PDF
Start rl with_unity_machine_learning_agents
PDF
UniRx の1歩目
PDF
がんばれ PHP Fiber
PDF
心に残った名前ランキング
PDF
プログラムと名前にまつわる座談会
PDF
名は体を表していますか
PDF
名前の力
PDF
大切な名前[Intro]公開版
PDF
複数拠点における開発効率の維持・向上
ChatGPT触ってみた
社内ソフトスキルを考える
3Dプリンタって いいね
VRChatでお酒が注げる飲み物アセットの紹介
アニメーションとスキニングをBurstで独自実装する.pdf
I ❤ Virtual Machines 仮想環境をより便利に使うツールたち
500万行のPHPプロジェクトにおけるログ出力の歩み
ADRという考えを取り入れてみて
リファクタリングで実装が○○分短縮した話
ゲームのインフラをAwsで実戦tips全て見せます
楽しいVR空間を作る技術と支える技術 #osc19do
Start rl with_unity_machine_learning_agents
UniRx の1歩目
がんばれ PHP Fiber
心に残った名前ランキング
プログラムと名前にまつわる座談会
名は体を表していますか
名前の力
大切な名前[Intro]公開版
複数拠点における開発効率の維持・向上

JupyterNotebookとMySQLでゼロからはじめるデータサイエンス