7
3

Streamlitとは

StreamlitはPython向けのWebアプリケーションフレームワークです。

Streamlitを使うとフロントエンドの知識ゼロでもデータを可視化するためのWebアプリケーションを簡単に作れます。以下のような機能が特徴。

  • 変数を地の文に書くだけで、GUIに出力される(マジックコマンド)
  • st.radiost.text_inputのようなWidget APIを呼び出すだけで、GUIコンポーネントが生成される

Streamlitの最新バージョン

Streamlitの最新バージョンはChangelogで確認できます。
2024/6/22時点で最新バージョンは1.36.0です。

1.36.0では次がHighlightsおよびNotable Changesとしてアナウンスされています。

  • st.navigationによる動的なページナビゲーション
  • 横棒グラフ
  • st.expanderのラベルにアイコンを表示
  • st.columnsで並べる要素の縦方向のアラインメントを設定
  • カスタムコンポーネントがコールバック関数に対応
  • グラフの軸ラベルのカスタマイズ
  • protobuf 5.x.xに対応

小ネタが色々という感じですね。

st.navigationによる動的なページナビゲーション

マルチページアプリV2と呼ばれている機能強化の一環で実装されました。
これまではpagesディレクトリの配下にPythonファイルを置いておくとそれが自動的にサブページになるという仕組みだったのですが、st.navigationst.Pageを用いてプログラマブルにサブページを定義できるようになりました。
st.PageにはPythonファイルのパスを指定します。pagesディレクトリの配下になくてもOKでした!

navigation.py
import streamlit as st

pg = st.navigation([st.Page("page_1.py"), st.Page("page_2.py")])
pg.run()

横棒グラフ

st.bar_charthorizontal=Trueオプションを指定することで棒グラフを横棒グラフにできるようになりました。

Horizon bar chart

st.expanderのラベルにアイコンを表示

st.expandericonパラメータを指定することでラベルにアイコンが表示されるようになりました。
Googleマテリアルアイコンにも対応しています。以下の例ではicon=":material/casino:"を指定してみました。

Expander icon

st.columnsで並べる要素の縦方向のアラインメントを設定

カスタムコンポーネントがコールバック関数に対応

カスタムコンポーネントがon_changeのようなコールバック関数を実装できるようになりました。
これまでもハックすれば実装できたということですが、1.36.0から正式対応したようです。

例えばStreamlitでWebカメラなどを扱えるstreamlit-webrtcの場合、コンポーネント内部のステートが変化したときにon_changeを呼び出してくれます。
以下のサンプルではステートが変化したときにログを残すだけですが、アイディア次第で色々なことができそうです。

custom_component_on_change.py
import streamlit as st
from streamlit_webrtc import webrtc_streamer

def on_change():
    # ソースコード省略。ctx.stateを文字列に変換している
    st.session_state.log += f"[{dt}] {state}"

st.title("WebRTC demo")
st.session_state.ctx = webrtc_streamer(key="sample", on_change=on_change)

log = ""
if "log" in st.session_state:
    log = st.session_state.log
st.text_area("Log", log, height=200)

今後は自分のアプリと高機能なカスタムコンポーネントをより密に連動させることができそうです!

グラフの軸ラベルのカスタマイズ

グラフに軸ラベルが設定できるようになりました。
対象のグラフはst.area_chartst.bar_chartst.line_chartおよびst.scatter_chartの4つです。いずれもStreamlitに組み込まれているグラフ描画関数です。
x_label="X軸のラベル", y_label="Y軸のラベル"のようにオプションを指定します。

Axis label

protobuf 5.x.xに対応

protobuf(Protocol Buffers)は通信でやりとりするデータをシリアライゼーションする技術です。
Streamlitはブラウザ上で動作しているフロントエンドとサーバ上で動作しているバックエンドの間の通信をWebSocketとprotobufで行っているようです。

protobufは完全に枯れた技術ではないため、ライブラリのアップデートがしばしばあります。2024年6月23日時点ではPythonライブラリの最新版が5.27.1でした。

一方、Streamlitが依存しているバージョンを確認すると、1.35.0までは3.20以上かつ5未満でしたが、1.36.0では3.20以上かつ6未満になっていました。これでよりも依存関係を解決しやすくなっていますね。

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3