例 - 複数ページのStreamlitアプリ

注意

この機能は AWS およびMicrosoft Azure商用リージョン のアカウントで利用できます。 AWS PrivateLinkAzure Private Link はサポートされていません。

このトピックでは、 複数ページのStreamlitアプリ の例を示します。次の例は、以下のファイルを含む複数ページのStreamlitアプリです。

  • メインのStreamlitアプリ(streamlit_main.py): これは、 CREATE STREAMLIT コマンドの MAIN_FILE プロパティの値として指定するStreamlitアプリです。このファイルは Snowsight でStreamlitアプリを表示したときにもデフォルトで表示されます。

  • data_frame_demo.py: アプリケーションのデータフレームを表示します。

  • plot_demo.py: アプリケーションのデータのプロットを表示します。

注釈

Snowflakeで複数ページのStreamlitアプリを展開するには、 SQL コマンドを使用してアプリケーションを作成する必要があります。詳細については、 SQL を使用したStreamlitアプリの作成 をご参照ください。

streamlit_main.py

import streamlit as st

st.title('Multi-page app demo')
st.write('This is the landing page for the app. Click in the left sidebar to open other pages in the app')
Copy

data_frame_demo.py

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

# Write directly to the app
st.title("Dataframe Demo App :balloon:")

# Get the current credentials
session = get_active_session()

# Use an interactive slider to get user input
hifives_val = st.slider(
    "Number of high-fives in Q3",
    min_value=0,
    max_value=90,
    value=60,
    help="Use this to enter the number of high-fives you gave in Q3",
)

#  Create an example dataframe
#  Note: this is just some dummy data, but you can easily connect to your Snowflake data
#  It is also possible to query data using raw SQL using session.sql() e.g. session.sql("select * from table")
created_dataframe = session.create_dataframe(
    [[50, 25, "Q1"], [20, 35, "Q2"], [hifives_val, 30, "Q3"]],
    schema=["HIGH_FIVES", "FIST_BUMPS", "QUARTER"],
)

# Execute the query and convert it into a Pandas dataframe
queried_data = created_dataframe.to_pandas()

# Create a simple bar chart
# See docs.streamlit.io for more types of charts
st.subheader("Number of high-fives")
st.bar_chart(data=queried_data, x="QUARTER", y="HIGH_FIVES")

st.subheader("Underlying data")
st.dataframe(queried_data, use_container_width=True)
Copy

plot_demo.py

import time

import numpy as np

import streamlit as st
from streamlit.hello.utils import show_code


def plotting_demo():
    progress_bar = st.sidebar.progress(0)
    status_text = st.sidebar.empty()
    last_rows = np.random.randn(1, 1)
    chart = st.line_chart(last_rows)

    for i in range(1, 101):
        new_rows = last_rows[-1, :] + np.random.randn(5, 1).cumsum(axis=0)
        status_text.text("%i%% Complete" % i)
        chart.add_rows(new_rows)
        progress_bar.progress(i)
        last_rows = new_rows
        time.sleep(0.05)

    progress_bar.empty()

    # Streamlit widgets automatically run the script from top to bottom. Because
    # this button is not connected to any other logic, it just causes a plain
    # rerun.
    st.button("Re-run")


st.set_page_config(page_title="Plotting Demo", page_icon="📈")
st.markdown("# Plotting Demo")
st.sidebar.header("Plotting Demo")
st.write(
    """This demo illustrates a combination of plotting and animation with
    Streamlit. We're generating a bunch of random numbers in a loop for around
    5 seconds. Enjoy!"""
)

plotting_demo()

show_code(plotting_demo)
Copy