DPCデータの分析とかやるブログ

DPCデータの分析なんかをテキトーにやってます。

Pythonでのデータ可視化について色々

Pythonでグラフを描こうと思ったら

まあ、普通はmatplotlibですね。
matplotlibは事実上のデファクトであり、これで困ることはまずありません。以上、今回はこれで終わり・・・
というわけには行きませんね。他にも幾つかの選択肢がありますので、見ていきましょう。

seaborn

seabornはmatplotlibをベースに構築されたグラフライブラリです。
matplotlibのスタイルはいかにも「研究論文に載せてください!」というものですが、seabornはもうちょっと洗練された見た目になります。
「あんまりスタイルをいじってる時間は無いけど、綺麗なグラフが欲しい」という時に重宝しますね。
また、matplotlibとseabornをimportしてグラフを描くと、自動的にseabornのスタイルが適用されます。単にmatplotlibのグラフを綺麗に描画したい、というときにもいいでしょう。
が、それだけに使うにはちょっと勿体ないというか、オーバーキル気味のライブラリでもあります。
heatmapの例を見れば分かるとおり、ゴリゴリの理系論文で使いそうなライブラリで、出自や想定される用途はmatplotlibに近いんだろうなあ・・・

Pandas

なんとPandasにもグラフ描画機能があります!
ドキュメントを読めば分かるとおり、DataFrameのメソッドにplotがあるのです。やった!これで可視化の方法は決まりだ!
・・・と、なるかどうかはともかく、さっとグラフを描くにはとても便利です。
ちなみに実体はmatplotlibですので、勘違いしないように。

Bokeh

Bokehは期待の新星で、上の3つ(matplotlib/seaborn/pandas)とは全くの別系統です。
というよりは、上の3つか同一系統というのが正しいですが・・・ BokehはJavascriptベースの可視化ライブラリで、結果はHTMLファイルか、scriptタグで返ります。
Webアプリケーションに組み込むには非常に便利で、かつ書く分にはPythonで完結し、一行もJavaScriptを書かなくていいというお手軽さ。
Pandasとの相性もいいです。
問題点は、まだ荒削りなこと。バージョン0.9x系までは外れ値を含むデータを描画するとヒストグラムが壊れたりしました。
現行バージョンでも、データ量が多くなるとフリーズしたり、描画が変になったりすることがあります。

まとめ

matplotlib系統が返すのはグラフオブジェクトで、それをpngなりX11ウインドウなりで描画することになります。
ウェブアプリケーションなどに組み込むのであれば、Bokehの方が扱いやすいかも知れません。
一方、得体の知れないデータがあって、どんなメチャクチャな描画になってもいいから、とにかく一度グラフにして状況を見てみたい!というときは、seabornを使うのが無難でしょう。
Pythonを使ってデータ分析をする場合、そういうトライアンドエラーを繰り返すのが多いですので、普段使いにはseabornがオススメです。
Pandasから直接接続できるBIツールみたいのがあればいいんですけどね・・・