インタラクティブなデータ分析環境が作れるPythonフレームワークをまとめます。
データ分析に適したフレームワークについて
近年ブームの機械学習と領域はかぶりつつも若干異なる「データ分析業務」で使いやすいフレームワークを探します。
主にデータの理解や可視化・簡易的な集計を行うダッシュボード作業に使えそうなもの、とイメージしていただければ。
R言語界隈でいうところのShinyみたいな感じです。
ちなみにShiny(R言語フレームワーク)はこんなの
R言語界隈ではダッシュボード作りやパラメータを色々変えながらの可視化するといった用途に使えるShinyというフレームワークがあります。
これがなかなかに便利なので、近年機械学習ライブラリの充実し、ユーザも多いPythonでもこのようなことがしたい!というのが今回調査している理由です。
下の図にあるようなもので、スライドバーやパラメータをグリグリ触るとそれに反応してリアルタイムに可視化や再集計がされる、というようなものが簡単に作れるフレームワークです。
参考
Pythonフレームワークをリストアップ
Shinyに類似するフレームワークとして以下を見つけました。
- Bokeh
- Dash
- spyre
特に上2つのBokehとDashの2強といったイメージでした。
また、下記参考サイトで綺麗にまとまっているので一部抜粋させて頂き、比較して見ます。
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?
- Quora - Is there something similar to R Shiny for Python users in the scientific community? (ログインしないと見れないかも)
Dashを動かしてみる
公式ドキュメントに沿って動かします
インストール
pipで簡単インストール
pip install dash
pip install dash-daq
動かす
チュートリアルのサンプルコードを引用します。
以下のコードを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の手順から引用。
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のチュートリアルをやって見ようかなと思います。