本当はdashでドロップダウンリストとかを作ってOLAP的なことをしたかったのですが、いろいろやってみて挫折した感じになります、、、。
やり終わった後「誰かに止めてほしかったなぁ」と思ったので記事として公開しておきます。
検討していた要件
- Notebookにdashアプリを追加し、ダッシュボードのようにパラメターを変えながら10個ぐらいのグラフの変化を見たい
- 上記のグラフのセットが複数存在する(同時に眺める必要はない)
- Jupyter labはリモートアクセスしたい、セキュリティ要件は以下
- https
- sudoできない専用ユーザー
- 共通パスワードもしくはPAM
なぜ相性が悪いか
できないことはないが本質的な作業以外で細かい設定が湧いてきて効率が悪い というイメージです。
- 開発のUXとして効率が悪い
- jupyter labでdashのアプリ開発を行ううえで、ソースとinline化したアプリのウィンドウのレイアウト作業が毎回発生
- dashのコードは結構長い事が多く、Notebookで気持ちよく編集できない
- Webアプリのような開発スタイルでVSCodeでソースを編集しながら別ウィンドウでdashをテストするのが素直
- jupyter lab に dashを組み込むには修正が必要で、サンプルをコピペしてきた時に毎回書き直しが発生する
-
from jupyter_dash import JupyterDash
の追加 -
app = JupyterDash(__name__)
への変更 -
app.run_server(mode='inline')
への変更
-
- 複数のセルに複数のdashアプリを配置しようとするのが面倒
- 複数のdashアプリには複数ポートが必要なため app.run_server()で
port=XXXX
の指定が個別に必要
- 複数のdashアプリには複数ポートが必要なため app.run_server()で
- jupyter labのextensionのインストール・設定の情報にたどり着くまでが遠い
- V3系でやり方変わっていたりとかで変な記事見るとハマります
- リモートアクセスする時の設定変更
- app.run_server()で
host='0.0.0.0'
指定
- app.run_server()で
- リモートアクセスをSSL化した時のdash側のSSL対応(flaskのSSL接続化)←未解決
代替策は?
- パラメターの変更をUIで行うことを諦め、普通に変数定義にしてデータの変化を画面上で確認する
- ダッシュボードっぽく見るためにdashのレイアウト機能(html.Div([dcc.Graph...)などは使わず、make_subplotを使用する
感想
職業柄、自分で分析した後にデータ分析にあまり詳しくないメンバーにデータを見せることが多いので最初からdashでやってしまえと思ったのですが、dashはdashと割り切ったほうが余計な環境構築とかでエネルギー使わなくて良さそうです、、。ここらへんRだとRstudioでshiny開発まですんなりできるのですが、Pythonはそれぞれの開発元が独立しているのであまり連携させず使っていくのが良いのかもしれませんね。