Python向けビジュアライズフレームワークを探す（RのShinyっぽいやつ）

インタラクティブなデータ分析環境が作れるPythonフレームワークをまとめます。

# データ分析に適したフレームワークについて
近年ブームの機械学習と領域はかぶりつつも若干異なる「データ分析業務」で使いやすいフレームワークを探します。
主にデータの理解や可視化・簡易的な集計を行うダッシュボード作業に使えそうなもの、とイメージしていただければ。

R言語界隈でいうところのShinyみたいな感じです。

## ちなみにShiny(R言語フレームワーク)はこんなの
R言語界隈ではダッシュボード作りやパラメータを色々変えながらの可視化するといった用途に使えるShinyというフレームワークがあります。
これがなかなかに便利なので、近年機械学習ライブラリの充実し、ユーザも多いPythonでもこのようなことがしたい！というのが今回調査している理由です。
下の図にあるようなもので、スライドバーやパラメータをグリグリ触るとそれに反応してリアルタイムに可視化や再集計がされる、というようなものが簡単に作れるフレームワークです。

参考

- [Shiny Gallery(公式)](https://shiny.rstudio.com/gallery/)
- [RStudio Shiny チュートリアル レッスン1 ようこそ Shiny へ](https://qiita.com/hoxo_m/items/c8365117f3444fb51df4)
- [Shinyでリアクティブなグラフ(自分の記事宣伝)](https://qiita.com/stkdev/items/376f9c9b167955766b8e)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83530/38a79dc5-f718-8476-571d-0b5321f89e9d.png)

# Pythonフレームワークをリストアップ
Shinyに類似するフレームワークとして以下を見つけました。

- Bokeh
    - [公式ページ](https://bokeh.pydata.org/en/latest/)
    - [Gallery](http://bokeh.pydata.org/en/latest/docs/gallery.html)
- Dash
    - [公式ページ](https://plot.ly/products/dash/)
    - [Dash Gallery](https://dash.plot.ly/gallery)
    - 紹介記事：[Introduction Dash](https://medium.com/@plotlygraphs/introducing-dash-5ecf7191b503)
- spyre
    - [GitHub](https://github.com/adamhajari/spyre)

特に上２つのBokehとDashの２強といったイメージでした。
また、下記[参考サイト](https://blog.sicara.com/bokeh-dash-best-dashboard-framework-python-shiny-alternative-c5b576375f7f)で綺麗にまとまっているので一部抜粋させて頂き、比較して見ます。

||Bokeh|Dash|
|:--:|:--:|:--:|
|メンテナンス者|Anaconda|Plotly|
|ライセンス|BSD 3-Clause|MIT|
|内部で利用|D3, Tornado|React, Plotly, Flask|
|JupyterNotebookサポート|あり|なし|
参考

- [Bokeh vs Dash — Which is the Best Dashboard Framework for Python?](https://blog.sicara.com/bokeh-dash-best-dashboard-framework-python-shiny-alternative-c5b576375f7f)
- [Quora - Is there something similar to R Shiny for Python users in the scientific community?](https://www.quora.com/Is-there-something-similar-to-R-Shiny-for-Python-users-in-the-scientific-community)　(ログインしないと見れないかも)

# Dashを動かしてみる
[公式ドキュメント](https://dash.plot.ly/)に沿って動かします
## インストール

pipで簡単インストール

```
pip install dash
pip install dash-daq
```

## 動かす
[チュートリアルのサンプルコード](https://dash.plot.ly/getting-started)を引用します。
以下のコードをapp.pyという名前で保存し、実行するだけです。

```python:app.py
# -*- coding: utf-8 -*-
import dash
import dash_core_components as dcc
import dash_html_components as html

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

app = dash.Dash(__name__, external_stylesheets=external_stylesheets)

app.layout = html.Div(children=[
    html.H1(children='Hello Dash'),

    html.Div(children='''
        Dash: A web application framework for Python.
    '''),

    dcc.Graph(
        id='example-graph',
        figure={
            'data': [
                {'x': [1, 2, 3], 'y': [4, 1, 2], 'type': 'bar', 'name': 'SF'},
                {'x': [1, 2, 3], 'y': [2, 4, 5], 'type': 'bar', 'name': u'Montréal'},
            ],
            'layout': {
                'title': 'Dash Data Visualization'
            }
        }
    )
])

if __name__ == '__main__':
    app.run_server(debug=True)
```

こちらを実行すると、閲覧できるURLが出てくるのでアクセスするとOKです。
デフォルトでは`http://127.0.0.1:8050`です。

# bokehを動かしてみる
## インストール
こちらもpipで簡単インストール。楽でいいですね。

```
pip install bokeh
```

## 動かす

もっともシンプルなサンプルとして、グラフを描画してhtmlファイルとして出力して見ます。
こちらも[Installation](http://bokeh.pydata.org/en/latest/docs/installation.html#verifying-installation)の手順から引用。

```
from bokeh.plotting import figure, output_file, show
output_file("test.html")
p = figure()
p.line([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], line_width=2)
show(p)
```

実行するとグラフが描画されたtest.htmlが出力されます。


ひとまず両フレームワークのインストールと動作確認まで実施しました。
Shinyに似ているかという点ですとDashの方が良さそうです。
次回はShinyと比較しつつDashのチュートリアルをやって見ようかなと思います。