Streamlit 笔记
Streamlit 是一个开源的 Python 库,用于快速构建和共享数据应用程序。它可以让开发者用简洁的代码将机器学习模型、数据可视化、分析工具等快速构建为交互式的 Web 应用。
Streamlit 的特点
- 简单易用:使用 Python 编写即可构建功能强大的 Web 应用。
- 实时更新:Streamlit 应用会随着代码的修改自动更新,无需手动刷新浏览器。
- 支持丰富的组件:包括表单、按钮、文本框、图表、图片等多种交互组件。
- 集成机器学习模型:支持直接加载和展示机器学习模型的输出,用户可以通过交互操作改变输入,并实时看到模型预测结果。
主要功能
- 可视化数据:支持通过 Matplotlib、Plotly、Altair 等库展示交互式图表。
- 文件上传:支持用户上传文件进行处理。
- 组件支持:如按钮、滑动条、文本框、选择框等。
- 实时交互:通过简单的操作,可以实现用户输入与模型预测的互动。
Streamlit 安装
可以使用 pip
直接安装:
pip install streamlit
注意如果你安装的时候出现下面的错误
error: command ‘cmake’ failed: No such file or directory
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for pyarrow
Failed to build pyarrow
ERROR: Failed to build installable wheels for some pyproject.toml based projects (pyarrow)
解决方法
- 首先安装
cmake
conda install cmake
- 然后安装
pyarrow
conda install pyarrow
注意我这里是使用
conda
进行安装的,如果你在mac上使用brew
安装可以试一下是否可以成功,但是下面的pyarrow
如果使用pip
安装失败,请使用conda
进行安装
安装这些之后再执行
pip install streamlit
就可以成功了
基本用法
- 创建一个简单的 Streamlit 应用:
import streamlit as st# 设置网页标题
st.title("Streamlit 示例应用")# 在网页中添加一个文本框让用户输入数据
user_input = st.text_input("请输入一些文本:")# 添加一个按钮,用户点击时执行某个动作
if st.button("显示输入的文本"):# 显示用户输入的文本st.write("您输入的文本是:", user_input)# 添加一个简单的数字输入框,用户可以选择数字
number_input = st.number_input("请选择一个数字", min_value=0, max_value=100)# 显示数字输入框的结果
st.write(f"你选择的数字是:{number_input}")
- 运行应用:
将上面的代码保存为 app.py
,然后在命令行运行:
streamlit run app.py# You can now view your Streamlit app in your browser.# Local URL: http://localhost:8501
# Network URL: http://10.4.101.18:8501# For better performance, install the Watchdog module:# $ xcode-select --install
# $ pip install watchdog
运行上面会会弹出下面的页面
此时,浏览器会自动打开显示你的应用。每次修改代码并保存后,页面会自动更新,显示最新的变化。
常用组件
-
按钮(Button):
if st.button('点击我'):st.write('按钮被点击了!')
-
滑动条(Slider):
number = st.slider('选择一个数字', 0, 100, 25) st.write(f'你选择的数字是: {number}')
-
选择框(Selectbox):
option = st.selectbox('选择一个选项', ['苹果', '香蕉', '橙子']) st.write(f'你选择的选项是: {option}')
-
文件上传(File uploader):
uploaded_file = st.file_uploader("上传一个文件") if uploaded_file is not None:st.write("文件已上传")
-
文本输入(Text Input):
user_input = st.text_input("请输入文本") st.write(f"你输入的文本是: {user_input}")
使用 Streamlit 构建一个交互式数据可视化应用
假设你有一个简单的数据集并想用 Streamlit 来展示它。以下是一个展示 Pandas 数据框的例子:
import streamlit as st
import pandas as pd# 创建一个简单的 DataFrame
data = {'名称': ['苹果', '香蕉', '橙子'],'数量': [10, 20, 30],'价格': [1.2, 0.5, 0.8]
}
df = pd.DataFrame(data)# 显示 DataFrame
st.write("水果信息", df)# 使用图表展示数据
st.bar_chart(df.set_index('名称')['数量'])
Streamlit 的高级功能
-
缓存:
使用st.cache
可以缓存函数的结果,避免重复计算,提高性能:@st.cache def load_data():return pd.read_csv('large_dataset.csv')
-
多页应用:
Streamlit 支持在应用中创建多个页面,通过st.selectbox
或st.radio
来选择不同的页面内容。 -
自定义组件:
如果需要更复杂的组件,可以使用streamlit.components
来创建自定义的 HTML、JavaScript 和 CSS 组件。