ai
  • index
  • cursor
  • vector
  • crawl
  • crawl-front
  • DrissionPage
  • logging
  • mysql
  • pprint
  • sqlalchemy
  • contextmanager
  • dotenv
  • Flask
  • python
  • job
  • pdfplumber
  • python-docx
  • redbook
  • douyin
  • ffmpeg
  • json
  • numpy
  • opencv-python
  • pypinyin
  • re
  • requests
  • subprocess
  • time
  • uuid
  • watermark
  • milvus
  • pymilvus
  • search
  • Blueprint
  • flash
  • Jinja2
  • secure_filename
  • url_for
  • Werkzeug
  • chroma
  • HNSW
  • pillow
  • pandas
  • beautifulsoup4
  • langchain-community
  • langchain-core
  • langchain
  • langchain_unstructured
  • libreoffice
  • lxml
  • openpyxl
  • pymupdf
  • python-pptx
  • RAGFlow
  • tabulate
  • sentence_transformers
  • jsonl
  • collections
  • jieba
  • rag_optimize
  • rag
  • rank_bm25
  • Hugging_Face
  • modelscope
  • all-MiniLM-L6-v2
  • ollama
  • rag_measure
  • ragas
  • ASGI
  • FastAPI
  • FastChat
  • Jupyter
  • PyTorch
  • serper
  • uvicorn
  • markdownify
  • NormalizedLevenshtein
  • raq-action
  • CrossEncoder
  • Bi-Encoder
  • neo4j
  • neo4j4python
  • matplotlib
  • Plotly
  • Streamlit
  • py2neo
  • abc
  • read_csv
  • neo4jinstall
  • APOC
  • neo4jproject
  • uv
  • GDS
  • heapq
  • 1. Streamlit 安装方法
  • 1. Streamlit 核心特点
  • 2. 基础组件
    • 2.1 文本显示
    • 2.2 数据显示
    • 2.3 图表展示
  • 3. 交互组件
    • 3.1 用户输入
    • 3.2 文件上传
  • 4. 布局管理
    • 4.1 侧边栏
    • 4.2 列布局
    • 4.3 标签页
  • 5. 状态管理与会话
  • 6. 性能优化
    • 6.1 数据缓存
    • 6.2 计算缓存
  • 7. 部署应用
  • 8. 实际应用示例
  • 9. 学习资源

Streamlit 是一个用于快速构建数据科学和机器学习 Web 应用的 Python 框架。它让数据科学家和开发者能够用简单的 Python 脚本创建交互式、美观的应用,而无需前端开发经验。

1. Streamlit 安装方法 #

在 Windows 系统下,推荐使用 pip 进行安装。请确保已安装 Python 3.7 及以上版本。

  1. 打开命令提示符(Win+R 输入 cmd 回车)
  2. 升级 pip(可选,但推荐):

    python -m pip install --upgrade pip
  3. 安装 Streamlit:

    pip install streamlit
  4. 验证安装是否成功:

    streamlit hello

    如果浏览器自动打开并显示 Streamlit 示例页面,说明安装成功。

注意事项:

  • 如遇权限问题,可尝试在命令前加 python -m 或使用管理员权限运行命令提示符。
  • 建议在虚拟环境(如 venv、conda)中安装和管理依赖,避免与系统包冲突。

1. Streamlit 核心特点 #

  • 极简开发:只需 Python 脚本,无需 HTML/CSS/JavaScript
  • 即时更新:保存代码后应用自动刷新
  • 丰富的组件:内置图表、表格、表单等交互元素
  • 数据缓存:优化性能,避免重复计算
  • 部署简单:可轻松部署到 Streamlit Cloud 或其他平台

2. 基础组件 #

2.1 文本显示 #

这是 Streamlit 中常用的文本显示方法,包括主标题、标题、子标题、普通文本、Markdown 格式文本以及数学公式的渲染。适用于页面结构搭建和内容展示。

# 导入 Streamlit 库
import streamlit as st

# 显示页面主标题
st.title("我的第一个Streamlit应用")
# 显示一级标题
st.header("这是标题")
# 显示二级标题
st.subheader("这是子标题")
# 显示普通文本
st.text("这是普通文本")
# 显示 Markdown 格式文本
st.markdown("**这是Markdown** *文本*")
# 显示数学公式,支持 LaTeX 语法
st.latex(r"\frac{n!}{k!(n-k)!} = \binom{n}{k}")

2.2 数据显示 #

这是如何在 Streamlit 中显示数据,包括交互式表格、静态表格和 JSON 数据。常用于数据分析结果的展示。

# 导入 pandas 库用于数据处理
import pandas as pd

# 创建一个简单的数据框
# A、B 两列分别有 1,2,3 和 4,5,6 三个值
df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
# 显示交互式表格,可排序、筛选
df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
st.dataframe(df)  # 交互式表格
# 显示静态表格
st.table(df)      # 静态表格
# 显示 JSON 数据
st.json({"name": "John", "age": 30})  # JSON显示

2.3 图表展示 #

这是如何在 Streamlit 中绘制图表,包括使用 Matplotlib 绘图和 Streamlit 内置的折线图、柱状图、面积图。适用于数据可视化。

# 安装 matplotlib 库(如未安装需先执行)
pip install matplotlib
# 导入 Matplotlib、NumPy、Streamlit、pandas 库
import matplotlib.pyplot as plt
import numpy as np
import streamlit as st
import pandas as pd

# 生成 0~10 的等间隔 100 个点
x = np.linspace(0, 10, 100)
# 绘制正弦曲线
y = np.sin(x)
plt.plot(x, y)
# 在 Streamlit 页面中显示 Matplotlib 图形
st.pyplot(plt)

# 创建一个包含两列的数据框,A 为等间隔,B 为正弦值
df = pd.DataFrame({"A": np.linspace(0, 10, 100), "B": np.sin(np.linspace(0, 10, 100))})
# 显示折线图
st.line_chart(df)
# 显示柱状图
st.bar_chart(df)
# 显示面积图
st.area_chart(df)

3. 交互组件 #

3.1 用户输入 #

这是 Streamlit 中常用的交互输入组件,包括按钮、复选框、单选按钮、下拉选择、多选、滑块和文本输入。通过这些组件可以实现与用户的交互,适用于表单、参数选择等场景。

# 导入 Streamlit 库
import streamlit as st

# 按钮,点击后显示提示文本
if st.button("点击我"):
    # 按钮被点击时执行
    st.write("按钮被点击了!")

# 复选框,勾选后显示感谢文本
agree = st.checkbox("我同意")
if agree:
    # 复选框被勾选时执行
    st.write("感谢您的同意!")

# 单选按钮,选择电影类型
genre = st.radio("你最喜欢的电影类型", ("喜剧", "动作", "爱情"))
# 显示选择结果
st.write(f"你选择了: {genre}")

# 下拉选择,选择数字
option = st.selectbox("选择数字", [1, 2, 3])
# 显示选择结果
st.write(f"你选择了: {option}")

# 多选,选择颜色
options = st.multiselect("选择颜色", ["红", "绿", "蓝"])
# 显示选择结果
st.write(f"你选择了: {options}")

# 滑块,选择年龄
age = st.slider("你的年龄", 0, 100, 25)
# 显示选择结果
st.write(f"你的年龄是: {age}")

# 文本输入,输入名字
name = st.text_input("你的名字")
if name:
    # 输入后显示问候
    st.write(f"你好, {name}!")

3.2 文件上传 #

这是如何通过 Streamlit 的文件上传组件上传 CSV 文件,并用 pandas 读取和展示内容。适用于数据导入、用户上传等场景。

# 文件上传组件,限制类型为 csv
uploaded_file = st.file_uploader("上传CSV文件", type="csv")
if uploaded_file is not None:
    # 读取上传的 CSV 文件为 DataFrame
    df = pd.read_csv(uploaded_file)
    # 显示上传的数据
    st.write(df)

4. 布局管理 #

4.1 侧边栏 #

这是如何使用 Streamlit 的 sidebar 侧边栏功能,将输入控件放置在页面侧边,常用于参数设置、用户信息输入等场景。

# 导入 Streamlit 库
import streamlit as st

# 在侧边栏显示标题
st.sidebar.title("设置面板")
# 在侧边栏添加文本输入框
user_name = st.sidebar.text_input("用户名")
# 在侧边栏添加滑块输入
user_age = st.sidebar.slider("年龄", 0, 100, 30)

4.2 列布局 #

这是如何使用 Streamlit 的列布局功能,将页面分为多列并分别放置内容,适用于仪表盘、对比展示等场景。

# 创建两列布局
col1, col2 = st.columns(2)

# 在第一列显示标题和折线图
with col1:
    # 显示列标题
    st.header("第一列")
    # 显示随机数据的折线图
    st.line_chart(np.random.randn(10, 2))

# 在第二列显示标题和柱状图
with col2:
    # 显示列标题
    st.header("第二列")
    # 显示随机数据的柱状图
    st.bar_chart(np.random.randn(10, 2))

4.3 标签页 #

这是如何使用 Streamlit 的 tabs 标签页功能,将内容分组到不同的选项卡中,适用于多视图切换、数据与图表分离展示等场景。

# 导入所需库
import numpy as np
import streamlit as st
import pandas as pd

# 创建数据框,A为等间隔,B为正弦值
df = pd.DataFrame({"A": np.linspace(0, 10, 100), "B": np.sin(np.linspace(0, 10, 100))})
# 创建两个标签页
tab1, tab2 = st.tabs(["图表", "数据"])

# 在第一个标签页显示折线图
with tab1:
    st.line_chart(df)

# 在第二个标签页显示数据表
with tab2:
    st.dataframe(df)

5. 状态管理与会话 #

这是如何使用 Streamlit 的 session_state 实现会话状态管理。可以在多次交互中保存和更新变量,常用于计数器、表单等需要记忆用户操作的场景。

# 导入 Streamlit 库
import streamlit as st

# 如果 session_state 中没有 'counter',则初始化为 0
if "counter" not in st.session_state:
    st.session_state.counter = 0

# 按钮,点击后计数加一
if st.button("增加计数"):
    st.session_state.counter += 1

# 显示当前计数值
st.write(f"当前计数: {st.session_state.counter}")

6. 性能优化 #

6.1 数据缓存 #

这是如何使用 @st.cache_data 装饰器缓存数据加载结果,避免重复读取和计算,提高应用性能。适用于大数据集的加载。

# 导入 pandas 和 Streamlit 库
import pandas as pd
import streamlit as st

# 使用缓存装饰器,缓存数据加载结果
@st.cache_data
def load_data(url):
    # 读取指定 url 的 CSV 文件
    return pd.read_csv(url)

# 加载数据并显示
# 只会在 url 变化或首次运行时真正读取

df = load_data("https://static.docs-hub.com/users_1753115663538.csv")
st.dataframe(df)

6.2 计算缓存 #

这是如何缓存耗时计算结果,避免重复计算,提高响应速度。适用于复杂计算、模型推理等场景。

# 导入 time 和 Streamlit 库
import time
import streamlit as st

# 使用缓存装饰器,缓存计算结果
@st.cache_data
def expensive_computation(a, b):
    # 模拟耗时计算
    time.sleep(2)
    return a * b

# 调用耗时计算函数
result = expensive_computation(5, 10)
# 显示计算结果
st.write(result)

7. 部署应用 #

  1. 本地运行:

    streamlit run app.py
  2. 部署到 Streamlit Cloud:

    • 将代码推送到 GitHub 仓库
    • 登录 share.streamlit.io
    • 选择仓库和主文件
  3. 其他部署选项:

    • Docker 容器
    • AWS/Azure/GCP
    • Heroku

8. 实际应用示例 #

这是一个完整的数据分析仪表板应用,包含数据加载、侧边栏交互、数据筛选、Plotly 绘图和数据表展示。适用于实际数据分析、可视化展示等场景。

# 安装 plotly 库(如未安装需先执行)
pip install plotly
# 导入所需库
import streamlit as st
import pandas as pd
import plotly.express as px

# 加载数据,使用缓存避免重复下载
@st.cache_data
def load_data():
    # 从远程 CSV 加载数据
    return pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv")

# 调用数据加载函数
df = load_data()

# 侧边栏添加控制面板
st.sidebar.header("控制面板")
# 侧边栏选择年份
year = st.sidebar.slider("选择年份", int(df['year'].min()), int(df['year'].max()))
# 侧边栏多选大洲
continent = st.sidebar.multiselect("选择大洲", df['continent'].unique())

# 根据年份筛选数据
filtered_df = df[(df['year'] == year)]
# 如果选择了大洲,则进一步筛选
if continent:
    filtered_df = filtered_df[filtered_df['continent'].isin(continent)]

# 主界面显示标题
st.title("世界发展指标")
# 显示当前年份
st.write(f"显示 {year} 年数据")

# 绘制气泡图
fig = px.scatter(
    filtered_df, x="gdpPercap", y="lifeExp",
    size="pop", color="continent", hover_name="country",
    log_x=True, size_max=60
)
# 显示 Plotly 图表
st.plotly_chart(fig)

# 显示原始数据表
st.subheader("原始数据")
st.dataframe(filtered_df)

9. 学习资源 #

  • 官方文档
  • Streamlit 组件库
  • 示例应用库
  • 社区论坛

Streamlit 通过其简洁的 API 和强大的功能,让数据科学家能够快速将分析结果转化为交互式 Web 应用,极大地提高了工作效率和成果展示能力。

访问验证

请输入访问令牌

Token不正确,请重新输入