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

  • 480
    Like
  • 3
    Comment

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の基本的なグラフをワンライナーで