Bokehで動的なグラフを描画する
そもそもBokehって?
大分前に一度紹介しましたが、PythonのグラフライブラリにBokehというものがあります。
Pythonのデータ可視化というと、matplotlibが圧倒的なデファクトになってます。
そのラッパーであるseabornも有名で、最近のPython本を見るとseabornを使う例も多いですね。
今回紹介するBokehはかなり違った出自で、HTMLを吐き出すのが特徴です。ライブラリはPython側とJavaScript側に分かれており、実際の描画はJavaScript側が行います。
また、グラフの描画レベルが2つに分かれているのも特徴です。
ローレベルのbokeh.plotting
- 折れ線グラフ、単純な散布図、棒や円などを描画できる
- D3.jsほどローレベルではないが、割りと近い感じ
- 当然自由度は高いが、これでグラフを組み上げるのは大変そう…
ハイレベルのbokeh.charts
- 既に用意された形式で、棒グラフやヒストグラム、散布図など一通り描画できる
- ユーザーサイドから見ると、seabornと似たような感覚で使える
Bokehのいいところ
グラフは動的にいじれるし、見栄えも良い。HTMLとJavaScriptなので、Webアプリにも簡単に組み込める。
Bokehの悪いところ
ライブラリの性質上、データはPython側で用意し、描画のコードを書くのだが、実際にはJavaScriptにコンバートされることになる。
Python側のデータとJavaScript側のデータは必ずしも同一ではない(!)のに注意しないといけない。
400列の巨大データから、2行だけ使ってグラフを描画するケースなどもあるので、DataFrameを全てJavaScript側に流し込むわけにはいかない、という話だけど…
こんな感じでしょうか。
後は下にJupiter Notebookを貼っておきますので、マウスでいじってみて下さい。
(前回みたいにGistも用意したんですが、JavaScriptのロードでコケました…nbviewerだと動くのは、何でなんでしょうね?)