Python 可视化 web 神器 streamlit

官网:https://streamlit.io/

github:https://github.com/streamlit/streamlit

API 参考:https://docs.streamlit.io/library/api-reference

1、streamlit 简介

streamlit 简介

Streamlit 是Python可视化 web 神器 ,是一个开箱即用的工具集,可以让开发者免于学习繁杂的前端知识,仅需几行代码就可以轻松、快速的构建一个简洁、优雅、令人惊叹的可视化 web app 应用。用于机器学习、数据可视化。当快速搭建一个 web app 的时候 Streamlit 绝对是开发神器。

Streamlit 工作流程

:https://docs.streamlit.io/get-started/fundamentals/summary

  1. Streamlit 应用程序是从上到下运行的Python脚本
  2. 每次用户打开指向你的应用的浏览器选项卡时,脚本都是 重新执行
  3. 当脚本执行时,Streamlit 在浏览器中实时绘制其输出
  4. 脚本使用 Streamlit 缓存来避免重新计算复杂的函数,因此 更新发生得非常快
  5. 每次用户与小部件交互时,您的脚本都会重新执行并 在该运行期间将该小组件的输出值将设置为新值。
  6. Streamlit 应用可以包含多个页面,这些页面在pages文件夹中的单独.py文件中定义。

2、简单使用

安装:pip install -i https://pypi.douban.com/simple  streamlit

Streamlit 提供了一些入门示例,执行命令即可:streamlit hello

执行后会自动打开浏览器加载一个本地页面 http://localhost:8501/

这里面有很多的 demo,可以看下这些 Demo 还有对应的配套代码。代码直接拷贝保存,就可以在本地直接通过如下命令直接运行:streamlit run st-demo.py

Streamlit 使用 速查表

  1. Install & Import 安装和导入
  2. Command line 命令行
  3. Pre-release features 预发布功能
  4. Magic commands 魔术命令
  5. Display text 显示文本
  6. Display data 显示数据
  7. Display media 显示媒体
  8. Display charts 显示图表
  9. Add widgets to sidebar 将小部件添加到侧边栏
  10. Columns 列
  11. Tabs 制表符
  12. Control flow 控制流
  13. Display interactive widgets显示交互式小部件
  14. Build chat-based apps 构建基于聊天的应用
  15. Mutate data 更改数据
  16. Display code 显示代码
  17. Placeholders, help, and options占位符、帮助和选项
  18. Connect to data sources连接到数据源
  19. Optimize performance 优化性能
  20. Cache data objects 缓存数据对象

怎么运行 Streamlit 

:https://docs.streamlit.io/knowledge-base/using-streamlit/how-do-i-run-my-streamlit-script

运行方式

  • streamlit run your_script.py [-- script args]
  • streamlit run https://raw.githubusercontent.com/streamlit/demo-uber-nyc-pickups/master/streamlit_app.py
  • python -m streamlit run your_script.py
  • streamlit run your_script.py

Markdown 文本

导入 streamlit 后,就可以直接使用 st.markdown() 初始化,调用不同的方法,就可以往文档对象中填入内容

  • st.title():文章大标题
  • st.header():一级标题
  • st.subheader():二级标题
  • st.text():文本
  • st.code():代码,同时可设置代码的语言,显示的时候会高亮
  • st.latex():latex 公式
  • st.caption():小字体文本

示例:

import streamlit as st

# markdown
st.markdown('Streamlit Demo')

# 设置网页标题
st.title('一个傻瓜式构建可视化 web的 Python 神器 -- streamlit')

# 展示一级标题
st.header('1. 安装')

st.text('和安装其他包一样,安装 streamlit 非常简单,一条命令即可')
code1 = '''pip3 install streamlit'''
st.code(code1, language='bash')


# 展示一级标题
st.header('2. 使用')

# 展示二级标题
st.subheader('2.1 生成 Markdown 文档')

# 纯文本
st.text('导入 streamlit 后,就可以直接使用 st.markdown() 初始化')

# 展示代码,有高亮效果
code2 = '''import streamlit as st
st.markdown('Streamlit Demo')'''
st.code(code2, language='python')

Streamlit 运行的方式 与普通的脚本 有所不同,命令行执行:streamlit run st-demo.py

数据 图表

关于数据的展示,streamlit 由两个组件进行支持

  • table:普通的表格,用于静态数据的展示
  • dataframe:高级的表格,可以进行数据的操作,比如排序

表格

Table 的示例

df = pd.DataFrame(
    np.random.randn(10, 5),
    columns=('第%d列' % (i+1) for i in range(5))
)

st.table(df)

Datafram 的示例

df = pd.DataFrame(
    np.random.randn(10, 5),
    columns=('第%d列' % (i+1) for i in range(5))
)

st.dataframe(df.style.highlight_max(axis=0))

其实还有 n 多种样式,都可以在源代码中找到示例,比如:

  • highlight_null:空值高亮
  • highlight_min:最小值高亮
  • highlight_max:最大值高亮
  • highlight_between:某区间内的值高亮
  • highlight_quantile:暂没用过

监控组件

在采集到一些监控数据后,若你需要做一个监控面板, streamlit 也为你提供的 metric 组件

示例:创建 三个指标,并且填入对应的数据

col1, col2, col3 = st.columns(3)
col1.metric("Temperature", "70 °F", "1.2 °F")
col2.metric("Wind", "9 mph", "-8%")
col3.metric("Humidity", "86%", "4%")

刷新页面,就能看到下面的效果

原生图表组件

Streamlit 原生支持多种图表:

  • st.line_chart:折线图
  • st.area_chart:面积图
  • st.bar_chart:柱状图
  • st.map:地图

折线图

chart_data = pd.DataFrame(
    np.random.randn(20, 3),
    columns=['a', 'b', 'c'])

st.line_chart(chart_data)

面积图

chart_data = pd.DataFrame(
    np.random.randn(20, 3),
    columns = ['a', 'b', 'c'])

st.area_chart(chart_data)

柱状图

chart_data = pd.DataFrame(
    np.random.randn(50, 3),
    columns = ["a", "b", "c"])
st.bar_chart(chart_data)

地图

df = pd.DataFrame(
    np.random.randn(1000, 2) / [50, 50] + [37.76, -122.4],
    columns=['lat', 'lon']
)
st.map(df)

外部图表组件

Streamlit 的一些原生图表组件,虽然做到了傻瓜式,但仅能输入数据、高度和宽度,如果你想更漂亮的图表,就像 matplotlib.pyplot、Altair、vega-lite、Plotly、Bokeh、PyDeck、Graphviz 那样,streamlit 也提供了支持:

  • st.pyplot
  • st.bokeh_chart
  • st.altair_chart
  • st.altair_chart
  • st.vega_lite_chart
  • st.plotly_chart
  • st.pydeck_chart
  • st.graphviz_chart

用户 交互 操作

前面都只是展示文本和数据,streamlit  还能写一些交互界面。平时在网页上、app 上能看到的交互组件,Streamlit 几乎都能支持。。

  • button:按钮
  • download_button:文件下载
  • file_uploader:文件上传
  • checkbox:复选框
  • radio:单选框
  • selectbox:下拉单选框
  • multiselect:下拉多选框
  • slider:滑动条
  • select_slider:选择条
  • text_input:文本输入框
  • text_area:文本展示框
  • number_input:数字输入框,支持加减按钮
  • date_input:日期选择框
  • time_input:时间选择框
  • color_picker:颜色选择器

这些内容非常多,也比较简单,可以直接去看 streamlit 源码里的注释即可。

多页面

随着应用程序变得越来越大,将它们组织到多个页面中变得很有用。这使得应用更易于作为开发人员进行管理,并且作为用户更易于进行导航。Streamlit提供了一种创建多页应用程序的方式。

向现有应用添加更多页面,如下所示:

  1. 在包含主脚本的文件夹中,创建一个新文件夹pages。假设您的主脚本名为 main_page.py。
  2. 在文件夹中添加新文件.py以向应用添加更多页面pages。
  3. 运行streamlit run main_page.py。

多页应用的文档将教你如何向应用添加页面,包括如何定义页面、构建和运行多页应用以及在页面之间导航。了解基础知识后,创建您的第一个多页应用程序!

组件/控件

如何使用组件,首先找到要使用的组件。两个很好的组件库:

  • 组件库:https://streamlit.io/components
  • 在这个帖子找 This thread

例如,要使用出色的 AgGrid 组件,首先安装:pip install streamlit-aggrid

from st_aggrid import AgGrid
import pandas as pd

df = pd.read_csv('https://raw.githubusercontent.com/fivethirtyeight/data/master/airline-safety/airline-safety.csv')
AgGrid(df)

执行命令:streamlit run example.py

组件 API 参考

  1. Create a static component创建静态组件
  2. Render an HTML string呈现 HTML 字符串
  3. st.components.v1.html
  4. Render an iframe URL呈现 iframe URL
  5. st.components.v1.iframe
  6. Create a bi-directional component创建双向组件
  7. Development Environment Setup开发环境搭建
  8. Frontend 前端
  9. React 反应
  10. TypeScript-only 仅限 TypeScript
  11. Working with Themes 使用主题
  12. Other frontend details 其他前端细节
  13. Python API
  14. Data serialization 数据序列化
  15. Python → Frontend Python →前端
  16. Frontend → Python 前端 → Python

多媒体 组件/控件

想要在页面上播放图片、音频和视频,可以使用 streamlit 的这三个组件:

  • st.image
  • st.audio
  • st.video

状态 组件

状态组件用来向用户展示当前程序的运行状态,包括:

  • progress:进度条,如游戏加载进度
  • spinner:等待提示
  • balloons:页面底部飘气球,表示祝贺
  • error:显示错误信息
  • warning:显示报警信息
  • info:显示常规信息
  • success:显示成功信息
  • exception:显示异常信息(代码错误栈)

页面 布局

Streamlit 是自上而下渲染的,组件在页面上的排列顺序与代码的执行顺序一致。一个精美的 web app ,只有上下单栏式的布局肯定是不够的。实际上 streamlit 还提供了多种多样的布局:

st.sidebar:侧边栏。侧边栏可以做一些用户操作控件

  • st.columns:列容器,处在同一个 columns 内组件,按照从左至右顺序展示
  • st.expander:隐藏信息,点击后可展开展示详细内容,如:展示更多
  • st.container:包含多组件的容器
  • st.empty:包含单组件的容器

流程 控制

Streamlit 是自上而下逐步渲染出来的,若你的应用场景需要对渲染做一些控制,streamlit 也有提供对应的方法

  • st.stop:可以让 Streamlit 应用停止而不向下执行,如:验证码通过后,再向下运行展示后续内容。
  • st.form:表单,Streamlit 在某个组件有交互后就会重新执行页面程序,而有时候需要等一组组件都完成交互后再刷新(如:登录填用户名和密码),这时候就需要将这些组件添加到 form 中
  • st.form_submit_button:在 form 中使用,提交表单。

缓存特性提升速度

当用户在页面上做一些操作的时候,比如输入数据,都会触发整个 streamlit 应用代码的重新执行,如果其中有读取外部数据的步骤(数 GB 的数据),那这种性能损耗是非常可怕的。

但 streamlit 提供了一个缓存装饰器,当要重新执行代码渲染页面的时候,就会先去缓存里查一下,如果代码或者数据没有发生变化,就直接调用缓存的结果即可。

使用方法也简单,在需要缓存的函数加上 @st.cache 装饰器即可。

DATE_COLUMN = 'date/time'
DATA_URL = ('https://s3-us-west-2.amazonaws.com/'
            'streamlit-demo-data/uber-raw-data-sep14.csv.gz')

@st.cache
def load_data(nrows):
    data = pd.read_csv(DATA_URL, nrows=nrows)
    lowercase = lambda x: str(x).lower()
    data.rename(lowercase, axis='columns', inplace=True)
    data[DATE_COLUMN] = pd.to_datetime(data[DATE_COLUMN])
    return data

部署并web访问

在本地编写的 streamlit 应用,运行起来后只能在本地访问。如果需要让别人也能访问这个应用,那你需要有一台服务器,这样才能通过公网ip进行访问

3、Streamlit 基础

Streamlit 主要概念

  1. 开发流程
  2. 数据流
  3. 显示和设置数据样式
  4. 使用 magic
  5. 写入 数据帧
  6. 绘制 图表和地图
  7. 绘制 折线图
  8. 绘制 地图
  9. Widgets 组件/控件
  10. 使用 复选框 显示/隐藏数据
  11. 使用 选择框
  12. 布局
  13. 显示 进度
  14. 设置 主题

Streamlit 高级概念

  1. Caching 缓存
  2. Session State 会话状态
  3. What is a session? 什么是会话
  4. Examples of using Session State 使用会话状态的示例
  5. Connections 连接

Streamlit 其他功能

  1. Theming 主题
  2. Pages 页面
  3. Static file serving 静态文件服务
  4. App testing 应用测试

高级功能

  1. Advanced features 高级功能
  2. ⋮ App menu ⋮应用程序菜单
  3. Command-line options 命令行选项
  4. Streamlit configuration Streamlit 配置
  5. Theming 主题
  6. Caching 缓存
  7. Add statefulness to apps为应用添加状态
  8. Pre-release features 预发布功能
  9. Secrets management 机密管理
  10. Working with timezones 使用时区
  11. Advanced notes on widget behavior有关小部件行为的高级说明

官网 教程

创建应用

  1. Create your first app创建你的第一个应用
  2. Fetch some data 获取一些数据
  3. Effortless caching 轻松缓存
  4. How's it work? 它是如何工作的?
  5. Inspect the raw data检查原始数据
  6. Draw a histogram 绘制直方图
  7. Plot data on a map在地图上绘制数据
  8. Filter results with a slider使用滑块筛选结果
  9. Use a button to toggle data使用按钮切换数据
  10. Let's put it all together让我们把它们放在一起
  11. Share your app 共享应用
  12. Get help 获取帮助

创建多页应用

  1. Motivation 赋予动机
  2. Convert an existing app into a multipage app将现有应用转换为多页应用
  3. Create the entrypoint file创建入口点文件
  4. Create multiple pages 创建多个页面
  5. Run the multipage app运行多页应用
  6. Next steps 后续步骤

知识库

  • Connect to data sources 连接到数据源
  • Deploy Streamlit apps 部署 Streamlit 应用程序
  • Session State basics 会话状态基础知识
  • Build a basic LLM chat app构建基本的 LLM 聊天应用程序
  • Build an LLM app using LangChain使用 LangChain 构建 LLM 应用程序

使用 Streamlit

  • Sanity checks 健全性检查
  • Batch elements and input widgets with st.form批处理元素和输入小部件 st.form
  • How do I run my Streamlit script?如何运行我的 Streamlit 脚本?
  • How can I make Streamlit watch for changes in other modules I'm importing in my app?如何让 Streamlit 监视我在应用程序中导入的其他模块的变化?
  • What browsers does Streamlit support?Streamlit支持哪些浏览器?
  • What is the path of Streamlit’s config.toml file?Streamlit config.toml 的文件路径是什么?
  • Where does st.file_uploader store uploaded files and when do they get deleted?st.file_uploader将上传的文件存储在哪里,何时删除?
  • How do you retrieve the filename of a file uploaded with st.file_uploader?如何检索使用 st.file_uploader 上传的文件的文件名?
  • How to remove "· Streamlit" from the app title?如何删除“·Streamlit“从应用程序标题?
  • How to download a file in Streamlit?如何在 Streamlit 中下载文件?
  • How to download a Pandas DataFrame as a CSV?如何将 Pandas DataFrame 下载为 CSV?
  • How do I get dataframe row-selections from a user?如何从用户那里获取数据帧行选择?
  • How can I make st.pydeck_chart use custom Mapbox styles?如何使用 st.pydeck_chart 自定义 Mapbox 样式?
  • How to insert elements out of order?如何无序插入元素?
  • How to animate elements?如何为元素制作动画?
  • Append data to a table or chart将数据追加到表格或图表
  • How do I upgrade to the latest version of Streamlit?如何升级到最新版本的 Streamlit?
  • Widget updating for every second input when using session state使用会话状态时每秒更新一次小组件
  • How do I create an anchor link?如何创建锚链接?
  • How do I enable camera access?如何启用相机访问?
  • Why does Streamlit restrict nested st.columns?为什么 Streamlit 限制嵌套 st.columns ?
  • How to host static files in Streamlit?如何在Streamlit中托管静态文件?
  • What is serializable session state?什么是可序列化会话状态?

4、官网 30 天学 Streamlit

:https://30days.streamlit.app/?challenge=Day1

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Open3D聚类算法

按照官网的例子使用聚类,发现结果是全黑的。 经过多次测试发现 eps3.3, min_points1这里是关键 min_points必须等于1否则无效果 import time import open3d as o3d; import numpy as np; import matplotlib.pyplot as plt#坐标 mesh_coord_frame o3d.geometry.Tria…

自定义ChatGPT商店下周上线!大模型“App Store时刻”来啦

1月5日凌晨,OpenAI向所有自定义GPT开发者发布了一封邮件,下周将上线“自定义GPT商店”。 自定义GPTs是OpenAI在去年首届开发者大会上发布的重磅产品,用户无需任何代码,全程支持可视化点击操作。 用户只需要提交对话指令、额外的…

企业核心技术泄露可能给企业带来深远的负面影响以及补救措施

企业核心技术是企业竞争优势的重要来源,但同时也是企业面临的最大风险之一。随着信息技术的发展,企业核心技术泄露的风险也越来越大。一旦企业核心技术泄露,不仅会给企业带来直接的经济损失,还会对企业的品牌形象、市场竞争力、战…

led台灯哪些牌子性价比高?那些性价比高的LED护眼台灯推荐

台灯作为家居用品在日常生活中使用频繁。用户可以根据个人需求和喜好,在市场上找到合适的款式。然而,由于台灯种类繁多,甚至连相关标准都存在差异,这使得一些缺乏经验的购物小白感到困扰。那么,led台灯哪些牌子性价比高…

提升图像分割精度:学习UNet++算法

文章目录 一、UNet 算法简介1.1 什么是 UNet 算法1.2 UNet 的优缺点1.3 UNet 在图像分割领域的应用 二、准备工作2.1 Python 环境配置2.2 相关库的安装 三、数据处理3.1 数据的获取与预处理3.2 数据的可视化与分析 四、网络结构4.1 UNet 的网络结构4.2 UNet 各层的作用 五、训练…

SpringCloud之Eureka组件工作原理详解

Eureka是一种服务注册与发现组件,最初由Netflix开发并开源出来。它主要用于构建分布式系统中的微服务架构,并提供了服务注册、服务发现、负载均衡等功能。在本文中,我们将详细解释Eureka的工作原理。 一、Eureka概述 Eureka是Netflix开源的一…

MySQL数据库的CURD、常见函数及UNION和UNION ALL

一、概述 MySQL是一种流行的关系型数据库管理系统,广泛应用于各种应用场景。在MySQL中,CURD操作是指创建(Create)、读取(Read)、更新(Update)和删除(Delete)…

ROS学习笔记(9)进一步深入了解ROS第三步

0.前提 1. (C)Why did you include the header file of the message file instead of the message file itself?(为包含消息的头文件而不是消息本身?) 回答:msg文件是描述ROS消息字段的文本文件,用于生成不同语言消息…

【Mars3d】new mars3d.layer.GeoJsonLayer({不规则polygon加载label不在正中间的解决方案

问题: 1.new mars3d.layer.GeoJsonLayer({type: "polygon",在styleOptions里配置label的时候,发现这个 不规则polygon加载的时候,会出现label不在中心位置。 graphicLayer new mars3d.layer.GeoJsonLayer({ name: "全国省界…

游戏Lua调用01.lua的编译及测试

一、lua库下载与编译 进入lua官网 Lua: version history 找到lua5.1 选择lua5.1是因为大部分游戏使用的都是lua5.1的库,也可以选择高版本,影响不大 下载完了后使用vs建立一个静态库或者动态库的工程 这里以动态库为例子,静态库也是一样的…

6 网关和配置服务器

文章目录 网关模式Spring Cloud网关Spring Cloud网关微服务其他项目的变更运行和测试小结 运行状况Spring Boot Actuator在微服务中包含Actuator 服务发现和负载均衡ConsulSpring Cloud ConsulSpring Cloud负载均衡器网关中的服务发现和负载均衡使用服务发现和负载均衡 环境配置…

vins 实机测试 rs_d435 + imu

vins 实机测试 文章目录 1. imu标定2. camera内参标定3. imu-cam 外参标定4. vins 实际运行5. realsense 1. imu标定 git clone https://github.com/gaowenliang/code_utils.git git clone https://github.com/gaowenliang/imu_utils.git编译运行, roslaunch imu_…

CSS基本知识

文章目录 1. CSS 是什么2. 基本语法规范3. 引入方式3.1 内部样式表3.2 行内样式表3.3 外部样式 4. 选择器4.1 选择器的功能4.2 选择器的种类4.3 基础选择器4.3.1 标签选择器4.3.2 类选择器4.3.3 id 选择器4.3.4 通配符选择器 4.4 复合选择器4.4.1 后代选择器4.4.2 伪类选择器 5…

git在本地创建dev分支并和远程的dev分支关联起来

文章目录 git在本地创建dev分支并和远程的dev分支关联起来1. 使用git命令2. 使用idea2.1 先删除上面建的本地分支dev2.2 通过idea建dev分支并和远程dev分支关联 3. 查看本地分支和远程分支的关系 git在本地创建dev分支并和远程的dev分支关联起来 1. 使用git命令 git checkout…

[每周一更]-(第50期):Go的垃圾回收GC

参考文章: https://juejin.cn/post/7111515970669117447https://draveness.me/golang/docs/part3-runtime/ch07-memory/golang-garbage-collector/https://colobu.com/2022/07/16/A-Guide-to-the-Go-Garbage-Collector/https://liangyaopei.github.io/2021/01/02/g…

【网络编程】——基于TCP协议实现回显服务器及客户端

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程的一点学习心得,欢迎大家在评论区交流讨论💌 目录 一、TCP实…

Python | Iter/genartor | 一文了解迭代器、生成器的含义\区别\优缺点

前提 一种技术的出现,需要考虑: 为了实现什么样的需求;遇到了什么样的问题;采用了什么样的方案;最终接近或达到了预期的效果。 概念 提前理解几个概念: 迭代 我们经常听到产品迭代、技术迭代、功能迭代…

echarts 切换时出现上一次图形残留。

先说结果:悬浮高亮导致。这可能使echarts的bug。 正常情况出现这种问题,一般是setOption 中没有配置notMerge 导致新的配置与旧配置合并。 但是我这里始终配置notMerge: true,但仍然出现这种问题。 最后发现与鼠标悬浮有关。 环境 echar…

英飞凌TC3xx之一起认识GTM(九)GTM相关知识简述(CMU,CCM,TBU,MON)

英飞凌TC3xx之一起认识GTM(九)GTM相关知识简述(CMU,CCM,TBU,MON) 1 时钟管理单元(CMU)2 集群配置模块(CCM)3 时基单元(TBU)4 监控单元(MON)5 总结由前文的各篇内容,开发者已经知道如何使用GTM的大部分功能,在这些功能中,都需要一个信息就是fGTM 的数据,我们在前…

全网唯一值得推荐的C/C++框架和库

全网唯一值得推荐的C/C框架和库 C程序员开发指南 ​ 关注我,天天分享C/C开发技术干货! ​关注他 30 人赞同了该文章 ​ 目录 收起 标准库 C通用框架和库 人工智能 异步事件循环 音频 生态学 压缩 并发性 容器 数据库 调试 游戏引擎 图…