Streamlit基础教程

news2024/12/26 21:36:40

streamlit是什么

streamlit是一个开源的python库,它能够快速的帮助我们创建定制化的web应用,而且还非常便于和他人分享,特别是在机器学习和数据科学领域。整个过程不需要你了解任何前端的知识,包括htmlcssjavascript等,对非前端开发人员非常的友好。

streamlit安装

streamlit要求python版本大于等于3.6,可以直接使用pip进行安装

pip install streamlit

安装成功后,使用其内置的hello app测试,执行命令

streamlit hello

服务启动后,它会自动帮我们打开页面,地址是 http://localhost:8501

63b66e7c5b44f6a1487949a616dc7fbd.png

streamlit

可以看到,streamlit默认使用端口8501

除此之外,streamlit官方还提供了一个稍复杂的应用,它结合了yolov3的目标检测算法,仓库地址:https://github.com/streamlit/demo-self-driving,感兴趣的可以去研究研究,代码简短,但功能完整

547e4ae0e2adba691ca12d070ae6f74d.gif

streamlit

那么,针对我们自己写的源码文件,该怎么运行呢?其实也非常简单,比如源码文件是app.py,那么可以执行

streamlit run app.py

这里再说2个常用的命令

  • streamlit docs 查看文档

  • streamlit cache clear 清缓存

streamlit常用组件

按钮

import streamlit as st

button = st.button('按钮')

affcc56974073b81fa9a4d6596be8d78.png

streamlit button

文本输入框

import streamlit as st

st.text_input('请输入最喜欢的编程语言', key="name")

c24b5cd21799a8e586786e885f1dc7ed.png

streamlit text_input

文本显示

import streamlit as st

st.write('Hello streamlit.')

f6cf937597a9cc2270cc2c0095993251.png

streamlit write

streamlit完美支持markdown语法,可以直接使用write方法,来看示例

import streamlit as st

st.write("""
    # 一级标题
    ## 二级标题
    ### 三级标题

    **强调**
    

    >这是引用

    . python    
    . java    
    . c/c++    
    . rust    
""")

103cec6aefd4fa31c6407d101fbbcf5f.png

streamlit write markdown

除了write方法,streamlit还提供了text方法,同样可以显示文本信息

import streamlit as st

st.text('Hello streamlit.')

标题

import streamlit as st

st.title('title')

e9ca3c715b6265f6149a634156504765.png

streamlit title

除了titlestreamlit还提供了headersubheader

import streamlit as st

st.header('header')
st.subheader('subheader')

52aef844141cda4c2fa48758f0b613c3.png

streamlit header

滑动条

import streamlit as st

number = st.slider('Pick a number', 0, 100)

49676a79e6e0d2f0fe2d8089391efe98.png

streamlit slider

选择框

import streamlit as st

flag = st.checkbox('Yes')

cd97d92c1ca1f517f07025496b44211c.png

streamlit checkbox

单选按钮

import streamlit as st

languages = ['python', 'c', 'rust', 'c++']

st.radio('Pick a language', languages)

078c5515f503af78f5e53bc31a60cac4.png

streamlit radio

下拉选择框

import streamlit as st

st.selectbox('用过哪几种编程语言?', ('python', 'c', 'java', 'rust'))

bd78d30b1c264a2fe0ec261353648f0b.png

streamlit selectbox

日期选择器

import streamlit as st

date = st.date_input('Pick a date')

10d08d262e68af30414a30a823c43542.png

streamlit date_input

颜色选择器

import streamlit as st

color = st.color_picker('Pick a color')

e9c1268c14e10b5df9981c78d932ab8c.png

streamlit color_picker

文件选择器

import streamlit as st

file = st.file_uploader('Pick a file')

d1a8dfba4941dc7c714e3de925a5b2dd.png

streamlit file_uploader

streamlit的其它功能

显示json

import streamlit as st

st.json({
    "code": 0,
    "data": {
        "sex": "female",
        "age": 18,
        "score": 100
    }
})

6160a798de38d58d95099a6ad6b59df7.png

streamlit json

显示代码

from numpy.core.arrayprint import _leading_trailing
import streamlit as st

code = """
    def func():
        print('Hello streamlit.')
"""
st.code(code, language='python')

9bd7d3dd8908bb492f673ef0e259bcf1.png

streamlit code

显示pandas中的dataframe

from numpy.core.arrayprint import _leading_trailing
import streamlit as st
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(50, 5), columns=(
    'col %d' % i for i in range(5)))
st.dataframe(df)

f4fea0ec0a970aad696b34180eed710b.png

streamlit pandas dataframe

最后一句中的st.dataframe(df)可以用st.write(df)来代替,效果一样

显示表格

import streamlit as st
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(50, 5), columns=(
    'col %d' % i for i in range(5)))
st.table(df)

5af854ba7a5b80c210dff05774d6336a.png

streamlit table

与上边的dataframe不同的是,表格会将所有数据都显示出来,而没有了滚动条

指标性数据显示

这里还需要安装另一个库streamlit-metrics,执行安装命令pip install streamlit-metrics即可

import streamlit as st
from streamlit_metrics import metric_row

st.write("一周数据统计")
metric_row(
    {
        "关注人数": 100,
        "点赞人数": 200,
        "在看人数": 300,
        "分享人数": 400
    }
)

c70ac2e1ebf3a04fa1ad7d47c83cb85b.png

streamlit metric

streamlit的会话状态和回调

会话状态session state

在浏览器中打开新的页面,就创建了一个会话(session)。会话状态是页面rerun(并非类似F5的页面刷新)时数据交互的一种方式。

看个计数的示例

import streamlit as st

st.title('Hello streamlit.')
counter = 0

increment = st.button('Increment')
if increment:
    counter += 1

st.write('Count= ', counter)

765aaa1bc05a636c6db06ba08bb11325.png

streamlit session state

可以看到只有第一次点击按钮时,Count增加了1,后面的点击,counter都不会改变,这显然跟我们的预期是不一样的。

我们修改下上面的代码

from typing import Counter
import streamlit as st

st.title('Hello streamlit.')
if 'counter' not in st.session_state:
    st.session_state.counter = 0

increment = st.button('Increment')
if increment:
    st.session_state.counter += 1

st.write('Count= ', st.session_state.counter)

ef5976f6ea49f2e287992dd3ac4686e1.png

streamlit session state

这样功能就正常了,每点击一次按钮,Count就加1

回调callbacks

回调(callbacks)是一个python函数,它在输入组件更改时被调用,比如按钮被点击、滑动条被拉拽等。

针对上边的示例,使用callbacks修改一下

from typing import Counter
import streamlit as st

# callbacks
def increment_counter():
    st.session_state.counter += 1


st.title('Callbacks')
if 'counter' not in st.session_state:
    st.session_state.counter = 0

st.button('Increment', on_click=increment_counter)
st.write('Count= ', st.session_state.counter)

代码执行的效果是一样的。这是无需传参的示例,如果需要数据交互,可以使用argskwargs,看下面的示例

import streamlit as st

st.title('Callbacks with args')
if 'counter' not in st.session_state:
    st.session_state.counter = 0

increment_value = st.number_input('Enter a value', value=0, step=1)


def increment_counter(increment_value):
    st.session_state.counter += increment_value


increment = st.button('Increment', on_click=increment_counter,
                      args=(increment_value, ))

st.write('Count = ', st.session_state.counter)

89068d8101452a9a717ccaba17def8bd.png

streamlit callbacks args

下面看看kwargs的用法,它接收的是命名参数

import streamlit as st

st.title('Callbacks with kwargs')
if 'counter' not in st.session_state:
    st.session_state.counter = 0


def increment_counter(increment_value=0):
    st.session_state.counter += increment_value


def decrement_counter(decrement_value=0):
    st.session_state.counter -= decrement_value


st.button('Increment', on_click=increment_counter,
          kwargs=dict(increment_value=5))

st.button('Decrement', on_click=decrement_counter,
          kwargs=dict(decrement_value=1))

st.write('Count = ', st.session_state.counter)

1db6ebe798c4e1f1be7aea4095bef6d9.png

callbacks kwargs

点击Increment按钮,Count就加5,点击Decrement按钮,Count就减1

会话状态的注意事项

关于会话状态,有两点需要注意,分别是

  • 只要页面打开并连接到streamlit服务器,会话状态就会一直存在。一旦关闭选项卡,会话状态中存储的所有内容都会丢失

  • 会话状态不会持久化。如果streamlit服务器崩溃,那么存储在会话状态中的所有内容都会被删除

53d6eca28bd2191228acc9f941f9fe0d.jpeg

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3 计算属性和侦听器实战(computed、watch)——简易点餐页面

文章目录 📋前言🎯项目介绍🎯项目创建🎯代码分析🎯完整代码(含 CSS 代码)📝最后 📋前言 这篇文章记录一下 Vue3 计算属性和侦听器 (computed、watch&#xf…

网络安全自学能学会吗?网络安全如何学习

网络安全是近年来的热门工作,吸引了许多小伙伴开始学习网络安全知识。那么我们应该如何学习网络安全呢?这是一个很多人都在考虑的问题。网络安全可以自学吗?自学网络安全能不能学会? 无论什么知识都是自学的,只是说每…

数学物理学家心中的十大最美方程

“你认为最美的数学、物理方程是什么?”当代十位大数学家、物理学家给出了他们自己的回答。这些回答构成了大雅之美(The Concinitas Project)的十篇文章。我们为读者带来这些大师对自己眼中最美方程的精彩解读。 1.指标定理 撰文 阿蒂亚爵士…

机器翻译与自动文摘评价指标 BLEU 和 ROUGE

机器翻译与自动文摘评价指标 BLEU 和 ROUGE 在机器翻译任务中,BLEU 和 ROUGE 是两个常用的评价指标,BLEU 根据精确率(Precision)衡量翻译的质量,而 ROUGE 根据召回率(Recall)衡量翻译的质量。 1.机器翻译评价指标 使用机器学习的方法生成文…

安科瑞AWT100无线数据采集通信终端

安科瑞AWT100无线数据采集通信终端 安科瑞 崔丽洁

js \d正则匹配数字失败问题记录

记录一次的正则匹配数字失败的问题 在一次开发中,需要匹配卡号,正则表达式较为复杂,想通过元字符进行简化,便由: new RegExp(^622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[01][0-9]|92[0-5])[0-9]{10,}$)变成&#xff…

EMQ的使用和介绍

首先先了解一下底层的协议: 1. MQTT MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅 (publish/subscribe)模式的"轻量级"通讯协议,该协议构建…

【盘点】百家量子企业正展露头角

光子盒研究院 量子计算是一个可能彻底改变我们在金融、材料科学、密码学和药物发现等领域解决复杂问题的方式。过去十年左右,量子计算初创公司正迅速崛起。 现在,根据光子盒的量子企业数据库,全球大约有一千家公司直接参与到量子技术中&#…

反调试技术

文章目录 前言系统API实现方式IsDebuggerPresent (0x2)NtGlobalFlag(0x68)Heap flags(0x18)CheckRemoteDebuggerPresentNtQueryInformationProcessZwSetInformationThread 示例示例1比较明文字符串和输入字符串NtGlobalFlag时间差…

支持向量机SVM的原理和python实现

文章目录 1 SVM概述1.1 概念1.2 SVM的优缺点1.2.1 优点1.2.2 缺点 2 在python中使用SVM2.1 scikit-learn库2.2 SVM在scikit-learn库中的使用2.2.1 安装依赖库2.2.2 svm.SVC2.2.3 应用实例 总结 1 SVM概述 1.1 概念 支持向量机(SVM)是一类按监督学习方式…

CRM系统如何选择?哪些是必备功能?

CRM系统可以收集、整理并分析客户数据、优化企业销售流程、实现团队协作和共享,提高客户转化率,实现业绩增长。那么,如何选择CRM系统?CRM系统哪家好? 一、明确自己的业务需求 不同行业和规模的企业有不同的业务需求&…

JMU 软件工程经济学 复习总结

文章目录 碎碎念0. 基准收益率 i1. 现金流量图2. 净现值 NPV,内部收益率 IRR3. 单利,复利计算4. 等额年金NAV5. 动态回收期 P t ′ P_t Pt′​6. 固定资产折旧 [书P44]7. 增值税8. 软件行业增值税的即征即退9. 利息备付率 ICR,偿债备付率 DSC…

这6种最佳移动自动化测试工具你知道吗?

最好的移动自动化测试工具 在本文章关于移动应用程序测试的这一部分中,我们将研究 2023 年 6 种最佳移动自动化测试工具。 1、Appium Appium 是一个非常流行的开源自动化测试框架,支持各种操作系统的自动化。它可以与本机、混合和移动 Web 应用程序一…

微机原理基础知识

前言 微机原理期末复习的一些概念性的基础知识总结。 内容 (1)微处理器、微机与微机系统三者之间有什么异同? (1)把CPU(运算器和控制器)用大规模集成电路技术做在一个芯片上,即为微…

Vue实现Base64转png、jpg

method中写两个方法: 根据base64转图片的方法 根据转换出blob格式的文件导出的方法 //base64转pngbase64ImgtoFile(dataurl, filename file) {const arr dataurl.split(,)const mime arr[0].match(/:(.*?);/)[1]const suffix mime.split(/)[1]const bstr a…

Windows安装postgresql数据库图文教程

数据库使用排行榜:https://db-engines.com/en/ranking 目录 一、软件简介 二、软件下载 三、安装教程 四、启动教程 一、软件简介 PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计…

Python采集二手房源数据信息并做可视化展示

目录标题 前言环境使用:模块使用:python技术实现: <基本流程步骤>代码展示尾语 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 环境使用: Python 3.8 jupyter --> pip install jupyter notebook pycharm 也可以 模块使用: requests >>> pip instal…

【MySQL 数据查询】:提高查询的效率

前言 ✨欢迎来到小K的MySQL专栏&#xff0c;本节将为大家带来MySQL数据查询的讲解&#xff08;基本、分组、排序、聚合、分页、条件查询&#xff09; 目录 前言一、基本查询二、条件查询三、聚合函数(统计函数)四、分组查询五、排序查询五、分页查询六、总结 一、基本查询 MySQ…

2020年CSP-J认证 CCF非专业级别软件能力认证第一轮真题--阅读程序题

2020 CCF认证第一轮&#xff08;CSP-J&#xff09;真题 二、阅读程序题 (程序输入不超过数组或字符串定义的范围&#xff0c;判断题正确填√错误填X;除特殊说明外&#xff0c;判断题 1.5分&#xff0c;选择题3分&#xff0c;共计4 分) 第一题 01 #include <cstdlib> …

Java调优

Java调优 Java 性能调优不像是学一门编程语言&#xff0c;无法通过直线式的思维来掌握和应用&#xff0c;它对于工程师的技术广度和深度都有着较高的要求。 互联网时代&#xff0c;一个简单的系统就囊括了应用程序、数据库、容器、操作系统、网络等技术&#xff0c;线上一旦出…