[Python]簡単に可視化アプリケーションが作れる'Streamlit'をテスト書きした
はじめに
Pythonベースでグラフを入れたWebアプリケーションを作る場合、グラフライブラリ Plotly + Webアプリケーションフレームワーク Dash by Plotly の取り合わせを愛用してきました。
が、この度 Dash のポジションを脅かすポテンシャル大な大型新人 Streamlit と出会ったため、テスト書きしたメモを投下します。
Streamlit とは?
Streamlit is an open-source app framework for Machine Learning and Data Science teams. Create beautiful data apps in hours, not weeks. All in pure Python. All for free.
HTML・CSS・JavaScriptを書くこと無く、Pythonスクリプト単体でWebアプリケーションを作れるアプリケーションフレームワーク。
フロントエンドは React + Bootstrap な作りで、Pythonスクリプト単体でOKな点も入れてほぼ Dash と同タイプのフレームワークと言えます。
Dash と比べると、スタイル・ページレイアウトを自在に決められるフレキシブルさが Streamlit には無いです。
カスタムCSS・スタイルを入れるAPIが無く、ページレイアウトもサイドメニュー + ボディのテンプレートでガッチリ決まっています。
つまり、デザインも含めてフレームワーク側が仕様を定めているため、デザイン決めのコスト無く、データ処理・分析の主な処理のスクリプト書きに Dash 以上に注力出来ます。
また、Dash は Plotly 専用のWebアプリケーションフレームワークですが、Streamlit は下記のグラフライブラリをサポートしています。
-
Matplotlib-
SeabornもMaptplotlibのラッパーなのでおそらく大丈夫
-
AltairGraphviz-
Plotly- もちろん、
Plotly Expressも大丈夫!
- もちろん、
Bokeh
Plotly はあんまり、、な場合でもWebアプリケーションを作ることが出来ます。
テスト書きメモ
インストール
$ pip install streamlit
デモページ立ち上げ
$ streamlit hello
http://localhost:8501/ でデモページが立ち上がります。
スクリプトを書く
Plotly Express のデータをプロットするサンプルスクリプト qiita.py を書きます。かなりシンプルです。
import streamlit as st
import plotly.express as px
import plotly.io as pio
# data
data = px.data.iris()
# sidemenu
st.sidebar.markdown(
"# Qiita sample"
)
template = st.sidebar.selectbox(
"Template", list(pio.templates.keys())
)
# body
st.write(
px.scatter(data, x="sepal_width", y="sepal_length", template=template)
)
qiita.py が置いてあるディレクトリ上で
$ streamlit run qiita.py
を実行すると、http://localhost:8501/ でアプリケーションが立ち上がります。
もし Dash で書く場合、HTMLコンポーネントをゴリゴリ書いたり、、でコード量は大体2倍になるかなーと思います。
Tips
随時アップデートします。
どうしてもスタイルを修正したい場合
st.markdown でmarkdownコンポーネントを作り、unsafe_allow_html パラメータへ true を与えつつ直で <style> タグを書きます。
st.markdown(
"<style>h1{color: red}</style>",
unsafe_allow_html=True
)
Streamlit にスタイリングの口が無いゆえの黒魔術コードですが、本体のフォーラムページをチェックしてもこれぐらいしか無さそう、、
リモートリソースの streamlit run
例えばGitHubへ上がっているソースコードをサクッと実行したい場合、Streamlit はローカルクローン無しで下記の様に実行出来ます。
$ streamlit run https://raw.githubusercontent.com/prs-watch/streamlit-sample/master/sample.py
上で例示したサンプルのリポジトリはこちらです。
まとめ
デザイン決めのコストをゴリッと削れるため、コード量少なく、サクッとWebアプリケーションが作れます。提供デザインもシンプルで気に入っています。
Dash は Dash で良い点がありますし、 Streamlit 自体メジャーバージョン未リリースだったりとの点もありますが、楽にアプリケーションを作りたい場合にはかなり重宝しています。
オススメ度は高いので、例えばダッシュボードを作りたいなー、と言う場合、1回テスト書きしてみてはいかがでしょうか。
Discussion