Streamlit:快速搭建数据科学应用的利器

Streamlit:快速搭建数据科学应用的利器

随着数据科学的不断发展,将分析结果以交互式应用的形式展示出来变得越来越重要。然而,传统的 Web 开发通常需要掌握前端、后端等多种技能,这对大多数数据科学家来说是一个门槛。幸运的是,Streamlit 提供了一种简单高效的解决方案,让你可以用 Python 快速构建交互式数据应用。

本文将详细介绍 Streamlit 的特点、安装与使用、核心功能,以及如何将它应用到数据科学项目中。


1. 什么是 Streamlit?

Streamlit 是一个开源的 Python 库,专注于帮助数据科学家快速搭建交互式 Web 应用。你只需用熟悉的 Python 代码编写逻辑,无需前端知识,就能构建出功能强大的应用。

Streamlit 的核心特点

  • 易用性:通过简洁的 API 快速创建界面。
  • 实时交互:每次代码保存时,应用会自动刷新。
  • 无依赖前端:无需 HTML、CSS 或 JavaScript。
  • 高性能:支持并行处理,适合处理较大的数据集。

2. 安装与快速入门

安装 Streamlit

Streamlit 的安装非常简单,只需一条命令:

pip install streamlit

创建第一个 Streamlit 应用

以下是一个简单示例,用于展示文本和用户交互的控件:

import streamlit as st# 添加标题
st.title("Hello, Streamlit!")# 添加文本
st.write("这是一个简单的 Streamlit 应用。")# 用户交互:输入文本
name = st.text_input("请输入你的名字:", "访客")# 显示结果
st.write(f"你好,{name}!欢迎使用 Streamlit。")

运行应用

将上述代码保存为 app.py,然后在终端运行以下命令:

streamlit run app.py

浏览器会自动打开应用,显示交互界面。


3. 核心功能

1. 显示数据

Streamlit 支持多种方式展示数据,包括文本、表格和图表。

显示 Pandas 数据框
import pandas as pd
import streamlit as st# 创建数据框
df = pd.DataFrame({"A": [1, 2, 3],"B": [4, 5, 6]
})# 显示数据框
st.write("数据框:", df)
显示交互式图表

Streamlit 支持与多种绘图库集成,如 Matplotlib 和 Plotly。

import matplotlib.pyplot as plt# 创建图表
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [4, 5, 6])# 显示图表
st.pyplot(fig)

2. 添加用户交互

Streamlit 提供多种控件(Widgets)来获取用户输入。

滑块控件
value = st.slider("选择一个数值", 0, 100, 50)
st.write(f"你选择的数值是 {value}")
下拉菜单
option = st.selectbox("选择一个选项", ["A", "B", "C"])
st.write(f"你选择了 {option}")

3. 文件上传

可以让用户上传文件,并在应用中进行处理。

uploaded_file = st.file_uploader("上传一个 CSV 文件")
if uploaded_file is not None:df = pd.read_csv(uploaded_file)st.write(df)

4. 布局管理

Streamlit 支持多种布局方式,包括分栏和选项卡。

分栏布局
col1, col2 = st.columns(2)
col1.write("这是第一列")
col2.write("这是第二列")
选项卡布局
tab1, tab2 = st.tabs(["选项卡1", "选项卡2"])
with tab1:st.write("内容在选项卡1中")
with tab2:st.write("内容在选项卡2中")

4. 实际案例:构建数据分析仪表盘

以下是一个完整示例,展示如何使用 Streamlit 构建一个数据分析仪表盘:

import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt# 标题
st.title("数据分析仪表盘")# 上传文件
uploaded_file = st.file_uploader("上传 CSV 文件")
if uploaded_file is not None:# 加载数据df = pd.read_csv(uploaded_file)st.write("数据预览:", df.head())# 选择列columns = df.columns.tolist()x_col = st.selectbox("选择 X 轴列", columns)y_col = st.selectbox("选择 Y 轴列", columns)# 创建图表fig, ax = plt.subplots()ax.scatter(df[x_col], df[y_col], alpha=0.5)ax.set_xlabel(x_col)ax.set_ylabel(y_col)st.pyplot(fig)

5. 部署 Streamlit 应用

构建完成后,你可以将 Streamlit 应用部署到服务器或云平台中。Streamlit 官方提供了一款免费工具 Streamlit Cloud,用于快速部署应用。

部署到 Streamlit Cloud

  1. 将项目代码上传到 GitHub。
  2. 登录 Streamlit Cloud。
  3. 关联 GitHub 仓库并选择应用入口文件。
  4. 点击部署,完成应用发布。

6. 总结与优势

Streamlit 是构建数据科学应用的强大工具,其优势在于:

  • 简单:用纯 Python 编写,快速上手。
  • 高效:无需学习前端技术,专注于数据逻辑。
  • 可扩展:支持多种绘图库和机器学习框架。

无论是构建快速原型、共享分析结果,还是搭建数据仪表盘,Streamlit 都是一个值得尝试的选择。


7. Streamlit 的应用场景

Streamlit 的灵活性和易用性,使其在多个领域都有广泛的应用。以下是一些典型的使用场景:

1. 数据分析与可视化

Streamlit 非常适合用来展示数据分析结果。通过交互式图表和控件,用户可以轻松筛选数据、调整参数,从而动态地探索数据。

示例:销售数据分析仪表盘

Streamlit 可以用来构建销售分析仪表盘,让用户选择日期范围、产品类别等,实时查看销售趋势和关键指标。

2. 机器学习模型演示

机器学习模型通常需要对外展示其性能和预测结果。Streamlit 提供了简单的方法,将模型预测集成到交互式应用中,让用户上传数据、调整参数,观察模型的预测效果。

示例:情感分析应用

用户可以输入一段文本,通过 Streamlit 调用机器学习模型,返回情感分析的结果。

import streamlit as st
from textblob import TextBlobst.title("情感分析应用")
text = st.text_area("输入文本:")
if st.button("分析"):sentiment = TextBlob(text).sentimentst.write("情感倾向:", "正面" if sentiment.polarity > 0 else "负面" if sentiment.polarity < 0 else "中性")

3. 数据报告与共享

传统的数据分析报告通常以 PDF 或 PowerPoint 的形式呈现,缺乏交互性。而 Streamlit 应用可以代替静态报告,为团队提供动态的数据分析结果和洞察。

示例:财务报表分析

创建一个交互式财务分析工具,支持实时查看收入、支出和利润等指标。

4. 科研和教育

Streamlit 可以帮助科研人员快速搭建实验结果展示平台,或者为教育工作者创建互动式教学工具。

示例:数学可视化教学

通过 Streamlit 构建函数图形绘制工具,学生可以输入函数公式并实时查看图形变化。


8. Streamlit 的优势与局限性

优势

  1. 快速开发:只需几行代码即可构建功能完善的应用,极大提升开发效率。
  2. 与 Python 生态兼容:支持 Pandas、NumPy、Matplotlib、Scikit-learn 等常见的 Python 库。
  3. 低门槛:无需掌握前端开发技术,数据科学家即可独立完成应用开发。
  4. 开源免费:完全开源,并提供丰富的社区支持。

局限性

  1. 样式定制有限:相比传统前端框架(如 React 或 Vue),Streamlit 对 UI 的定制能力较弱,主要集中在数据展示和交互控件。
  2. 不适合复杂逻辑:对于需要处理复杂逻辑或多用户交互的应用,Streamlit 的表现可能不如专门的 Web 框架(如 Django、Flask)。
  3. 性能限制:虽然 Streamlit 支持多线程,但对超大规模用户访问或极高计算需求的应用,可能需要额外优化或借助其他工具。

9. 提升 Streamlit 应用的技巧

1. 使用缓存机制

Streamlit 提供了内置的缓存功能,通过 @st.cache_data 装饰器,可以缓存计算结果,提升应用性能。

@st.cache_data
def load_data(file_path):import pandas as pdreturn pd.read_csv(file_path)# 使用缓存加载数据
df = load_data("data.csv")
st.write(df)

2. 优化界面布局

通过 st.columnsst.container,可以创建复杂的页面布局,提升用户体验。

col1, col2 = st.columns(2)
with col1:st.write("这是第一列的内容")
with col2:st.write("这是第二列的内容")

3. 自定义主题

~/.streamlit/config.toml 中,可以自定义应用的主题,包括颜色、字体等。

[theme]
primaryColor = "#FF4B4B"
backgroundColor = "#F0F2F6"
textColor = "#262730"
font = "sans serif"

10. 学习资源与社区支持

Streamlit 拥有丰富的官方文档和活跃的社区,为开发者提供支持:

  • 官方文档: https://docs.streamlit.io/
  • 示例应用: https://streamlit.io/gallery
  • 社区论坛: https://discuss.streamlit.io/

11. 结语

Streamlit 是一个极简且强大的工具,让数据科学家和工程师能够专注于数据和模型,而无需花费大量时间学习前端开发。无论是快速构建原型、部署交互式仪表盘,还是展示机器学习成果,Streamlit 都能显著提升工作效率。

如果你还没有尝试过 Streamlit,现在就是时候了!打开你的 IDE,开始写下第一行代码,构建属于你的数据科学应用吧!

12. 实战案例:构建房价预测应用

在这一部分,我们将通过 Streamlit 构建一个基于机器学习的房价预测应用,用户可以输入房屋的特征(如面积、卧室数等),实时获取预测的房价。


Step 1: 数据准备与模型训练

首先,我们使用一个简单的线性回归模型对房价数据进行训练。假设我们有一个包含房屋特征的数据集 house_prices.csv

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression# 加载数据
data = pd.read_csv("house_prices.csv")# 特征与目标值
X = data[["area", "bedrooms", "bathrooms", "floors"]]
y = data["price"]# 分割训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)# 保存模型
import joblib
joblib.dump(model, "house_price_model.pkl")

Step 2: 创建 Streamlit 应用

接下来,我们创建一个交互式应用,用户可以输入房屋的特征,实时获取预测的房价。

完整代码
import streamlit as st
import joblib
import numpy as np# 加载模型
model = joblib.load("house_price_model.pkl")# 设置标题
st.title("房价预测应用")# 输入房屋特征
st.write("请输入以下信息以预测房价:")
area = st.number_input("房屋面积(平方米)", min_value=10, max_value=1000, value=100, step=10)
bedrooms = st.slider("卧室数", 1, 10, value=2)
bathrooms = st.slider("浴室数", 1, 5, value=1)
floors = st.slider("楼层数", 1, 3, value=1)# 预测房价
if st.button("预测房价"):# 构建输入特征features = np.array([[area, bedrooms, bathrooms, floors]])# 模型预测price = model.predict(features)[0]# 显示预测结果st.success(f"预测的房价为:{price:,.2f} 元")

Step 3: 部署和运行

本地运行

将上述代码保存为 app.py,并在终端运行以下命令:

streamlit run app.py

浏览器将自动打开,显示交互式的房价预测应用。

部署到 Streamlit Cloud
  1. 将项目上传到 GitHub 仓库。
  2. 登录 Streamlit Cloud。
  3. 创建一个新的应用,选择代码仓库和入口文件(如 app.py)。
  4. 点击部署,几分钟后即可获得一个可分享的应用链接。

Step 4: 扩展功能

添加图表

通过 Matplotlib 或 Plotly 动态展示预测的房价分布。

import matplotlib.pyplot as plt# 创建图表
fig, ax = plt.subplots()
ax.bar(["房价"], [price], color="blue")
ax.set_ylabel("价格(元)")# 显示图表
st.pyplot(fig)
添加数据存储功能

记录用户的输入和预测结果,以供后续分析。

import pandas as pd# 数据存储
if st.button("保存结果"):result = {"面积": area, "卧室数": bedrooms, "浴室数": bathrooms, "楼层数": floors, "预测房价": price}df = pd.DataFrame([result])df.to_csv("predictions.csv", mode="a", header=False, index=False)st.success("结果已保存!")

13. 总结与展望

通过这个房价预测应用,我们体验了 Streamlit 的强大功能,包括:

  • 快速构建交互式应用:用户可以通过简单的输入控件与模型交互。
  • 可视化预测结果:轻松集成图表,使结果更加直观。
  • 数据持久化:保存用户输入和结果,用于后续优化分析。

Streamlit 为数据科学家提供了从模型到产品的一站式解决方案,特别适合快速原型开发和小规模部署。未来,随着 Streamlit 的生态不断完善,你可以探索更多可能性,如实时大数据可视化、复杂的机器学习模型服务化等。

现在,尝试用 Streamlit 构建你自己的数据科学应用,让你的分析结果不仅仅是图表,而是触手可及的交互式工具!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/473790.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ReactPress与WordPress:一场内容管理系统的较量

ReactPress Github项目地址&#xff1a;https://github.com/fecommunity/reactpress WordPress官网&#xff1a;https://wordpress.org/ ReactPress与WordPress&#xff1a;一场内容管理系统的较量 在当今数字化时代&#xff0c;内容管理系统&#xff08;CMS&#xff09;已成为…

解决Windows远程桌面 “为安全考虑,已锁定该用户账户,原因是登录尝试或密码更改尝试过多。请稍后片刻再重试,或与系统管理员或技术支持联系“问题

当我们远程连接服务器连接不上并提示“为安全考虑&#xff0c;已锁定该用户账户&#xff0c;原因是登录尝试或密码更改尝试过多。请稍候片刻再重试&#xff0c;或与系统管理员或技术支持联系”时&#xff0c;根本原因是当前计算机远程连接时输入了过多的错误密码&#xff0c;触…

Cyberchef配合Wireshark提取并解析TCP/FTP流量数据包中的文件

前一篇文章中讲述了如何使用cyberchef提取HTTP/TLS数据包中的文件,详见《Cyberchef配合Wireshark提取并解析HTTP/TLS流量数据包中的文件》,链接这里,本文讲述下如何使用cyberchef提取FTP/TCP数据包中的文件。 FTP 是最为常见的文件传输协议,和HTTP协议不同的是FTP协议传输…

vs2022搭建opencv开发环境

1 下载OpenCV库 https://opencv.org/ 下载对应版本然后进行安装 将bin目录添加到系统环境变量opencv\build\x64\vc16\bin 复制该路径 打开高级设置添加环境变量 vs2022新建一个空项目 修改属性添加头文件路径和库路径 修改链接器&#xff0c;将OpenCV中lib库里的o…

构建SSH僵尸网络

import argparse import paramiko# 定义一个名为Client的类&#xff0c;用于表示SSH客户端相关操作 class Client:# 类的初始化方法&#xff0c;接收主机地址、用户名和密码作为参数def __init__(self, host, user, password):self.host hostself.user userself.password pa…

【开源免费】基于SpringBoot+Vue.JS购物推荐网站(JAVA毕业设计)

博主说明&#xff1a;本文项目编号 T 073 &#xff0c;文末自助获取源码 \color{red}{T073&#xff0c;文末自助获取源码} T073&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

PG-DERN 解读:少样本学习、 双视角编码器、 关系图学习网络

本文提出了一种用于 分子属性预测 的 少样本学习&#xff08;Few-shot Learning&#xff09; 模型—— PG-DERN&#xff0c;该模型结合了 双视角编码器&#xff08;Dual-view Encoder&#xff09; 和 关系图学习网络&#xff08;Relation Graph Learning Network&#xff09; 双…

RabbitMQ-死信队列(golang)

1、概念 死信&#xff08;Dead Letter&#xff09;&#xff0c;字面上可以理解为未被消费者成功消费的信息&#xff0c;正常来说&#xff0c;生产者将消息放入到队列中&#xff0c;消费者从队列获取消息&#xff0c;并进行处理&#xff0c;但是由于某种原因&#xff0c;队列中的…

Uni-APP+Vue3+鸿蒙 开发菜鸟流程

参考文档 文档中心 运行和发行 | uni-app官网 AppGallery Connect DCloud开发者中心 环境要求 Vue3jdk 17 Java Downloads | Oracle 中国 【鸿蒙开发工具内置jdk17&#xff0c;本地不使用17会报jdk版本不一致问题】 开发工具 HBuilderDevEco Studio【目前只下载这一个就…

Python中的with语句

with语句和上下文管理器 Python提供了 with 语句的写法&#xff0c;既简单又安全 文件操作的时候使用with语句可以自动调用关闭文件操作&#xff0c;即使出现异常也会自动关闭文件操作。 # 1、以写的方式打开文件 with open(1.txt, w) as f:# 2、读取文件内容f.write(hello wor…

SQL面试题——抖音SQL面试题 主播播出时长

主播播出时长 现有如下数据,主播id、房间号、播出的批次号,每个批次号进出房间的时间戳、分区时间: 每一次直播都有一个上播和下播,每个房间里,同一个批次号会有两条数据,分别记录了上播和下播时间,求每个主播的播出时长? 通过上面的数据,可以清晰的看出,同一个批次…

【汇编】c++游戏开发

由一起学编程创作的‘C/C项目实战&#xff1a;2D射击游戏开发&#xff08;简易版&#xff09;&#xff0c; 440 行源码分享来啦~’&#xff1a; C/C项目实战&#xff1a;2D射击游戏开发&#xff08;简易版&#xff09;&#xff0c; 440 行源码分享来啦~_射击c-CSDN博客文章浏览…

Uniapp 引入 Android aar 包 和 Android 离线打包

需求&#xff1a; 原生安卓 apk 要求嵌入到 uniapp 中&#xff0c;并通过 uniapp 前端调起 app 的相关组件。 下面手把手教你&#xff0c;从 apk 到 aar&#xff0c;以及打包冲突到如何运行&#xff0c;期间我所遇到的问题都会 一 一 进行说明&#xff0c;相关版本以我文章内为…

自动化运维(k8s):一键获取指定命名空间镜像包脚本

前言&#xff1a;脚本写成并非一蹴而就&#xff0c;需要不断的调式和修改&#xff0c;这里也是改到了7版本才在 生产环境 中验证成功。 该命令 和 脚本适用于以下场景&#xff1a;在某些项目中&#xff0c;由于特定的安全或政策要求&#xff0c;不允许连接到你的镜像仓库。然而…

Vue2+ElementUI:用计算属性实现搜索框功能

前言&#xff1a; 本文代码使用vue2element UI。 输入框搜索的功能&#xff0c;可以在前端通过计算属性过滤实现&#xff0c;也可以调用后端写好的接口。本文介绍的是通过计算属性对表格数据实时过滤&#xff0c;后附完整代码&#xff0c;代码中提供的是死数据&#xff0c;可…

机器学习(1)

一、机器学习 机器学习&#xff08;Machine Learning, ML&#xff09;是人工智能&#xff08;Artificial Intelligence, AI&#xff09;的一个分支&#xff0c;它致力于开发能够从数据中学习并改进性能的算法和模型。机器学习的核心思想是通过数据和经验自动优化算法&#xff…

【Linux学习】【Ubuntu入门】1-4 ubuntu终端操作与shell命令1

1.使用快捷键CtrlAltT打开命令终端&#xff0c;或者单击右键点击… 2.常用shell命令 目录信息查看命令&#xff1a;ls ls -a&#xff1a;显示目录所有文件及文件夹&#xff0c;包括隐藏文件&#xff0c;比如以.开头的 ls -l&#xff1a;显示文件的详细信息 ls -al&#xff1…

Oracle OCP认证考试考点详解082系列19

题记&#xff1a; 本系列主要讲解Oracle OCP认证考试考点&#xff08;题目&#xff09;&#xff0c;适用于19C/21C,跟着学OCP考试必过。 91. 第91题&#xff1a; 题目 解析及答案&#xff1a; 关于 Oracle 数据库中的索引及其管理&#xff0c;以下哪三个陈述是正确的&#x…

智能网页内容截图工具:AI助力内容提取与可视化

我们每天都会接触到大量的网页内容。然而&#xff0c;如何从这些内容中快速提取关键信息&#xff0c;并有效地进行整理和分享&#xff0c;一直是困扰我们的问题。本文将介绍一款我近期完成的基于AI技术的智能网页内容截图工具&#xff0c;它能够自动分析网页内容&#xff0c;截…

基于单片机智能温室大棚监测系统

本设计以单片机为核心的智能温室大棚监测系统&#xff0c;用于监测大棚内的温湿度、土壤湿度、CO2浓度和光照强度。该系统以STM32F103C8T6芯片为核心控制单元&#xff0c;涵盖电源、按键、NB-IoT模块、显示屏模块、空气温湿度检测、土壤湿度检测、二氧化碳检测和光敏电阻等模块…