Streamlit 是一个基于 Python 的快速 Web 应用开发框架,尤其适合数据科学家、分析师和机器学习工程师。它的特点是轻量、上手快、无需前端知识,只需要用 Python 编写逻辑,即可将数据处理、可视化和交互功能打包成一个 Web 应用。
本文将系统介绍 Streamlit 的常用方法,并给出详细示例,帮助你快速掌握其核心用法。
一、安装与运行
安装 Streamlit:
pip install streamlit
运行一个 Streamlit 应用(例如 app.py
):
streamlit run app.py
默认会启动一个本地服务,打开浏览器即可访问。
二、基本输出方法
1. 文本输出
import streamlit as st
st.title("Streamlit 示例应用")
st.header("这是一个标题")
st.subheader("这是一个副标题")
st.text("普通文本内容")
st.markdown("**支持 Markdown 格式**,如粗体、*斜体*、[超链接](https://streamlit.io)")
2. 代码与高亮
code = '''
def hello():
print("Hello, Streamlit!")
'''
st.code(code, language="python")
3. 数据展示
import pandas as pd
df = pd.DataFrame({
"姓名": ["张三", "李四", "王五"],
"成绩": [85, 90, 78]
})
st.dataframe(df) # 可交互表格
st.table(df) # 静态表格
三、输入组件
1. 文本输入与数字输入
name = st.text_input("请输入姓名:")
age = st.number_input("请输入年龄:", min_value=0, max_value=120, value=18)
if name:
st.write(f"欢迎 {name}, 年龄 {age}")
2. 选择器
option = st.selectbox("选择一个选项", ["Python", "Java", "C++"])
st.write("你选择的是:", option)
options = st.multiselect("选择多个选项", ["苹果", "香蕉", "橘子"])
st.write("你选择了:", options)
3. 文件上传
uploaded_file = st.file_uploader("上传文件", type=["csv", "txt", "pdf", "png", "jpg"])
if uploaded_file is not None:
st.write("文件名:", uploaded_file.name)
4. 滑块与按钮
level = st.slider("选择数值", 0, 100, 50)
st.write("当前值为:", level)
if st.button("点击我"):
st.success("按钮已点击!")
四、可视化支持
Streamlit 内置了多种图表支持,并且与 Matplotlib、Plotly、Altair 等兼容。
1. 内置图表
import numpy as np
import pandas as pd
chart_data = pd.DataFrame(
np.random.randn(20, 3),
columns=["a", "b", "c"]
)
st.line_chart(chart_data) # 折线图
st.area_chart(chart_data) # 面积图
st.bar_chart(chart_data) # 柱状图
2. Matplotlib 图表
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4], [10, 20, 25, 30])
st.pyplot(fig)
3. Plotly 图表
import plotly.express as px
df = px.data.iris()
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species")
st.plotly_chart(fig)
五、状态管理与缓存
1. 缓存函数结果
@st.cache_data
def load_data():
import time
time.sleep(2) # 模拟耗时操作
return pd.DataFrame(np.random.randn(100, 2), columns=["x", "y"])
data = load_data()
st.write("数据加载完成:", data.head())
2. 会话状态
if "count" not in st.session_state:
st.session_state.count = 0
if st.button("增加计数"):
st.session_state.count += 1
st.write("当前计数:", st.session_state.count)
六、布局与界面优化
1. 分栏布局
col1, col2 = st.columns(2)
with col1:
st.write("这是第一列")
with col2:
st.write("这是第二列")
2. 侧边栏
option = st.sidebar.selectbox("选择一个选项", ["首页", "数据分析", "模型预测"])
st.sidebar.write("当前选择:", option)
七、综合示例
下面是一个综合性的小应用:
import streamlit as st
import pandas as pd
import numpy as np
st.title("学生成绩分析系统")
# 上传数据
uploaded_file = st.file_uploader("上传成绩 CSV 文件", type=["csv"])
if uploaded_file:
df = pd.read_csv(uploaded_file)
st.dataframe(df)
# 数据描述
st.subheader("数据统计")
st.write(df.describe())
# 绘制图表
st.subheader("成绩分布")
st.bar_chart(df["成绩"])
# 筛选
min_score = st.slider("选择最低成绩", 0, 100, 60)
filtered = df[df["成绩"] >= min_score]
st.write(f"成绩大于等于 {min_score} 的学生:", filtered)
八、总结
通过本文,我们系统介绍了 Streamlit 的常用方法,包括基本输出、输入组件、数据可视化、状态管理、布局等。可以看到,Streamlit 的设计理念就是简洁高效,让开发者专注于逻辑本身,而无需关心前端的复杂性。
如果你正在做数据分析或机器学习的原型开发,Streamlit 是一个极具效率的工具,可以快速搭建出交互式 Web 应用。