Streamlit教程:从入门到实战 – wiki词典

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_datast.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 之旅吧!

滚动至顶部