Streamlit实战手册:从数据应用到机器学习模型部署

Streamlit实战手册:从数据应用到机器学习模型部署

    • 简介
    • Streamlit核心功能介绍
      • Streamlit的安装
      • 创建第一个Streamlit应用
      • 界面布局与导航
      • 数据处理与展示
    • Streamlit的进阶应用
      • 交互式组件
        • 按钮
        • 复选框
        • 单选按钮
        • 滑块
      • 图表与可视化
        • 使用Matplotlib绘图
        • 使用Plotly创建交互式图表
      • 状态管理与会话状态
    • 实战项目
      • 案例分析:数据探索性分析应用
        • 项目步骤:
      • 案例分析:机器学习模型部署
        • 项目步骤:
    • Streamlit应用部署
      • 部署到Heroku
      • 部署到其他平台
    • 性能优化技巧
      • 使用缓存机制
      • 优化数据加载
      • 使用向量化操作而非循环
      • 减少图表的复杂性
      • 使用分批处理和异步加载
    • 安全最佳实践
      • 保护敏感数据
      • 使用环境变量管理敏感信息
      • 验证用户输入
      • 限制访问
      • 更新依赖
      • 监控与日志记录

在这里插入图片描述

简介

Streamlit 是一款开源的Python库,旨在帮助开发者快速构建数据应用。它通过简化数据应用的开发流程,让开发者能够专注于数据处理与分析逻辑,而不必花费大量时间在前端设计上。Streamlit 的出现极大地降低了数据科学家和开发者将数据分析结果转化为互动式Web应用的门槛。

该库通过一套简洁的API,支持各种数据可视化库,如Matplotlib、Plotly和Altair,使得在Web应用中展示动态图表变得轻而易举。用户只需用少量的代码,就可以实现数据的快速呈现和交互式控件,如滑块、按钮和选择器等,从而创建出既美观又功能强大的数据应用。

Streamlit 的核心优势在于其“写即展现”的特性。开发者通过编写Python脚本,就可以实时看到应用的变化,这大大加快了开发和迭代的速度。无论是数据分析师在探索性数据分析(EDA)中快速构建和分享结果,还是机器学习工程师需要部署模型进行实时预测,Streamlit 都能提供强大的支持。

接下来的章节将深入介绍Streamlit的安装、核心功能、进阶应用和部署,以及通过实战项目展示如何有效利用Streamlit进行数据应用开发。我们将从安装开始,逐步探索如何利用Streamlit的强大功能来构建交互式数据应用。

Streamlit核心功能介绍

Streamlit的安装

在深入探讨Streamlit的强大功能之前,首先需要确保Streamlit被正确安装在您的开发环境中。安装Streamlit非常简单,只需几个简单的步骤即可完成。以下是安装Streamlit的基本命令:

pip install streamlit

这条命令将会从Python包索引(PyPI)下载并安装最新版本的Streamlit。请确保您的开发环境已经安装了Python(版本3.6及以上),以及pip(Python的包管理器)。

安装完成后,可以通过在命令行中运行以下命令来验证Streamlit是否安装成功:

streamlit hello

这条命令会启动一个Streamlit的示例应用,如果您的浏览器自动打开了一个含有Streamlit欢迎界面的页面,恭喜您,Streamlit已成功安装并准备好使用了。

创建第一个Streamlit应用

有了Streamlit,创建一个基本的数据应用就像编写一个Python脚本一样简单。下面是一个简单的Streamlit应用示例:

import streamlit as stst.title('我的第一个Streamlit应用')
st.write('这是一个非常简单的应用,用来展示Streamlit的基本用法。')

将上述代码保存为app.py,然后在命令行中运行以下命令来启动应用:

streamlit run app.py

您的默认浏览器将自动打开一个新的标签页,展示了您的Streamlit应用。恭喜您,您已经成功创建了第一个Streamlit应用!

界面布局与导航

Streamlit提供了多种方式来组织您的应用界面,使其既美观又实用。例如,您可以使用侧边栏(sidebar)来添加输入控件,而不是将它们全部堆砌在主页面上:

import streamlit as stst.title('带有侧边栏的应用')# 在侧边栏添加一个滑块
number = st.sidebar.slider('选择一个数字', 0, 100, 50)# 在主页面显示选择的数字
st.write('您选择的数字是:', number)

数据处理与展示

Streamlit使得在应用中展示数据变得异常简单。无论是显示DataFrame还是绘制图表,Streamlit都能轻松应对。下面是一个展示DataFrame的例子:

import streamlit as st
import pandas as pd
import numpy as np# 创建一个简单的DataFrame
data = pd.DataFrame({'第一列': np.random.randn(10),'第二列': np.random.rand(10)
})st.write('这是一个DataFrame示例:')
st.dataframe(data)

通过上述简介和核心功能的介绍,我们已经初步了解了Streamlit的安装、创建应用、界面布局与数据展示等基础知识。接下来的章节将深入探讨Streamlit的进阶应用,包括交互式组件的使用、图表与可视化技巧、状态管理等内容。

Streamlit的进阶应用

交互式组件

Streamlit的交互式组件允许用户与应用进行互动,极大地增强了应用的可用性和互动性。以下是一些常用的交互式组件及其使用示例:

按钮
import streamlit as stif st.button('显示消息'):st.write('Streamlit 是真的很酷!')
复选框
import streamlit as stif st.checkbox('显示图表'):st.line_chart([0, 1, 2, 3, 4])
单选按钮
import streamlit as stgenre = st.radio("你最喜欢哪种类型的音乐?",('流行', '摇滚', '爵士'))st.write(f'你选择的是:{genre}')
滑块
import streamlit as stage = st.slider('你的年龄', 0, 130, 25)
st.write("我 ", age, ' 岁')

图表与可视化

Streamlit内置了对多种图表和数据可视化库的支持,包括但不限于Matplotlib、Plotly和Altair。这让开发者能够轻松地将复杂的数据可视化集成到他们的应用中。

使用Matplotlib绘图
import streamlit as st
import matplotlib.pyplot as plt
import numpy as npx = np.linspace(0, 10, 30)
y = np.sin(x)fig, ax = plt.subplots()
ax.plot(x, y)st.pyplot(fig)
使用Plotly创建交互式图表
import streamlit as st
import plotly.express as pxdf = px.data.iris()
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species")st.plotly_chart(fig)

状态管理与会话状态

在复杂的Streamlit应用中,管理应用状态变得尤为重要。Streamlit 提供了会话状态(session state)功能,允许开发者在多次运行之间保持变量状态。

import streamlit as st# 初始化一个计数器
if 'count' not in st.session_state:st.session_state.count = 0# 创建一个增加计数的按钮
if st.button('增加'):st.session_state.count += 1st.write('计数器:', st.session_state.count)

通过这些进阶功能,开发者可以构建出更加复杂和功能丰富的Streamlit应用。接下来,我们将通过实战项目深入探索Streamlit的实际应用,包括如何进行数据探索性分析和机器学习模型的部署。

实战项目

在本节中,我们将通过两个实战项目深入探索Streamlit的强大功能:一个是数据探索性分析应用,另一个是机器学习模型部署。这些项目将帮助你理解如何在实际场景中应用Streamlit。

案例分析:数据探索性分析应用

在这个项目中,我们将使用Streamlit构建一个数据探索性分析(EDA)应用,允许用户上传数据集,进行基本的数据探索,包括查看数据集的概览、统计信息、以及生成各种图表来可视化数据。

项目步骤:
  1. 数据上传功能

    import streamlit as st
    import pandas as pduploaded_file = st.file_uploader("上传你的CSV或Excel文件", type=['csv', 'xlsx'])
    if uploaded_file is not None:df = pd.read_csv(uploaded_file)st.write(df)
    
  2. 数据集概览

    提供数据的基本信息,如行数、列数、缺失值统计等。

    if uploaded_file is not None:st.write("数据集概览:")st.write("行数:", df.shape[0])st.write("列数:", df.shape[1])st.write("缺失值统计:", df.isnull().sum())
    
  3. 数据可视化

    使用Streamlit内置的图表功能,例如折线图、柱状图、箱型图等,来展示数据的分布情况。

    import streamlit as st
    import pandas as pd
    import numpy as np# 示例:生成并展示一个随机数据的直方图
    if uploaded_file is not None:st.write("数据分布:")selected_column = st.selectbox("选择一个列来展示其分布", df.columns)hist_values = np.histogram(df[selected_column], bins=20, range=(0,100))[0]st.bar_chart(hist_values)
    

案例分析:机器学习模型部署

在这个项目中,我们将展示如何使用Streamlit部署一个简单的机器学习模型,使用户能够输入数据并获得预测结果。

项目步骤:
  1. 模型准备

    假设我们已经有一个训练好的模型,这里以一个线性回归模型为例。

  2. 构建Streamlit应用

    创建一个应用界面,用户可以输入他们想要预测的数据,应用将展示模型的预测结果。

    import streamlit as st
    from sklearn.linear_model import LinearRegression# 模拟一个已训练的模型
    model = LinearRegression()
    model.coef_ = np.array([1.0])  # 假设的权重
    model.intercept_ = 0  # 假设的截距st.title('简单线性回归模型部署')# 用户输入
    X_test = st.number_input("输入X的值来预测Y")# 预测并展示结果
    if st.button('预测'):y_pred = model.predict([[X_test]])st.write(f'预测的Y值为: {y_pred[0]}')
    

通过这两个实战项目,你应该对如何使用Streamlit来处理实际数据和部署模型有了更深的理解。接下来,我们将讨论如何将Streamlit应用部署到云平台,使其可以被公开访问。

Streamlit应用部署

将Streamlit应用部署到云端,可以让更多的用户访问您的应用。本节将介绍如何将Streamlit应用部署到Heroku,以及其他流行的部署平台。

部署到Heroku

Heroku是一个支持多种编程语言的云平台,适合快速部署应用。部署Streamlit应用到Heroku需要以下几个步骤:

  1. 准备应用
    确保您的Streamlit应用已经在本地测试通过,且项目根目录中包含requirements.txt文件,列出了所有的依赖。

  2. 创建Procfile
    在项目的根目录下创建一个名为Procfile的文件(没有文件扩展名),并写入以下内容:

    web: sh setup.sh && streamlit run app.py
    

    其中app.py是您的Streamlit应用的主文件。

  3. 创建setup.sh
    同样在项目根目录下创建setup.sh文件,以配置正确的Streamlit设置。示例内容如下:

    mkdir -p ~/.streamlit/
    echo "\
    [server]\n\
    headless = true\n\
    enableCORS=false\n\
    port = $PORT\n\
    " > ~/.streamlit/config.toml
    
  4. 使用Git将应用推送到Heroku
    如果您还没有Heroku账号,需要先注册一个。然后,使用Heroku CLI(命令行工具)登录,并创建一个新的应用。最后,使用Git将您的应用推送到Heroku上。

  5. 访问您的应用
    推送完成后,Heroku会自动构建并部署您的Streamlit应用。构建完成后,您可以通过Heroku提供的链接访问您的应用。

部署到其他平台

除了Heroku,还有许多其他平台支持Streamlit应用的部署,例如:

  • Google Cloud Platform (GCP)
  • Amazon Web Services (AWS)
  • Microsoft Azure

这些平台可能需要更复杂的配置,但它们提供了更多的灵活性和控制权,适合规模较大或需要更多定制的应用。

部署到这些云平台通常涉及到容器化应用(如使用Docker),然后在目标平台上配置相应的服务。由于每个平台的具体步骤有所不同,建议查阅相应平台的官方文档来获取详细指导。

性能优化技巧

当您的Streamlit应用开始变得复杂并处理大量数据时,性能优化成为了一个不可忽视的问题。以下是一些性能优化的技巧,可以帮助您的应用运行得更快,更流畅。

使用缓存机制

Streamlit提供了一个强大的缓存机制,允许您缓存函数的输出,避免在每次用户互动时重新计算数据。使用st.cache装饰器,可以显著提高应用的性能。

import streamlit as st@st.cache
def expensive_computation(a, b):# 假设这是一个耗时的计算return a * b + 10result = expensive_computation(2, 3)
st.write(result)

优化数据加载

如果您的应用需要从外部数据源(如数据库或API)加载数据,确保尽可能地减少数据传输量。例如,只查询需要的数据,而不是加载整个数据库表。

@st.cache
def load_data(query):# 根据需要执行查询,而不是加载整个数据集return run_query(query)data = load_data("SELECT * FROM table WHERE condition = True")

使用向量化操作而非循环

在处理数据时,尽量使用向量化操作,这通常比Python的循环更快。Pandas和NumPy库在这方面非常有用。

import numpy as np
import pandas as pd# 向量化操作示例
data = pd.DataFrame({'A': np.random.rand(1000), 'B': np.random.rand(1000)})
data['C'] = data['A'] + data['B']  # 向量化操作

减少图表的复杂性

虽然复杂的图表看起来很酷,但它们可能会显著降低应用的性能。尝试简化图表的设计,减少绘图所用的数据点数量。

使用分批处理和异步加载

对于处理大量数据或执行复杂计算的应用,考虑使用分批处理或异步加载技术。这可以提高应用的响应性,改善用户体验。

import asyncioasync def async_expensive_computation(a, b):# 异步执行耗时操作await asyncio.sleep(1)  # 模拟耗时操作return a * b + 10result = await async_expensive_computation(2, 3)
st.write(result)

通过以上技巧,您可以显著提高Streamlit应用的性能。始终记得,优化的关键是识别瓶颈所在并针对性地解决问题。在进行任何优化之前,了解您的应用在哪些地方最耗时是很有帮助的。

安全最佳实践

随着您的Streamlit应用变得越来越复杂,确保应用的安全性也同样重要。这部分将探讨一些保护Streamlit应用的安全最佳实践。

保护敏感数据

当您的应用处理敏感数据(例如个人信息或商业秘密)时,确保数据在传输和存储过程中都是加密的。使用HTTPS协议可以保护数据在客户端和服务器之间的传输过程不被窃听。

# 确保Streamlit应用部署在支持HTTPS的服务器上

使用环境变量管理敏感信息

不要在代码中硬编码敏感信息(如数据库密码或API密钥)。使用环境变量来管理这些敏感信息,这样可以避免将它们暴露在版本控制系统中。

# 设置环境变量(示例在Linux/MacOS上)
export DATABASE_PASSWORD="your_secure_password"
import os# 在应用中使用环境变量
database_password = os.getenv("DATABASE_PASSWORD")

验证用户输入

对于所有用户输入,包括文件上传,都应进行验证,以防止注入攻击或其他恶意活动。确保验证输入的有效性,并对任何异常输入采取措施。

import streamlit as st# 示例:简单的输入验证
user_input = st.text_input("请输入您的名字")
if not user_input.isalpha():st.error("请不要输入数字或特殊字符。")

限制访问

如果您的应用不是公开的,考虑添加认证机制来限制访问。虽然Streamlit默认不提供内置的认证功能,但您可以通过第三方服务或使用前端代理服务器来实现这一功能。

# 考虑使用像Streamlit Sharing或者其他支持基本认证的托管平台

更新依赖

定期更新Streamlit及其依赖项至最新版本,以确保您的应用受到最新安全补丁的保护。使用依赖管理工具,如pip--upgrade选项,可以帮助您保持依赖的最新状态。

pip install --upgrade streamlit

监控与日志记录

实现监控和日志记录机制,以便于追踪任何异常行为或性能问题。日志记录对于诊断安全事件和确保应用健康运行来说非常关键。

# 使用标准的Python日志记录模块
import logginglogging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)logger.info("应用启动")

通过实施这些安全最佳实践,您可以增强Streamlit应用的安全性,保护您和您用户的数据免受威胁。安全是一个持续的过程,需要定期审查和更新您的应用以应对新出现的安全威胁。

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

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

相关文章

视频号下载助手失效了?如何解决下载视频问题!

在刷短视频的时候难免会遇到部分的视频号视频下载不下来,那我们该如何解决视频号下载问题呢? 视频号下载助手解决方案 视频号下载助手失效分为两种情况! 1、可以解析,但不能下载 根据使用视频号下载助手常见的问题,我们发现会有…

超声波气象站和气象雷达有什么区别

TH-CQX5超声波气象站和气象雷达在气象监测领域各自扮演着重要的角色,但它们的工作原理和应用范围存在明显的区别。 首先,超声波气象站的工作原理主要基于超声波在大气中的传播特性。它利用超声波发射器向周围环境发射超声波信号,并通过测量这…

Emotion Prompt-LLM能够理解并能通过情感刺激得以增强

Large Language Models Understand and Can be Enhanced by Emotional Stimuli 情感智能对我们的日常行为和互动产生了显著的影响。尽管大型语言模型(LLMs)被视为向人工通用智能迈进的一大步,在许多任务中表现出色,但目前尚不清楚…

MES管理系统在生产计划与排产调度流程中的应用

在现代工业生产中,MES管理系统已经成为企业优化生产流程、提升生产效率的重要工具。MES管理系统在生产计划与排产调度中的具体应用,不仅能够帮助企业更好地控制生产过程,还能实现资源的合理配置,从而提高企业的整体竞争力。 首先&…

5G网络架构与组网部署03--5G网络组网部署

1. SA组网与NSA组网 (1)NSA 非独立组网:终端同时接入4G基站和5G基站,只能实现5G部分功能 (2)SA组网【最终目标】:5G基站可以单独提供服务,接入的是5G核心网 区别:同一时间…

许战海战略文库|橋頭品牌突破区域局限打透全国市场的4个建议

自宣统元年(公元1908年)起,重庆南岸区海棠溪古石桥边诞生了一家传奇火锅店——桥头火锅。凭借深厚的文化底蕴和独特的风味,历经百年沉淀桥头火锅已成为南岸区乃至中华餐饮文化中的璀璨明珠。 桥头火锅不仅荣获了“中华老字号”和“中国名菜”两项殊荣&a…

Google云计算原理与应用(四)

目录 七、海量数据的交互式分析工具Dremel(一)产生背景(二)数据模型(三)嵌套式的列存储(四)查询语言与执行(五)性能分析(六)小结 八、…

【网络原理】HTTP 请求 (Request)详解

文章目录 🎍请求格式🎄认识URL🌸query string🌸关于 URL encode 🍀认识 “方法” (method)🌸GET方法🌸POST 方法🌸GET 和 POST 的区别 🌲认识请求 “报头” (header)&…

管理能力学习笔记一:角色转身

管理能力学习是为了解决角色转身后面临的更多更复杂的的问题。初晋管理层,需要转变工作习惯,学会分配时间。 角色转身 建立“授权”意识 通过匹配工作内容与下属员工能力,分配工作,避免陷入下属能力不足 -> 不愿授权 -> 下…

MS08-067 漏洞利用与安全加固

文章目录 环境说明1 MS08_067 简介2 MS08_067 复现过程3 MS08_067 安全加固 环境说明 渗透机操作系统:2024.1漏洞复现操作系统: Windows XP Professional with Service Pack 2- VL (English)安全加固复现操作系统:Windows XP Professional with Service …

Docusaurus和HelpLook:谁更适合做知识库管理

在当今信息化时代,企业建立和维护一个好用、高效、能持续更新的知识库,对内部沟通、团队合作和客户服务都很重要。Docusaurus和HelpLook都是很好的知识库管理工具,但它们的功能和优势各有不同。跟着我一起深入了解两个工具之间的优劣&#xf…

Web框架开发-开发图书管理页面

一、项目需求1.列出图书列表、出版社列表、作者列表2.点击作者,会列出其出版的图书列表3.点击出版社,会列出旗下图书列表4.可以创建、修改、删除 图书、作者、出版社二、项目实现 bookms |-- app01 # 项目应用 | |-- views.py # 视图层代码 | |-- admin.py | |-- app…

launchctl及其配置、使用、示例

文章目录 launchctl 是什么Unix / Linux类似的工具有什么哪个更常用配置使用常用子命令示例加载一个 launch agent:卸载一个 launch daemon:列出所有已加载的服务:启动一个服务:停止一个服务:禁用一个服务:启用一个服务: 附com.example.myagent.plist内容有趣的例子参考 launch…

HuggingChat

HuggingChat 文章目录 HuggingChat一、关于 HuggingChat二、ChatLogin进入对话首页对话 三、Assistants1、使用2、创建新的助理 一、关于 HuggingChat HuggingFace 发布的 Chat 工具 网站:https://huggingface.co/chat/chat-ui space : https://huggingface.co/sp…

探讨苹果 Vision Pro 的空间视频(术语辨析、关键技术、思考)

背景:一位资深视频技术从业者在 Pixvana 工作,积累了丰富的捕获、处理、编码、流传和播放空间媒体经验。 一、术语 空间视频:传统的 3D 视频,呈矩形,包含左右眼视图,如 iPhone15 Pro 和 Vision Pro 可录制。沉浸式视频:非矩形的环绕式视频体验,通常由两个或多个传感器…

深化涉案企业合规改革:从治标到治本的必由之路

在市场经济的大潮中,企业作为经济发展的主体,其健康运行对整个社会的稳定与繁荣至关重要。然而,随着经济全球化的加速和市场竞争的激烈,一些企业在追求利润最大化的过程中,可能会忽视法律法规,甚至触犯法律…

H6603实地架构降压芯片100V耐压 80V 72V 60V 48V单片机/模块供电应用

H6603 是一款内置功率 MOSFET降压开关转换器。在宽输入范围内,其最大持续输出电流 0.8A,具有极好的负载和线性调整率。电流控制模式提供了快速瞬态响应,并使环路更易稳定。故障保护包括逐周期限流保护和过温保护。H6603 最大限度地减少了现有…

五、保持长期高效的七个法则(二)Rules for Staying Productive Long-Term(1)

For instance - lets say youre a writer.You have a bunch of tasks on your plate for the day, but all of a sudden you get a really good idea for an essay. You should probably start writing now or youll lose your train of thought.What should you do? 举例来说…

C#,精巧实用的代码,调用GDI32.DLL绘制图形的源程序

C#画图既可以使用 System.Drawing 命名空间的各种基础类。在某些情况下,也可以直接调用 Windows 的公共基础链接库 GDI32.DLL。 1 GDI32.DLL图形设备接口 意图 Microsoft Windows图形设备界面(GDI)使应用程序能够在视频显示器和打印机上使用图形和格式化文本。基于Window…

Sora底层技术原理:Stable Diffusion运行原理

AIGC 热潮正猛烈地席卷开来,可以说 Stable Diffusion 开源发布把 AI 图像生成提高了全新高度,特别是 ControlNet 和 T2I-Adapter 控制模块的提出进一步提高生成可控性,也在逐渐改变一部分行业的生产模式。惊艳其出色表现,也不禁好…