Edited at

Pythonの可視化ツールはHoloViewsが標準になるかもしれない

More than 1 year has passed since last update.


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

image.png


Bokeh

hv.extension('bokeh')

curve = hv.Curve(([1, 2, 3], [1, 2, 4]))
curve

image.png


Plotly

hv.extension('plotly')

curve = hv.Curve(([1, 2, 3], [1, 2, 4]))
curve

kako-N8G5ENNJ89pITG0B.png

どのバックエンドを使っても同じコードで書くことができました。


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

image.png


* 演算子で重ねる

%%opts Scatter(color='green', size=10)

scatter = hv.Scatter(([1, 2, 3], [1, 2, 4]))
curve * scatter

image.png


+ 演算子と * 演算子を組み合わせる

curve * scatter + bars

image.png


HoloViewsの機能

HoloViewsはさまざまな機能を有しています。機会があれば順次紹介していきたいと思います。


  • ライブデータの描画

  • テーブルデータの処理・描画

  • 多次元データの処理・描画

  • 描画データの抽出

  • イベントハンドリング

  • 対話型・探索型な可視化

  • Datashaderを用いた大規模データ

-> 続き: HoloViewsの基本的なグラフをワンライナーで