HoloViewsとは
HoloViews は砕けた表現をすると、matplotlibやBokehなどの可視化ツールを使いやすくしたラッパです。
どのバックエンド(matplotlib, Bokehなど)を用いても統一されたコードかつ簡素な記述で可視化を実装することができます。
可視化にかかる学習コストは結構ばかにならないので、HoloViewsを使うことで**「可視化のコードを書くことに時間を浪費するのではなく、本来のデータ分析などの業務に集中しましょう」**といった感じのコンセプトのようです。
特にmatplotlibのシンタックスは難解なものが多いので、「もう少しシンプルにならないの?」と思っている方は多いのではないでしょうか。
バックエンド
下記の可視化ツールがバックエンドとして使えます。
- matplotlib
- Bokeh
- Plotly(experimental)
インストール
condaでインストールする場合
conda install -c ioam holoviews bokeh
後述するバックエンドにmatplotlibやplotlyを用いる場合には追加でインストールします。
conda install matplotlib plotly
pipでインストールする場合
[2017/07/30 追記]
いくつかの オプション があるようですが、 'recommended' でインストールしてみます。
pip install numpy param
pip install 'holoviews[recommended]'
バックエンドに用いるパッケージをインストールします。使わないものはインストール対象から外しても問題ありません。
pip install matplotlib bokeh plotly
最新版をインストールする場合
gitとはなんぞや?という方は上記のcondaかpipでインストールしたほうがよいです。
git clone git://github.com/ioam/holoviews.git
cd holoviews
pip install -e .
Jupyter Notebookの起動オプション
notebookのバージョンが5.0では下記の起動オプションを設定します。
jupyter notebook --NotebookApp.iopub_data_rate_limit=100000000
これ以降のバージョンでは jupyter notebook
だけで問題ないようです。
バックエンドの設定
notebook_extension
クラスの引数にバックエンドを指定します。
import holoviews as hv
hv.extension('matplotlib')
Jupyter Notebook上で実行する場合にはセルマジックで設定できます。
%%output backend='matplotlib'
グラフを出力してみる
以降はすべてJupyter Notebook上の実行例です。
matplotlib
import holoviews as hv
hv.extension('matplotlib')
curve = hv.Curve(([1, 2, 3], [1, 2, 4]))
curve
Bokeh
hv.extension('bokeh')
curve = hv.Curve(([1, 2, 3], [1, 2, 4]))
curve
Plotly
hv.extension('plotly')
curve = hv.Curve(([1, 2, 3], [1, 2, 4]))
curve
どのバックエンドを使っても同じコードで書くことができました。
compose
matplotlibで複数の図を並べるのは結構大変だったという方が多いのではないでしょうか?
HoloViewsでは演算子を使うだけでグラフを並べたり重ねたりができます。
+ 演算子で並べる
hv.extension('bokeh')
curve = hv.Curve(([1, 2, 3], [1, 2, 4]))
bars = hv.Bars((['a', 'b', 'c'], [3, 2, 1]))
curve + bars
* 演算子で重ねる
%%opts Scatter(color='green', size=10)
scatter = hv.Scatter(([1, 2, 3], [1, 2, 4]))
curve * scatter
+ 演算子と * 演算子を組み合わせる
curve * scatter + bars
HoloViewsの機能
HoloViewsはさまざまな機能を有しています。機会があれば順次紹介していきたいと思います。
- ライブデータの描画
- テーブルデータの処理・描画
- 多次元データの処理・描画
- 描画データの抽出
- イベントハンドリング
- 対話型・探索型な可視化
- Datashaderを用いた大規模データ