クラウドワークスのデータ分析の基盤と見える化

## はじめに

この記事は [CrowdWorks Advent Calendar 2016](http://qiita.com/advent-calendar/2016/crowdworks) 9日目の記事です。

クラウドワークスはご存知の方もいると思いますがRailsで動いています。が、エンジニアのいる席を歩いていると、RubyやRailsではなくて、Pythonの本が転がっていたり、Macで [Jupyter Notebook](http://jupyter.org/) を開いている人を見かけたりします。

サービス開発を行っていく上で、データ分析は欠かせないものだと思いますし、そんな風景を見ていると、エンジニアでもデータ分析をやる必要が出てきているんだなと感じている今日この頃です。

なぜデータ分析が必要になるのか。
それはインターネット上でサービスを提供している以上、当たり前ですが**ユーザーの顔や行動を実際に見ることはできない**ので、数値から読み取らなければユーザーにとって何が良いのか、何が悪いのか、根拠を持って答えられないためです。

よりユーザーにとって良いサービス、良い機能を提供して行きたいと考えた時に、自分の頭の中で考えるだけではなくて、**ユーザーが残していくデータや数値から、ユーザーの仕草や感情を読み取って**、サービスに活かしていく必要があると思います。

そんなサービス開発からは切り離せないデータ分析ですが、僕が入社してからの9ヶ月の間に、クラウドワークスのデータ分析の基盤が大きく変わりました。
どのように変わってきたのか、変わって嬉しかったことをお話します。

## クラウドワークスで使ってきた分析ツール

### 社内サービス時代（入社以前〜）

クラウドワークスでは *professor* と呼ばれる分析に使うための社内サービスが存在します。
簡単に説明をすると、ウェブ上でSQLを実行し、結果をCSVファイルでダウンロードできる機能を持っています。

#### データ抽出方法

- ブラウザ上でSQLを書いて、実行する
- SQLの実行結果のCSVをダウンロードする

#### 分析結果の共有方法

- 共有したい人にCSVをダウンロードしてもらう or CSVを送る
- ダウンロードしたCSVからエクセルやスプレッドシートを使ってグラフにしたものを共有

#### 課題

- スケジューラー機能がないため、日次で数字を追いたい場合、毎日SQLを実行しないといけないのでコストがかかる
- ブラウザ上ではSQLの結果をグラフにできないので、CSVダウンロードして手元で加工する必要がある
- 組織の人数が多くなると、データの共有が一部の人にしか行き渡らない

### pandas時代（半年前〜）

![pandas_logo.png](https://qiita-image-store.s3.amazonaws.com/0/82944/e0d0ef6b-2125-ace6-f8c6-ba708598485c.png)

[pandas](http://pandas.pydata.org/) を使い始めたある先輩エンジニア[^1]によって、半年前くらいからクラウドワークスのエンジニア陣に布教されました。
冒頭にも書きましたが、気付けば [Pythonの本](https://www.oreilly.co.jp/books/9784873116556/) を社内で何冊も見かけるようになりました。

pandasが広まった理由として、

- 一度SQLで受け取ったデータを変数に入れてしまえばオンメモリで扱えるので早い
- 複雑なSQLを書かなくても、SQLで受け取ったデータをpandasで整形できる
- matplotlibなどのライブラリを使って、整形したデータからグラフを作れる

などがあると思います。

#### データ抽出方法

- 自分のマシンからSQLサーバに接続し、データの取得を行う
- Pythonやpandasを使ってデータを整形し、matplotlibなどでグラフ作成まで行う

#### データ共有方法

- 分析に使ったファイル（.py, .ipynb）はGithubで管理と共有
- Cronなどを使って、Slackに数値やグラフを定期的に自動投稿する

#### 課題

- Pythonやpandasの学習コストが高い
- Slackに画像を投稿しても他の投稿に紛れて流れてしまったりして、結局あまり見られない
- いろんなチャンネルで様々なグラフが投稿され始め、どこで何が見れるのかわからなくなる

### Redash時代（約1ヶ月前〜）

![logo.png](https://qiita-image-store.s3.amazonaws.com/0/82944/90df9d22-e155-b0ce-c461-f05118ed47a9.png)

1ヶ月ほど前から[Redash](https://redash.io/)が社内で使えるようになりました。

#### クラウドワークスでの使用状況

- 社内でRedashを使い始めて1ヶ月
- クエリ数は既に100件以上

#### データ抽出方法

- Redash上で、ダッシュボードを作成し、グラフをまとめる
- 作成したクエリはスケジュールを組んで定期的に更新する

#### データ共有方法

- Redash上で全員が確認できる
- チームや目的毎にダッシュボードを分けて作成する
- チームが違っても全員がダッシュボードにアクセスできる

#### 課題

- でかいディスプレイに常に写せるようになったらいいなあ

#### 参考

Redashの設定方法や使い方について詳しく知りたい方は、RedashのAdvent Calendarをご覧ください！（[2016年](http://qiita.com/advent-calendar/2016/redash)、[2015年](http://qiita.com/advent-calendar/2015/redash)）まだ空きがあるので書くチャンスかもしれません！

## 嬉しかったこと

### Redashを使ってできること

個人的な意見になってしまいますが、上記のようなデータ分析を行うためのツールは、あくまでも**自分たちの現状がどんな状態か把握する**ためにあると思います。

ただサービスをより良くしていこうと思った時に、現状の把握ができていないまま進んでしまうのは恐ろしいことのように思えます。

正しくサービスの現状を把握することが、データ分析のスタートラインです。

そう考えると、サービスに関わる人たちが、サービスの現状を把握して、改善を進めていくためのスタートラインに立つために、こういったツールを使って全員が見える状態を作ることが大切です。

### Redashを使ってできたこと

簡易な回答になりますが、クラウドワークスのデータやKPIの見える化が進みました。

Redashを開けば、全員がこれまで作られてきたダッシュボードやクエリを見ることができますし、グラフは定期的に更新されているので、エクセルを作ったり、毎日更新したりするコストがありません。

また、週に一度サービス開発に関わる人たち全員が集まる機会があるのですが、これまでは口頭での共有だけで終っていたものが、Redashの画面をプロジェクターで投影しながら話すことで、サービス全体の数値も全体に共有できるようになりました。

チームや部署に閉じずに、お互いに思いつきでもアイデアが出していける環境に近づいて行けそうです。

### 今後の期待

三人寄れば文殊の知恵、なんて言いますし、現状把握をした後、次のアクションを考える人は多ければ多いほど、サービスに良い影響が出ると思います。

自分自身にも言い聞かせて、Redashの画面を眺めて、あーそうなんだ、で終わらせずに、なぜこの数値が動いたのか、どうすればサービスをより良くできるか、考える癖を付けていけるようにしたいです。

Redashにアクセスしなくても見えるくらいになったらもっといいのになと期待しています。（前にいたチームでは、[**かんばん**](http://engineer.crowdworks.jp/entry/2016/06/22/111847)を使っていました。手作りなので手間はかかりますが、かんばんみたいに「**左を向いたら全部見える**」くらいのお手軽感でKPI見れたらすごいのに、と思ったりしています。やっぱりでかいディスプレイが。。）

## まとめ

サービスや組織の大きさなど、それぞれの環境によって、データ分析の基盤がどこまで必要か変わってくると思います。
これからデータ分析できるようにしたいと思っている人や、もっと良いデータ分析とか共有方法があればいいのに、と思っている人たちの参考に少しでもなれば幸いです。

「うちではRedashじゃないの使ってるよ！」「他にもこういうのあるよ！」などあればコメント頂けるとありがたいです。

この記事は [CrowdWorks Advent Calendar 2016](http://qiita.com/advent-calendar/2016/crowdworks) 9日目の記事でした。

明日はpandasの布教や、Redash導入を進めていただいた [@tenbrother](http://qiita.com/tenbrother) さんが、「エンジニア出身POならではの「仕組みによる自律的なプロダクトマネジメント」」について書く予定です。

**最後に一言**： ここまでえらそうに書いてきましたが、僕はpandasの布教活動やRedashを立てることに協力できていない上に、分析についてはずぶの素人です。基盤作成と見える化を進めていただいたみなさんに感謝感謝です。

[^1]: ある先輩というのは、明日の [CrowdWorks Advent Calendar 2016](http://qiita.com/advent-calendar/2016/crowdworks) の記事を書く予定の [@tenbrother](http://qiita.com/tenbrother) さんです