Dash_Hands_On 06
自己紹介
小川英幸 hideyan.icon
はんなりPython オーガナイザの1人
元金融(トレード・分析・雑用)
現在 いっぱいいっぱいだけど、儲け話は飛びつきます!
今年やりたいこと / 自社サービス
PyConJP2019、PyCon China In Beijing 2019スピーカ
本日やること
復習 Dashの使い方
Dashはどんなもの?
Dashのコンポーネント
Dashのレイアウト
Dashのコールバック
新機能
ついでに地味にうれしい機能 prevent_initial_callbacks=True
malo21さんによるDash実践例
Dash復習
Dashどんなもの?
Dashは可視化を動的に作成するためのウェブフレームワーク
Flask + React + Plotly / イメージ的にはPythonから簡単に使えるReactで、グラフがぬるぬる動く
特徴が分かりやすいシンプルなアプリ: ドキュメントのUpdate Graphs On Hover 上のように色々なツールと可視化を組み合わせて動かせることにより、データをより探索できるアプリが作れる
しかも簡単!!!!
なんと柏野さんも使ってる!!!
なんかDXとかいって色々高い製品が売られているが、日本企業にDashを導入することによって一気にDXが進むのではとかも思ってます。
どうやって作る?
コンポーネント
コンポーネントは7つ提供されている
例えばよくあるHello Worldなコートは次のように作成します
link:
コンポーネントは引数に値を与えて作成します
コンポーネントには引数がたくさんあり、それに値を渡すと色々なことができます
link:
グラフはPlotlyを使って作成したものをGraphコンポーネントのfigure属性に渡します
link:
このようにplotlyだけでもちょっとインタラクティブなグラフが簡単に作れます
レイアウト
レイアウトはコンポーネントを組み合わせて作成します
もうちょっと詳しめに言うと、children属性に渡します
この後のコールバックで属性名は利用するので、属性名を意識するのは重要です
link:
Divコンポーネントにコンポーネントを詰め込むとどんどんコンポーネントが積まれていきます
横に並べるにはCSSで並べます。方法は一つではありませんが、"display" : "inline-block" と "verticalAlign" : "top"を使うのが良い
コールバック
コールバックはコンポーネント同士を連携させる機能です
これにより、アプリケーションがインタラテクィブになります
Dashの最大の特徴といえます
ここではgapminderデータを使ってコールバックの事例を作成します
link:
https://gyazo.com/f02b77baf6750606c9b745d9355ddee7
Dashの新機能
Dashは開発途上な感じでどんどん機能が追加されています
これまで、コールバックはID名を特定して作成する必要がありました
そのため、コンポーネントを大量発生させてもそれを想定して、コールバックを作成しておく必要がありました
しかしパターマッチングコールバックにより、新規に作成したコンポーネントに対しても容易にコールバックを作成できるようになりました
方法
ID名を辞書型で付けます
key名は任意ですが、ドキュメントではタイプを共通項、インデックスに値を渡しています
id={'type': 'filter-dropdown', 'index': n_clicks}
dash.dependenciesモジュールにALL, MATCH, ALLSMALLERが加わりました
app.callbackデコレータで'index' に対してこれらを用います
https://gyazo.com/396b04f32deee158fafcd97414be21c8
ALL
typeの合致する全てのindexに対してコールバックを適用する
MATCH
typeが合致し、かつindexが合致するコンポーネントに対してコールバックを適用する
link:
ALLSMALLER
indexが小さなものに対してコールバックを適用する
ALLとフィルタを活用したら作れるけど、ALLSMALLERを用いるとロジックがシンプルになる
link:
JupyterからDashが使える
以前はjupyterlab-dashってのがありましたよね
notebookから使えないとかWindowsから使えないとかありまして。。
でどうなるかと思ってたら新しいのが出てきました
インストール方法
code: sh
$ python -m pip install jupyter-dash
$ jupyter lab build