データ解析のプロジェクト7つ道具
最近企業のデータを解析して示唆を出す or 予測モデルを作るみたいなプロジェクトをいくつか回しているのだが、チームとしてデータ解析を進める上でどのようなツールを使うと良いのかまとめてみた。現状はこんな感じでやっている。
- (前提として)Python
データ解析関連ではPythonかRを用いるのが良いと思う。この二つの言語であればライブラリも充実しているので、生産性はかなり高くなる。但し、Rubyやその他の言語を既に習得している場合はRよりもPythonの方が習得コストは低いように思うので今回はPythonを紹介させていただいた。 - iPython notebook(Jupyter)
インタラクティブな形式で、webページ上で試行錯誤しながらコーディングを進めることができるツール。データ解析の場合は結果を見ながら作業をした方がミスも減り、結果的に圧倒的に早くコードが書ける。グラフィカルに画像やチャートを表示することもできるし、実験ノートとして気がついたことをmarkdown形式でコードの隣に書き記すこともできる。ipython notebookで処理を一通り書いた後に、pythonのscriptとして書き直してより大きなデータに対して計算回すとか分散で処理させるとか、他のシステムに組み込むみたいなことをしている - pandas
データフレーム形式でデータを扱えるようにするPythonのライブラリ。numpyでやるよりもデータの整形がしやすいし、ipython notebookとの親和性も非常に高く、HTML table形式でデータを出力してくれるため非常に見やすい。DBからの読み出しや書き出しも非常に楽だし、大きなサイズのデータをDBからチャンクに分けてとってきて処理することや、ダミー変数への変換もやってくれる - scikit-learn
機械学習に必要な機能が一通り備わったライブラリ。正規化等の前処理から、PCA等の次元削減処理、クロスバリデーション用のデータ分割、各種学習アルゴリズムの実装、学習器の精度評価、パラメータサーチまでscikit-learn上の機能を用いて行うことが可能 - Lasagne / xgboost
Scikit-learnに実装されていないようなアルゴリズムは別途ライブラリを使用する。Lasagneはニューラルネットのライブラリであり、xgboostはKaggle等のコンペで大人気のGradient Boostingのライブラリである。各種アルゴリズムのscikit-learnラッパーを用いることで、scikit-learnのほかのアルゴリズムと同様に扱うことが可能
- Git & GitHub
コードの共有 / バージョン管理に用いる。GitHubは最近ipython notebookの表示にも対応したため、非常に使い勝手は良くなった。但し、いわゆるgithub-flowみたいな開発フローのモデルがデータ解析系の案件に対して効くのかどうかは不明である。GitHubのIssues機能を使ってタスク管理をすることもできる。 - Google SpreadSheets / Excel
スライドに落とす前に、実験結果を表形式でまとめる時に用いる。どういう実験をどれだけやって、それぞれの精度がどうだったかというのを見るにはなんだかんだ言って表計算ソフトが一番実装スピードが早いように思う。エンジニアは使うの嫌いなのだけれども、ExcelやGoogle Spreadsheetはうまく使いこなせば非常にパワフルなツールだと個人的には思う - PowerPoint / Keynote
最終的な資料として落とす際には、PowerPointもしくはKeynoteを利用している。データをしっかり見せたいのであればPowerPointの方がグラフ機能が充実しているのでオススメであるが、資料をキレイに見せたいのであればやっぱりkeynoteの方がよい。
上記の組み合わせが本当に最適なのかといえばそんなことは全くない。日々新しいツールが出てきているし、もっと良いやり方はいくらでもあるような気がしている。例えばどのようにデータや成果をプレゼンテーションすべきかという点でいえば、実はパワポなんか使わないでipython notebookを用いてインタラクティブなダッシュボードをサクッと作成し、簡単に数値をいじりながらd3.js等でビジュアライズしたデータを見せるみたいにした方がよいかもしれない。今後もいろいろ試してみながら可能性を探りたい。