Streamlit でウィジェットの値を元にデータを描画するアプリケーションを作って公開する

pythonsnowflake

Streamlit は Python でデータアプリケーションを開発するためのツール。

$ pip install streamlit
$ streamlit --version
Streamlit, version 1.41.1

button や slider、radio といった widgets で入力した値をもとに Dataframe を作って write() や line_chart() で描画できる。widgets の値を変更するたびに更新が走るので、必要に応じて session_state に値を保持したり重い処理の結果をキャッシュしたりする。

import streamlit as st
import pandas as pd

st.write('''
## Hello!
[sambaiz.net](https://www.sambaiz.net/)
''')

first_column, second_column, third_column = st.columns(3, gap='large')

if 'mutiplier' not in st.session_state:
    st.session_state['mutiplier'] = 1

with first_column:
    if st.button('Multiply!'):
        st.session_state['mutiplier'] *= 2
    st.success(f'Multiplier updated to {st.session_state["mutiplier"]}')

with second_column:
    value = second_column.slider('Set value', 0, 100 * st.session_state['mutiplier'])
    st.metric('slider value', value)

with third_column:
    chosen = st.radio('Chose value', ('X', 'Y', 'Z'))
    st.metric('chosen value', chosen)

df = pd.DataFrame({
    'first column': list(filter(lambda x: x != chosen, ['W', 'X', 'Y', 'Z'])),
    'second column': [1 / max(value, 1e-9), value, 10 * value]
})

st.write(df)
st.line_chart(df.set_index('first column'))

streamlit run app.py のようにして実行する。

EC2 など任意の環境にデプロイできるが、個人的なアプリケーションであれば無料で Community Cloud公開できる。GitHub に push してファイル名を指定するだけなので簡単だ。

また、Snowflake にも組み込まれておりスクリプトを上げることで動かすことができる。

import streamlit as st
from snowflake.snowpark.context import get_active_session

session = get_active_session()

df = session.sql("""SELECT 1 AS one""").collect()
st.write(df)