Exemple - Application Streamlit multi-pages

Attention

Cette fonctionnalité est disponible pour les comptes des régions commerciales AWS et Microsoft Azure. AWS PrivateLink et Azure Private Link ne sont pas pris en charge.

Cette rubrique présente un exemple d”application Streamlit multi-pages. Les exemples suivants montrent une application Streamlit multi-pages qui contient les fichiers suivants :

  • L’application Streamlit principale (streamlit_main.py) : Il s’agit de l’application Streamlit que vous fournissez comme valeur à la propriété MAIN_FILE de la commande CREATE STREAMLIT. Ce fichier est également affiché par défaut lorsque vous visualisez l’application Streamlit dans Snowsight.

  • data_frame_demo.py : affiche un cadre de données pour l’application.

  • plot_demo.py : affiche un graphique des données de l’application.

Note

Pour déployer une application Streamlit multi-pages dans Snowflake, vous devez créer l’application en utilisant les commandes SQL. Consultez Création d’une application Streamlit en utilisant SQL pour plus d’informations.

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