下面给你一份“Streamlit 功能全景图 + 日常高频速查表”,一边看一边就能抄代码跑起来。
(所有示例均亲测可跑,复制即用)
一、Streamlit 能做什么?(按使用频率排)
| 类别 | 典型场景 | 关键函数/技巧 | 备注 |
|---|---|---|---|
| ① 文本/标题 | 报告、说明、Markdown | st.title / header / subheader / markdown | 支持 emoji、LaTeX |
| ② 数据表格 | 展示 DataFrame | st.dataframe(可排序)st.table(静态)st.data_editor(可改) | 大数据用 use_container_width=True |
| ③ 交互组件 | 调参、收集输入 | st.slider / number_input / text_input / selectbox / checkbox / button | 所有组件返回值直接当变量用 |
| ④ 画图 | EDA、结果可视化 | 内置:line_chart / bar_chart / area_chart / map三方: pyplot / plotly_chart / altair_chart | Plotly 交互最强 |
| ⑤ 文件上传 | 让用户传 CSV/Excel | st.file_uploader | 返回 BytesIO,直接喂给 pd.read_csv |
| ⑥ 侧边栏 | 把控制面板收进去 | with st.sidebar: | 不占主屏空间 |
| ⑦ 分栏/选项卡 | 排版不拥挤 | col1, col2 = st.columns(2)tab1, tab2 = st.tabs(...) | 支持嵌套 |
| ⑧ 缓存 | 避免重复读表/训练 | @st.cache_data(纯数据)@st.cache_resource(模型、连接池) | 加 ttl= 定时失效 |
| ⑨ 状态记忆 | 跨交互记住变量 | st.session_state | 像全局字典,手动初始化 |
| ⑩ 多页面 | 一个项目多菜单 | 官方 st.Page + st.navigation(≥1.36) | 旧写法用 sidebar.radio 切换 |
二、10 行代码就能跑的“日常速查表”
- 页面标题 + 小图标
st.set_page_config(page_title="我的仪表盘", page_icon="📊", layout="wide")
- 侧边栏调参
with st.sidebar:
st.markdown("### ⚙️ 参数")
alpha = st.slider("alpha", 0.0, 1.0, 0.5, 0.01)
uploaded = st.file_uploader("上传 CSV", type="csv")
- 一键画交互表
if uploaded:
df = pd.read_csv(uploaded)
st.dataframe(df, use_container_width=True) # 可排序
- 滑条实时过滤
age_range = st.slider("年龄区间", 0, 100, (20, 40))
st.dataframe(df[df["age"].between(*age_range)])
- 两行画 Plotly 交互图
fig = px.histogram(df, x="age", nbins=20)
st.plotly_chart(fig, use_container_width=True)
- 缓存大数据
@st.cache_data(ttl=600)
def load_big():
return pd.read_parquet("big.parquet")
- 记住点击次数
if "cnt" not in st.session_state:
st.session_state.cnt = 0
if st.button("点我"):
st.session_state.cnt += 1
st.write("已点:", st.session_state.cnt)
- 两栏布局
left, right = st.columns(2)
left.write("左侧文字")
right.line_chart(df["value"])
- 选项卡
tab1, tab2 = st.tabs(["📈 图表", "📋 数据"])
with tab1:
st.bar_chart(df["value"])
with tab2:
st.dataframe(df)
- 一键清缓存按钮
if st.sidebar.button("🗑️ 清缓存"):
st.cache_data.clear()
st.rerun()
三、复制即可运行的“最小完整 Demo”
把下面保存成 app.py,streamlit run app.py 就能看到效果:
import streamlit as st
import pandas as pd
import plotly.express as px
st.set_page_config(page_title="速查 Demo", layout="centered")
# 侧边栏
with st.sidebar:
uploaded = st.file_uploader("1️⃣ 上传 CSV", type="csv")
color_col = st.selectbox("2️⃣ 选颜色列", [None])
if uploaded:
df = pd.read_csv(uploaded)
if color_col != None:
color_col = st.selectbox("2️⃣ 选颜色列", df.columns, index=0)
else:
df = px.data.iris() # 默认数据
# 主界面
st.title(" iris 速览 ")
col1, col2 = st.columns(2)
with col1:
st.dataframe(df.head())
with col2:
fig = px.scatter(df, x="sepal_width", y="sepal_length",
color=color_col, size_max=10)
st.plotly_chart(fig, use_container_width=True)
四、继续深入的方向
- 官方 cheat-sheet 打印贴墙:
https://docs.streamlit.io/library/cheatsheet - 组件不够用?装第三方:
pip install streamlit-aggrid(超神表格)、streamlit-echarts(炫酷图表) - 部署:
- 本地局域网:
streamlit run app.py --server.address 0.0.0.0 --server.port 8501 - 免费公网:GitHub + Streamlit Community Cloud,一键自动部署。
- 本地局域网:
拿着这份速查表,90% 的日常需求都能 5 分钟内拼出来。祝玩 Streamlit 愉快!