[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
のラッパーなのでおそらく大丈夫
-
Altair
Graphviz
-
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