2014年1月27日月曜日

Pythonでデータ分析ごっこ事始めしてみる

弊社(Cambridge Energy Data Lab)ではデータサイエンス系の開発言語をPythonに統一しておりまして、社員達がNumPy、SciPy、pandasなどなどを目下勉強中です。

データサイエンティストも積極採用中なのですが、応募者全員に以下のデータ解析タスクをGitHubから提出するという課題を課しています。

Cambridge Energy Data Lab: EnergyDataSimulationChallenge

既に15フォークされていて、質の良いPull Requestも多く来ていて嬉しい限りです。Cambridge大学の学生もどんどん応募してきてくれています。皆さんもお暇な時に是非 :)

これが採用に非常に有効で、まずランダムにCVを送りまくっている応募者や、最低限のスキルの身に付いていない応募者のフィルタリングが非常に効率的に行えます。基本的にはこのプログラミングタスクの提出をしていない応募者のCVは一切確認しません。また、どの言語が得意なのか、どんなライブラリの扱いに慣れているか、どのように考えて分析を進めているのかなどなど、やはりコードを見ると非常に効率よく応募者のスキルを知る事ができます。

とか偉そうな事を言っておいて、実は僕はWeb Applicationの開発に集中しないといけないという言い訳があり、自分ではデータ解析部分に殆ど触れておらずデータサイエンティストに任せっきりにしていました。しかしながら採用活動をバンバンしている手前、それじゃいかんなと反省して、週末にちょっと時間をみつけて自分でもPythonでデータ解析をしてみました。

環境設定

まずはCanopyをインストールしました。こちらはPythonでのデータ解析に利用されるライブラリ群(NumPy、SciPy、Matplotlib、pandasなどなど)に加えてIPythonが搭載された統合環境です。これをインストールするだけで必要なツールが一気に揃うので、Macを使っている方には非常にお薦めです。

分析結果はIPython Notebookにまとめると便利です。Web上でInteractiveにコードの実行が出来、かつDescriptionなども加えられて自分の分析がNotebookとしてまとめられるので分析結果の公開が非常にやり易いです。

以下のように実行すると、Plotに必要なライブラリが読み込まれ、かつ結果のグラフ等の出力がHTMLに出力されて便利です。

ipython notebook --pylab inline

UIはこんな感じ。


チャレンジ

覚えないと行けない事は非常に多いのですが、とりあえずはpandasDataFrameとしてデータを取り込んで、Matplotlibで可視化するという事を目標にして、Challenge 2 - Visualization of Energy Consumptionsに取り組みました。主にデータの可視化、時系列変換、クラスタリングを行うタスクです。

初めて触るということもありやっぱデータの扱いに慣れておらず、半日近くかけてなんとか以下の処理だけ済ませました。

  1. pandasにデータ取り込み
  2. そのままPlot
  3. データのDiffをプロット
  4. 時系列変換してプロット
  5. データの分類(クラスタリング)をしてプロット

ちなみに、Gitに載せておくとIPython Notebook Viewerというサービスで公開できて便利です。僕の分析はこちらから見られます。とりあえず最低要件だけはなんとか済ませたというレベルなので、暇を見つけてちょっとかっこ良く分析するかな。特に単純に平均から標準偏差を足して引いてしてるだけの分類がダサいので。

0 件のコメント: