仕事でデータ分析をやる機運が高まっていて、Google Data Studioをぼちぼち使っていこうとしてる。仕事のデータは分析する前のデータパイプラインなどあれこれ考える必要があるので、ひとまず趣味プロジェクトのML-Newsを題材にして遊んでみる。こういうときに雑に遊べる砂場プロジェクトは最高。
Data Studioの大雑把な概念
Data Source
Data StudioにはData Source
という概念がある。Data Sourceは名前の通りデータソースで分析をかける対象データを指す。例えば
- Google Spreadsheet
- Google Analitics
- BigQuery
- Cloud Spanner
- Search console
などなど様々なものをデータソースとして指定できる。手元のcsvをアップロードするFile Upload
などもある。
Reports / Explore
同じようにグラフが書けて似ているなって感じだけど、こういう使い分けかな。
- Reports: みんなで定期的に見るダッシュボードを整理する用
- Explore: データ分析担当者が探索的に条件等を指定して分析速度重視でやる用
綺麗にやるのは後でやるとして、Data Studioで何ができるか知りたいので、Exploreを先に触った。ここでは中心となるData SourceをGoogle Analyticsとする。
ページタイトル毎のPVなどをテーブルに吐き出したりグラフに描画できて、便利は便利であるけど、これ単独ではGoogle Analyticsでできることとあまり変わらない。ちょいちょい触った結果、威力を発揮しそうなのは複数のデータソースを統合する時かなと思った。SQLでいうjoinを相当ができると思うとよい。
複数のData Sourceを統合して分析
ML-NewsのURIはこういう感じになっていて、以下の数字の箇所がDB内のexample_id
というものに対応している。
このexample_id
に関連するtweet一覧やブコメ一覧をDBの中に持っている。ちなみにDBではtweetのスキーマを以下のように持っている。
go-active-learning=> \d tweet Table "public.tweet" Column | Type | Modifiers -------------------+-----------------------------+------------------------------------------------------------ id | integer | not null default nextval('tweet_id_seq'::regclass) example_id | integer | not null default nextval('tweet_example_id_seq'::regclass) created_at | timestamp without time zone | not null id_str | text | not null full_text | text | not null favorite_count | integer | not null retweet_count | integer | not null lang | text | not null screen_name | text | not null name | text | not null profile_image_url | text | not null label | integer | not null default 0 score | double precision | not null default 0.0 Indexes: "tweet_pkey" PRIMARY KEY, btree (id) "example_id_id_str_idx_tweet" UNIQUE, btree (example_id, id_str) "example_id_idx_tweet" btree (example_id) Foreign-key constraints: "tweet_example_id_fkey" FOREIGN KEY (example_id) REFERENCES example(id) ON DELETE CASCADE
よって、example_id
を軸にjoinしてあげれば、PVと言及があるtweet数などの関係を解析することができる。これはあくまで一つの例であって、他にも例えば
- 顧客の満足度(別のアンケートが手元にある想定)とWebサイト上での使われ方(Google Analiticsが持ってる)
- 顧客毎の売り上げとWebサイト上での使われ方(Google Analiticsが持ってる)
といったことが業務関連だとできそう。
複数のData Sourceを統合するにはData SourceをBlended Data
というものにする必要がある。
tweetの元データはAWS上のRDSに存在する。業務で真面目にやる場合は何らかのデータパイプラインを組んでBigQueryに定期的に流す、といったことが必要になる(この辺はあまり詳しくない...)と思う。しかし、今回はアドホックな分析がしたいだけなので雑にやる。
- SQLを叩いてcsvとして手元に落としてくる
- そのcsvをData Sourceの一つとして選択できる
File Upload
経由でGCSに保持
雑にこういった感じのコマンドでcsvにする。
psql -U postgres -h hogehoge -d go-active-learning -p 5431 -F "," -A --pset footer -c 'SELECT example_id, favorite_count, retweet_count, screen_name FROM tweet;' > tweets.csv
統合されたData Sourceの完成系はこういう感じになる。Join keys
を元にどう繋ぐかを決定する。統合後に分析対象としたいものはDimensions
やMetrics
に入れておく。左側がGoogle Analitics、右側がDBから抽出したcsvをData Sourceに指定したもの。
Google Analitics側はどの情報を元にexample_id
とすればよいか当然知らないので、指定する必要がある。Google Analiticsのデータソースは、関数を使って自分が必要な列を持たせることができる。今回必要な情報はPage Pathというところにあるので、それを正規表現を使って抽出する。
Google Analiticsで持っている各行のデータには今回の解析の対象外(個別のページではなくカテゴリ別のページ、など)としたいものも存在する。そういったものはFilter
を使って抽出する。今回はPathの情報とタイトルの情報を使ってフィルターを書いた。
あとは分析しまくる
ここまでくれば後は簡単。やりたい分析をやるだけ。棒グラフや散布図を書いて自分が欲しい情報を抽出してくればよい。Google Analiticsだけで分からない分析の例として、Page Viewsとretweetされた数の総数の関係を散布図で書いてみた。
各点のページタイトルもしゅっと分かるので、深掘りなどもすぐできる。といっても深掘りするのもめちゃくちゃ簡単で、散布図中の深掘りしたい点をクリックしてやると他のテーブルや図もその条件に勝手に絞ってくれる。
感想
Data Studioを使ってみる前はデータソースをあれこれ指定してダッシュボードで可視化できる君くらいに思っていたが、join相当のことができると知って印象ががらっと変わった。join keysのことを意識しつつ、何らかの形でデータソースに上げることができれば分析可能になるので、エンジニアとしては(ひとまず)データを上げるところまでを考えれば使ってもらえる形にできる。分析者視点としてはデータソースにまで上がっていれば、複数のデータソースを統合してより詳細な分析をExploreでアドホックにやったり、みんなで見るダッシュボードを整備するといったことができる。かなり便利であることが分かったので、もっと使い込んでみようと思います。