分析結果を楽にカッコよく可視化する方法~2016年版~
大杉 直也
はじめに
リクルートテクノロジーズの大杉です。Pythonで分析した結果をD3jsで可視化するのがマイブームです。今回はその話です。
今回のサンプルスクリプトはこちらをご参照ください。
先日のリクルート自然言語処理ハッカソンでは、Jupyter notebookを使って、
- 分析サーバー内のファイルや、Redshift やElasticsearchのデータにアクセス
- データの前処理・分析
- プレゼン用の画像を作成
をおこなう環境を用意しました。
そのさいに、Jupyter notebookのことを知らない方がおり、もったいないと感じました。
Jupyter notebookはPythonでデータ分析をする方にとって、非常に便利なツールです。
これを使えば、webブラウザから、DBアクセスやら機械学習やら作図やらが行えます。
紹介
- Jupyter notebook
- Plotly
Jupyter notebookは、Google cloud platform のCloud Datalabに採用されたこともあり、今後ますます使われるようになり、便利機能がより充実していくと考えられます。
Jupyter notebookとは
ざっくりいうと、データ分析のIDE (Python)です。RstudioやMatlabのGUIみたいなものです。Webアプリケーションなので、Webブラウザから使用できます。
Anacondaをいれて、conda install jupyter
で使えるようになります。pipでもインストールできますが、NumpyやPandasなどのPythonで分析するにあたって必要不可欠のライブラリの導入も考えるとAnacondaをお勧めします。
インストール後はターミナルやコマンドプロンプトにjupyter notebook
と入力すれば、ローカルサーバーが立ち上がり勝手に起動するはずです。
こんな画面がデフォルト設定のwebブラウザで表示されるかと思います。さきほど、コマンド叩いたカレントディレクトリがホームディレクトリになってます。
一番、簡単な使い方は画面右上のnewボタンをおして、Notebooksの種類(Python 2とかPython 3とか)を選択すれば、新しいJupyter notebookファイルが立ち上がります。
灰色の四角で囲まれた領域がcell をいい、ここに命令文を書き込んで、上の三角ボタンでrunさせると、その出力がcellの下側に出力されます。
基本的な使い方は以上です。公式ドキュメントは充実してますし、Jupyter notebookを解説した記事や書籍はけっこうあります。
なので、ここではD3js での可視化も含めて「え?!こんなこともできたんだ!」的な話に注力します。
便利な使い方
共有系
github で見られる!
githubがviewerとして対応しているので、こんな風にのせられます。今回のサンプルコードをのせました。
が、後述のD3jsの図が重すぎて、満足に表示できないかもしれないので、そのさいはgit clone してみてください。
htmlのレポートが作れる!
分析結果をgithubにはのせたくない&Jupyter notebookの環境がない人への共有には、htmlファイルに保存して共有するのが便利です。GUI操作で分析結果をhtmlに保存できます。
描画系
ネットの画像が差し込める
markdown がつかえるので当たり前なのですが、ただのコメント文だと表現しきれない思いが分析中に湧き出たときに便利です。
プログラムを書くために使用するものなので、基本的にはコードを入力するはずですが、右上のプルダウンでmarkdownとかプレーンテキストとかにcellを変更できます。
Texが書ける!
百聞は一見にしかず。cellをmarkdownモードにして、 $ x_2 $ と入力して、実行してみてください。
D3jsが出力できる!
今回のメインです。
matplotlib をinlineオプションにつけて、実行するとJupyter notebook上で作図できることはよく知られています。
import seaborn
とおまじないをかくと色やフォントがカッコよくなることも、だいぶ知られています。
ただ、PythonからD3Jsのコードを生成させて動的描画が簡単にできることは、まだまだマイナー知識かと思います。
それにはPlotlyというライブラリを使用します。以下、公式ページと上記のgithubのURLをご参照ください。
これは静止画なので、あまり面白くありません。
ぜひ、githubのサンプルをふれてみてください。
その他
豊富なショートカットコマンド!
HelpタブのKeyborad shortcut を参照すれば、開発がさらに便利になるショートカットコマンドが大量に用意されています。
自分が多用するのは、Shift+Enter の「選択しているcellをrunするコマンド」と、Esc+ddの「選択しているcellの削除」 でしょうか。viかよ!ってくらいEscキーを利用するwebアプリケーションです。
他にもipythonの仕様でOSコマンドが叩けたりとか、関数名に?をつけて実行するとヘルプが表示されたりとか、そもそもPython以外の言語(公式ページによると40以上!)に対応してたりと、Jupyter notebookはかなり多芸なwebアプリケーションです。
リクルートテクノロジーズではリクルートグループ内の多種多様なデータから、ビジネスにいかせる知見を発見できる仲間を募集中です!