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

# HoloViewsとは
[HoloViews](http://holoviews.org) は砕けた表現をすると、matplotlibやBokehなどの可視化ツールを使いやすくしたラッパです。
どのバックエンド(matplotlib, Bokehなど)を用いても統一されたコードかつ簡素な記述で可視化を実装することができます。

可視化にかかる学習コストは結構ばかにならないので、HoloViewsを使うことで**「可視化のコードを書くことに時間を浪費するのではなく、本来のデータ分析などの業務に集中しましょう」**といった感じのコンセプトのようです。
特にmatplotlibのシンタックスは難解なものが多いので、「もう少しシンプルにならないの？」と思っている方は多いのではないでしょうか。

# バックエンド
下記の可視化ツールがバックエンドとして使えます。

* matplotlib
* Bokeh
* Plotly(experimental)

# インストール
## condaでインストールする場合

```bash
conda install -c ioam holoviews bokeh
```

後述するバックエンドにmatplotlibやplotlyを用いる場合には追加でインストールします。

```bash
conda install matplotlib plotly
```

## pipでインストールする場合
[2017/07/30 追記]
いくつかの [オプション](http://holoviews.org/user_guide/Installing_and_Configuring.html) があるようですが、 'recommended' でインストールしてみます。

```bash
pip install numpy param
pip install 'holoviews[recommended]'
```

バックエンドに用いるパッケージをインストールします。使わないものはインストール対象から外しても問題ありません。

```bash
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では下記の起動オプションを設定します。

```bash
jupyter notebook --NotebookApp.iopub_data_rate_limit=100000000
```
これ以降のバージョンでは `jupyter notebook` だけで問題ないようです。

# バックエンドの設定
`notebook_extension` クラスの引数にバックエンドを指定します。

```python
import holoviews as hv

hv.extension('matplotlib')
```

Jupyter Notebook上で実行する場合にはセルマジックで設定できます。

```python
%%output backend='matplotlib'
```

# グラフを出力してみる
以降はすべてJupyter Notebook上の実行例です。
## matplotlib

```python
import holoviews as hv

hv.extension('matplotlib')
curve = hv.Curve(([1, 2, 3], [1, 2, 4]))
curve
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/22023/e672d40f-d28f-6dd0-db2c-605b8d16544f.png)

## Bokeh

```python
hv.extension('bokeh')
curve = hv.Curve(([1, 2, 3], [1, 2, 4]))
curve
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/22023/31c71523-da13-4c54-a795-8edd00967756.png)

## Plotly

```python
hv.extension('plotly')
curve = hv.Curve(([1, 2, 3], [1, 2, 4]))
curve
```

![kako-N8G5ENNJ89pITG0B.png](https://qiita-image-store.s3.amazonaws.com/0/22023/d3ae8a7e-bebf-42fb-2ccb-8aaa99cef6ba.png)

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

# compose

matplotlibで複数の図を並べるのは結構大変だったという方が多いのではないでしょうか？
HoloViewsでは演算子を使うだけでグラフを並べたり重ねたりができます。

## + 演算子で並べる

```python
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](https://qiita-image-store.s3.amazonaws.com/0/22023/891b05c2-df8b-6c2f-ee9e-edb0a4445923.png)

## * 演算子で重ねる

```python
%%opts Scatter(color='green', size=10)
scatter = hv.Scatter(([1, 2, 3], [1, 2, 4]))
curve * scatter
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/22023/e4e74334-4559-f254-8b01-e95297a6425c.png)

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

```python
curve * scatter + bars
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/22023/1290174b-6370-99e0-478a-0ab387bce899.png)

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

* ライブデータの描画
* テーブルデータの処理・描画
* 多次元データの処理・描画
* 描画データの抽出
* イベントハンドリング
* 対話型・探索型な可視化
* Datashaderを用いた大規模データ

-> [続き: HoloViewsの基本的なグラフをワンライナーで](http://qiita.com/driller/items/c21200460548235fa1db)