ども、@kimihom です。
Rails を使って Web アプリケーションを作ってる分には、ActiveRecord をちゃんと理解すれば十分だ。そして複数テーブルにまたがった join
や preload
の方法などを理解することで、効果的なクエリの発行を学んでいくことだろう。以下のスライドに紹介している。
さて、その先を目指すってなったらデータ分析をしていくことになる。今回はそんな発展的なデータベースについてのお話と学習方法などについてご紹介しようと思う。
データ分析の重要性
それなりに自社サービスでユーザーが増えてくると、「優良ユーザーはどんな行動をしているのだろう」とか「顧客はどんな種類があるのだろう」とかの疑問が湧いてくる。これは、実際にサービスの思想や理念をベースにして開発している時に、その思想に沿った使い方をしてくれているのかの検証としても非常に重要である。理念ばかりに焦点を置きすぎて、実際のユーザーを理解していないようでは独りよがりのサービスとなってしまう。サービスとして自分たちのやっていきたい方向と、実際のユーザーの使い方の両方を適切に比較することで、初めてサービス提供者とユーザーの理想的な関係が生まれる。
オーケー。実際にユーザーに話を聞きに行けばいいじゃないかという意見はその通りだ。生の声ほど直感的に理解できるものはないし、実際に聞くことで生まれるモチベーションってのも確かに存在する。それはそれで継続してやっていきたいことだけども、ユーザーが増えてくるにつれ、話を聞きに行けることに限界がやってくる。
そんな時にデータ分析の出番はやってくる。
データ取得とデータ分析の違い
データ分析とはいえ、結局は SELECT
文を投げるだけではあるけども、その種類や方法は大きく異なる。
データ解析には2通りの方法がある。ユーザーの"属性"を知るのと"行動"を知るのの2つだ。前者はいわゆるユーザープロフィールなどを集約するので、既存のデータベースから引っ張ってこれる。逆に後者は行動を一つ一つデータとして蓄積していかなければならないので、それ用の設計も必要になるし、集計の方法も変わってくる。
ユーザーの属性や行動を知るために、Google Analytics や Mixpanel、Repro といったのがメジャーなものとして存在する。これらを使えば、それなりの分析は可能になるけども、実際の生データとして自分で DB の SQL を叩けるようになることでより柔軟で欲しいデータを正確に分析することができるようになる。
今回の記事ではその中でも特に重要になるであろうウィンドウ関数と共通テーブル式を簡単にご紹介する。
データ分析で活躍する SQL
データ分析で特に活躍するのが、ウィンドウ関数と共通テーブル式。この2つをしっかりとマスターすることで、柔軟で欲しいデータを簡潔に記述することができる。
ウィンドウ関数
ウィンドウ関数は、一度集約した結果を再度通常のクエリに組み込ませることができる関数だ。これによって例えば「全体のユーザーの中でこのユーザーはどんな属性か」といったことを分析することが可能になる。用法は以下のような感じだ。
AVG() | ROW_NUMBER() | RANK() | LAG() etc... OVER (PARTITION BY ~ ORDER BY ~ ROWS BETWEEN ~ AND ~)
共通テーブル式
1つのクエリの中で使える一時的なテーブルに名前をつけて利用することができる。これで一度取ってきたデータを元に、さらに集約をかけるみたいなことが可能になる。後続の SELECT 文の FROM に、その集約したテーブル名を利用することができる。用法は以下のような感じだ。
WITH テーブル名 AS (SELECT ~ ), テーブル名 AS (SELECT ~ )… SELECT * FROM テーブル名;
もはや裏技みたいな感じなんだけど、1つのSQLで以前のSQLの実行結果を元にデータを構築するってことができる。それを1つのSQLで書くことができるので、今までプログラムでSQLを組み立てる必要があったのが、 SQLだけで書けるようになった。
Heroku での活用方法
Heroku Postgres には Dataclips という機能があって、これを使えば色々な SQL を実行してデータを取得するみたいなことを簡単に行うことができる。しかも、その結果は URL でシェアすることができるので部署をまたいだデータの共有が可能になる。まずは SQL 分析の訓練として Dataclips を積極的に活用していきたいところである。
さて、この実行結果は当然SQLの実行結果と同じく"表"で出力される。これをなんとかグラフ化したいと思うことだろう。
Heroku Dataclips にはそんな時のために Dataclips の結果を JSON 形式で結果を出力する方法が存在する。それは、なんとURLの末尾に .json
をつけるだけだ!これによって、例えばデータをサーバーから読み込んで、フロントエンドのチャートツールで描画といったことも可能になる。
終わりに
今回はデータ分析の概要だけをご紹介した。本記事でより興味を持ってデータ分析をやっていきたい!となったら下記の本はとても参考になるので読んでみてはいかがだろうか。

- 作者: 加嵜長門,田宮直人,丸山弘詩
- 出版社/メーカー: マイナビ出版
- 発売日: 2017/03/27
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
実はこのデータ分析によってサービスを改善していく姿勢そのものが、「カスタマーサクセス」だ。こういった知見は私はまだ未熟なのでこれからも引き続き勉強していきたいと思ってる。