Streamlit-应用

image

Streamlit

Streamlit 是一个用于构建数据科学应用程序的开源 Python 框架。它允许数据科学家和机器学习工程师通过简单的 Python 脚本快速构建交互式 Web 应用程序。本文将详细介绍如何使用 Streamlit,从安装到创建第一个应用程序,并深入探讨其核心功能和高级特性。

1- 安装 Streamlit

在开始使用 Streamlit 之前,首先需要安装它。你可以使用 pip 来安装 Streamlit:

pip install streamlit

安装完成后,可以通过以下命令验证安装是否成功:

streamlit hello

如果一切正常,你将看到一个示例应用程序在浏览器中打开。

2- 创建第一个 Streamlit 应用

创建一个新的 Python 文件,例如 app.py,并在其中编写以下代码:

import streamlit as st

st.title('我的第一个 Streamlit 应用')
st.write('Hello, Streamlit!')

保存文件后,在终端中运行以下命令启动应用:

streamlit run app.py

浏览器将自动打开并显示你的应用。

3- Streamlit 的核心功能

Streamlit 提供了许多方便的功能来构建交互式应用程序。以下是一些常用的功能:

4- 文本和数据展示

  • 标题和文本:使用 st.titlest.headerst.write 来展示标题和文本。
st.title('Streamlit 教程')
st.header('这是一个标题')
st.write('这是一些普通文本。')
  • 数据框:使用 st.dataframest.table 来展示数据框。
import pandas as pd

data = {'列': [, , ], '列': [, , ]}
df = pd.DataFrame(data)
st.dataframe(df)
st.table(df)

5- 图表和图形

  • 折线图:使用 st.line_chart 来绘制折线图。
import numpy as np

chart_data = pd.DataFrame(
    np.random.randn(, ),
    columns=['a', 'b', 'c']
)
st.line_chart(chart_data)
  • 地图:使用 st.map 来展示地理数据。
map_data = pd.DataFrame(
    np.random.randn(, ) / [, ] + [, -],
    columns=['lat', 'lon']
)
st.map(map_data)

6- 交互式组件

  • 滑块:使用 st.slider 创建一个滑块。
age = st.slider('选择你的年龄', , , )
st.write('你的年龄是:', age)
  • 文本输入:使用 st.text_input 创建一个文本输入框。
name = st.text_input('输入你的名字')
st.write('你好,', name)
  • 按钮:使用 st.button 创建一个按钮。
if st.button('点击我'):
    st.write('按钮被点击了!')
  • 单选框:使用 st.radio 创建一个单选框。
genre = st.radio(
    "选择一个电影类型",
    ('喜剧', '动作', '恐怖'))

if genre == '喜剧':
    st.write('你选择了喜剧。')
else:
    st.write('你没有选择喜剧。')
  • 复选框:使用 st.checkbox 创建一个复选框。
if st.checkbox('显示数据框'):
    st.write(df)
  • 选择框:使用 st.selectbox 创建一个选择框。
option = st.selectbox(
    '你喜欢的颜色是什么?',
    ('红色', '蓝色', '绿色'))

st.write('你选择了:', option)
  • 多选框:使用 st.multiselect 创建一个多选框。
options = st.multiselect(
    '你喜欢哪些颜色?',
    ['红色', '蓝色', '绿色', '黄色'])

st.write('你选择了:', options)
  • 文件上传:使用 st.file_uploader 创建一个文件上传器。
uploaded_file = st.file_uploader("选择一个文件")
if uploaded_file is not None:
    data = pd.read_csv(uploaded_file)
    st.write(data)

7- 数据缓存

Streamlit 提供了数据缓存功能,可以通过 @st.cache 装饰器来缓存数据,避免重复计算。

@st.cache
def load_data():
    data = pd.read_csv('data.csv')
    return data

data = load_data()
st.write(data)

8- 布局和样式

Streamlit 提供了多种布局和样式选项,使得应用程序更加美观和用户友好。

  • 列布局:使用 st.columns 创建多列布局。
col, col, col = st.columns()
col.write("这是第一列")
col.write("这是第二列")
col.write("这是第三列")
  • 选项卡:使用 st.tabs 创建选项卡布局。
tab, tab = st.tabs(["选项卡", "选项卡"])
with tab:
    st.write("这是选项卡的内容")
with tab:
    st.write("这是选项卡的内容")
  • 侧边栏:使用 st.sidebar 创建侧边栏。
st.sidebar.title("侧边栏标题")
st.sidebar.write("这是侧边栏内容")

9- 部署 Streamlit 应用

完成应用开发后,可以将其部署到云端。Streamlit 提供了多种部署方式,包括 Streamlit Cloud、Heroku 等。

10- 使用 Streamlit Cloud 部署

将你的代码推送到 GitHub。
登录 Streamlit Cloud 并连接你的 GitHub 账户。
创建一个新的应用并选择你的 GitHub 仓库和分支。
部署完成后,你将获得一个公开的 URL,可以分享给他人访问。

11- 使用 Heroku 部署

安装 Heroku CLI 并登录:

heroku login

创建一个新的 Heroku 应用:

heroku create my-streamlit-app

部署应用:

git push heroku main

12- 高级功能

Streamlit 还提供了一些高级功能,如会话状态、回调函数和自定义组件。

13- 会话状态

会话状态允许你在用户交互过程中存储和共享数据。

if 'count' not in st.session_state:
    st.session_state.count = 

increment = st.button('增加计数')
if increment:
    st.session_state.count += 

st.write('计数:', st.session_state.count)

14- 回调函数

回调函数允许你在用户交互时执行特定的代码。

def on_change():
    st.write('滑块值改变了!')

slider_value = st.slider('选择一个值', , , on_change=on_change)

15- 自定义组件

Streamlit 支持自定义组件,可以轻松集成现有的 React 或 Vue.js 组件,实现高度定制的功能。

16- 结论

通过本教程,你应该已经掌握了使用 Streamlit 创建和部署简单数据应用的基本技能。
Streamlit 的强大之处在于其简洁和高效,能够让数据科学家专注于数据本身,而不是繁琐的前端开发。如果你想深入学习 Streamlit,建议参考 官方文档 和社区资源。