Streamlit教程:从入门到实战
Streamlit 是一个开源的 Python 库,专为数据科学家和机器学习工程师设计,旨在快速构建交互式 Web 应用程序,而无需深入了解前端开发经验。它允许用户通过简单的 Python 脚本快速创建美观且功能强大的 Web 应用,将数据脚本转化为可分享的网络应用。
Streamlit的核心优势
- 简单易用: 使用纯 Python 语言编写,无需了解 HTML、CSS 或 JavaScript 等前端技术。
- 快速开发与部署: 只需几行代码,就能将数据脚本部署为 Web 应用,并支持实时更新,修改代码后可自动刷新页面。
- 高度交互性: 支持用户输入、数据可视化和实时更新。
- 原生支持数据结构: 可直接渲染 Pandas、Matplotlib、Plotly、Altair 等数据结构和可视化库。
- 跨平台支持: 可以在 Windows、Mac 和 Linux 等操作系统上运行。
一、安装Streamlit
要开始使用 Streamlit,首先需要安装它。确保您的 Python 版本为 3.7 或更高。
您可以使用 pip 命令来安装 Streamlit 库:
bash
pip install streamlit
安装完成后,您可以通过运行 Streamlit 提供的示例应用来验证安装是否成功:
bash
streamlit hello
二、创建您的第一个Streamlit应用 (Hello World)
创建一个名为 app.py 的 Python 脚本文件,并添加以下代码:
“`python
import streamlit as st
st.title(“我的第一个Streamlit应用”)
st.write(“你好,欢迎使用Streamlit!”)
“`
在命令行中,导航到包含 app.py 文件的目录,并运行以下命令:
bash
streamlit run app.py
Streamlit 将自动启动一个本地服务器,并在默认浏览器中打开您的 Web 应用。
三、Streamlit核心功能与组件
Streamlit 提供了丰富的 UI 组件,用于展示文本、图像、图表和接收用户输入。
1. 显示文本
st.title(): 显示应用标题。st.header(): 显示主标题。st.subheader(): 显示副标题。st.write(): 通用显示方法,可以显示文本、数据、图表等。st.markdown(): 显示 Markdown 格式的文本。st.text(): 显示固定宽度的文本。st.code(): 显示代码块。
示例:
“`python
import streamlit as st
st.title(“Streamlit文本展示”)
st.header(“这是一个主标题”)
st.subheader(“这是一个副标题”)
st.write(“使用 st.write() 可以显示普通文本。”)
st.markdown(“### 这是一个Markdown格式的三级标题”)
st.text(“这是一个固定宽度的文本。”)
st.code(“import pandas as pd\ndf = pd.DataFrame({‘col1′: [1, 2]})”, language=’python’)
“`
2. 显示数据
st.dataframe(): 显示可交互的数据帧。st.table(): 显示静态数据表。st.json(): 显示 JSON 对象。
示例:
“`python
import streamlit as st
import pandas as pd
import numpy as np
st.header(“数据展示”)
df = pd.DataFrame(np.random.randn(10, 5), columns=(‘col %d’ % i for i in range(5)))
st.dataframe(df) # 可交互的数据帧
st.table(df.head()) # 静态数据表
st.json({
‘data’: {
‘name’: ‘Streamlit’,
‘version’: ‘1.0’
}
})
“`
3. 交互式组件 (Widgets)
Streamlit 提供了多种交互式组件来获取用户输入。
st.button(): 按钮。st.checkbox(): 复选框。st.radio(): 单选按钮。st.slider(): 滑块。st.text_input(): 文本输入框。st.selectbox(): 下拉选择框。st.multiselect(): 多选框。st.file_uploader(): 文件上传。
示例:
“`python
import streamlit as st
st.header(“交互式组件”)
if st.button(‘点击我’):
st.write(‘按钮被点击了!’)
agree = st.checkbox(‘我同意’)
if agree:
st.write(‘您已同意。’)
genre = st.radio(
“您喜欢哪种电影类型?”,
(‘喜剧’, ‘剧情’, ‘科幻’))
st.write(‘您选择了:’, genre)
age = st.slider(‘您的年龄’, 0, 100, 25)
st.write(“我”, age, “岁。”)
name = st.text_input(‘请输入您的名字’, ‘Streamlit用户’)
st.write(‘你好,’, name)
option = st.selectbox(
‘您最喜欢的颜色是什么?’,
(‘蓝色’, ‘红色’, ‘绿色’))
st.write(‘您最喜欢的颜色是:’, option)
“`
4. 数据可视化
Streamlit 内置了对多种图表和数据可视化库的支持,如 Matplotlib、Plotly 和 Altair。
示例 (使用 Matplotlib):
“`python
import streamlit as st
import matplotlib.pyplot as plt
import numpy as np
st.header(“数据可视化”)
arr = np.random.normal(1, 1, size=100)
fig, ax = plt.subplots()
ax.hist(arr, bins=20)
st.pyplot(fig)
“`
5. 布局与容器
st.sidebar: 将组件放置在侧边栏。st.columns(): 创建多列布局。
示例:
“`python
import streamlit as st
st.sidebar.header(“侧边栏”)
st.sidebar.text_input(“侧边栏输入框”)
col1, col2, col3 = st.columns(3)
with col1:
st.header(“第一列”)
st.write(“这是第一列的内容。”)
with col2:
st.header(“第二列”)
st.write(“这是第二列的内容。”)
with col3:
st.header(“第三列”)
st.write(“这是第三列的内容。”)
“`
四、高级概念
1. 会话状态 (Session State)
由于 Streamlit 会在每次用户交互时重新运行整个脚本,因此需要使用 st.session_state 来保存和管理跨多次运行的状态。
示例:
“`python
import streamlit as st
if ‘count’ not in st.session_state:
st.session_state.count = 0
st.session_state.count += 1
st.write(f”页面已运行 {st.session_state.count} 次。”)
if st.button(‘重置计数’):
st.session_state.count = 0
st.experimental_rerun() # 重置后重新运行脚本
“`
2. 回调函数 (Callbacks)
Streamlit 支持回调函数,可以在特定事件发生时触发函数执行,例如按钮点击。
示例:
“`python
import streamlit as st
if ‘counter’ not in st.session_state:
st.session_state.counter = 0
def increment_counter():
st.session_state.counter += 1
st.button(‘增加计数’, on_click=increment_counter)
st.write(f”当前计数: {st.session_state.counter}”)
“`
3. 缓存 (Caching)
Streamlit 提供了缓存机制(st.cache_data 和 st.cache_resource)来优化性能,避免在每次脚本运行时重复执行耗时操作。
st.cache_data: 缓存函数返回的数据。st.cache_resource: 缓存函数返回的资源(如数据库连接、机器学习模型)。
示例:
“`python
import streamlit as st
import time
@st.cache_data
def expensive_computation(a, b):
time.sleep(2) # 模拟耗时操作
return a + b
st.write(“开始计算…”)
result = expensive_computation(10, 20)
st.write(f”结果是: {result}”)
“`
五、Streamlit实战应用
Streamlit 通过其灵活性和易用性,已被广泛应用于各种数据科学和机器学习项目中。
- 数据探索和可视化工具: 构建交互式 Web 应用,允许用户上传数据集、选择图表类型、应用过滤条件来探索数据。
- 机器学习模型展示与部署: 构建应用,让用户输入数据并实时展示模型预测结果,或作为向非技术利益相关者演示模型能力的工具。
- 复杂业务流程自动化: 例如,财务分析应用可以允许用户上传财务报表,自动执行预算分析、现金流预测等。
- 聊天机器人界面: 快速构建聊天应用的交互界面。
六、部署Streamlit应用
将 Streamlit 应用部署到云端,可以让更多的用户访问您的应用。常见的部署方式包括:
- Streamlit Community Cloud: Streamlit 官方提供的免费部署平台,适合快速分享应用。
- Docker: 将应用打包成 Docker 镜像,方便在任何支持 Docker 的环境中部署。
- Heroku/AWS/GCP 等云平台: 将 Streamlit 应用部署到主流云服务商的虚拟机或容器服务上。
总结
通过本教程,您应该对 Streamlit 有了全面的了解,并能够从入门到实战,构建自己的数据应用。Streamlit 以其极简的 API 和强大的功能,极大地降低了数据应用开发的门槛,让您能够专注于数据和模型本身,快速将想法转化为可交互的 Web 应用。现在就开始您的 Streamlit 之旅吧!