Streamlit Version1.13.0で何が変わったか見てみよう

Streamlit

はじめに

Blog投稿の時間が空いてしまいましたが、
2022-9-22にVersion1.13.0がリリースされました。
前回のVersion1.12.0から1ヶ月半弱なので早いペースですね。
早速変更点を見てみましょう。

何が変わったの?

Version1.13.0での追加・変更点です。今回はハイライトはなく、注目すべき変更点と、その他の変更点です。(変更点は、ハイライト ⇒ 注目すべき変更点 ⇒ その他の変更点とランク付けされています)

注目すべき変更点

  • ウィジットは、label_visibilityパラメータを使用してラベルを非表示にするようにカスタマイズできるようになりました。
  • st.mapデフォルトで地図にズームボタンを追加できるようになりました。
  • st.dataframeで表を画面幅いっぱいに表示させるパラメータuse_container_widthが追加されました。
  • st.dataframeでサイズ幅が列の内容に基づいて自動的に計算されるようになりました。また、列ヘッダの境目をダブルクリックすることによりサイズが自動的に調整されるようになりました。Excelの自動セル調整と同じイメージです。

その他の変更

  • st.time_inputで値のキーボード入力が可能となりました。これは、一部の値を入力しようとした時にうまくいかないバグだったようです。
  • st.experimental_memo(関数の実行をメモする関数デコレータ)のttlとpersistキーワード引数を一緒に使用すると警告が出るようになりました。(永続的なメモキャッシュはTTLをサポートしていません)
  • st_number_input再実行後に一貫した型を返す。(intの設定をしていてもfloatを返していたようです)
  • st.sidebar Firefoxのスクロールバーの修正を含むUIの修正を行いました。(サイドバーの表示の問題のようですが、私はFirefoxを使っていないので詳しくは分かりません。すいません。)
  • API開発をガイドする使用状況指標を改善します。
  • 複数の型ヒントを追加しました。

注目すべき変更点

ウィジットのラベルをlabel_visibilityパラメータで非表示にする

ウィジット(テキストボックスやラジオボタンなど)のラベルの表示を制御します。”hidden”の場合はラベルは表示されませんが、空のスペースが確保されます。”collapsed”の場合は、ラベルは表示されずスペースも確保されません。初期値は”visible”(表示)です。
このバージョンからlabel=””の指定は非推奨となりました。以下のようなワーニングメッセージが出力されます。
今までlabel=””の指定で対応するパターンが多かったと思うのですが、いずれはエラーとなる可能性がありますので早めに修正しましょう。

プログラムコード
import streamlit as st

st.title("label_visibility")
col1, col2, col3 = st.columns(3)
with col1:
    st.write("ラベル表示")
    st.write("")
    st.text_input("visible", "visible")
with col2:
    st.write("ラベル部分は前詰めなし")
    st.write("")
    st.text_input("xxx","hidden", label_visibility="hidden")
with col3:
    st.write("ラベル部分は前詰め")
    st.write("")
    st.text_input("yyy", "collapsed", label_visibility="collapsed")
実行画面

label=””の指定は以下のような警告メッセージが出ます。将来的にはエラーとなる可能性があるので早めにlabel_visibilityを指定するようにしましょう。
(警告メッセージに警告箇所が示されないため、箇所の特定がしずらく、メッセージに表示してほしいと改善要望が出ているようです)

対象は以下です。
st.radio
st.selectbox
st.multiselect
st.select
st.slider
st.select_slider
st.text_input
st.number_input
st.text_area
st.date_input
st.time_input
st.file_uploader
st.camera_input
st.color_picker

警告メッセージ

label got an empty value. This is discouraged for accessibility reasons and may be disallowed
in the future by raising an exception. Please provide a non-empty label and hide it with label_visibility if needed.

st.mapにデフォルトで地図にズームボタンが追加になった

st.mapで地図を描画した時、デフォルトでズームボタンが追加されました。
Streamlitで地図に都道府県庁所在地を表示してみようのページを見ていただくと差が分かると思います。
サンプルは以前のサイトと同じCSVファイルを使用しています。

コード
import streamit as st

st.title('都道府県庁所在地')
df = pd.read_csv('pref.csv')
st.map(df, use_container_width=True)
画面サンプル

st.dataframeにuse_container_widthパラメータが追加された

st.dataframeでuse_container_widthパラメータを指定することで、画面幅いっぱいに表を表示できるようになりました。
画面の右上のsettings → APPEARANCE → Wide modeにチェックをつけた場合は、表が強制的に100%の幅になりますが、use_container_widthの場合は必要に応じて広がるイメージです。
実用的な表示だと思います。

コード
import streamlit as st
import pandas as pd

f = pd.DataFrame(
    { 
        'date': ['2022-08-01', '2022-08-02', '2022-08-03', '2022-08-04', '2022-08-05', '2022-08-06', '2022-08-07'],
        'precipitation': [0.0, 10.9, 0.8, 20.3, 1.3, 2.5, 0.0],
        'temp_max': [12.8, 10.6, 11.7, 12.2, 8.9, 4.4, 7.2],
        'temp_min': [5.0, 2.8, 7.2, 5.6, 2.8 ,2.2, 2.8],
        'wind': [4.7, 4.5,2.3, 4.7, 6.1, 2.2, 2.3],
        'weather': ['drizzlerain', 'rain', 'rain', 'rain', 'rain', 'rain', 'rain']
    }
)

st.subheader("パラメータ指定なし")
st.dataframe(f)

st.subheader("use_container_widthを指定")
st.dataframe(f, use_container_width=True)
画面サンプル

st.dataframeで列幅がデータに合わせて自動的に調整されるようになった

st.dataframeで列幅がデータに合わせて自動的に調整されるようになりました。列幅が狭くてデータが隠れてしまうようなことがなくなりました。うまくいかない場合もあるようです。
また、列ヘッダの境目をダブルクリックすることによりサイズが自動的に調整されるようになりました。Excelの自動セル調整と同じイメージです。
ダブルクリックをしてセルが広がった場合、表全体の幅に余裕があった場合でも幅の再調整はされなくて、横スクロールが発生していしまいます。
地味な改定ですが使いやすくなったと思います。

列幅自動調整 (コードは1.12.0と変わりません。挙動のみ変わります。)
import pandas as pd
f = pd.DataFrame(
    { 
        'date': ['2022-08-01', '2022-08-02', '2022-08-03', '2022-08-04', '2022-08-05', '2022-08-06', '2022-08-07'],
        'precipitation': [0.0, 10.9, 0.8, 20.3, 1.3, 2.5, 0.0],
        'weather': ['drizzlerain', 'rain', 'rain', 'rain', 'rain', 'rain', 'uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuX'],
        'temp_max': [12.8, 10.6, 11.7, 12.2, 8.9, 4.4, 7.2],
        'temp_min': [5.0, 2.8, 7.2, 5.6, 2.8 ,2.2, 2.8],
        'wind': [4.7, 4.5,2.3, 4.7, 6.1, 2.2, 2.3]
    }
)
st.subheader("パラメータ指定なし")
st.dataframe(f)

weatherとtemp_maxの境目をダブルクリックすることで、横スクロールは発生しますがセルが広がります。

実行画面

その他の変更点

st.time_inputについては、値を直接入力できるようになりました。
15分単位の場合は、1.12.0の時でも入力は可能でしたが、これは入力が可能というより、実際はリストから選択されていたことになります。1.13.0では1分単位で入力することが出来るようになりました。
時間を変更しようとすると、かならず00:00から始まるなど改善してほしい所はあるのですが、今回は少し良くなったのではないでしょうか。

その他は省略します。

実行画面 (直接時間を入力することが出来ます)

おわりに

地味な変更が多いですが、精力的に変更が行われて使い勝手が良くなってきているのではないでしょうか。初期のバージョンでは不便に思っていたことがリリースアップごとに改善され、ずいぶん使いやすくなったと思います。
開発チームに感謝です。
個人的にはtime_inputが更に使いやすくなることを望みます。

参考にさせていただいたもの

Streamlit Official Anouncements release-notes Version1.13.0

コメント