Streamlit (python构建web)之基础概念(上)

目录

前言

1.准备工作

1.1 如何配置python环境

 1.2 调出运行代码窗口

2. Streamlit基础概念

2.1 Streamlit的命令启动使用

2.1.1 运行方式一

2.1.2 运行方式二

2.2. 开发流程

2.3 数据流

2.4 数据展示与样式

2.4.1 使用魔法命令¶

2.4.2 写入数据帧

2.4.3 为什么不会一直使用st.write()?

2.4.4 小例子


 

前言

        为了进一步使用streamlit进行安全开发,通过对streamlit的中文文档进行学习,通过博文对自己学习和过程中的笔记以及遇到的问题进行记录

        在进行学习之前,因之前常用PyCharm进行python的编写,但是编写此类web应用的时候感觉过于繁琐与不便,因此就用vscode来做替代吧

1.准备工作

1.1 如何配置python环境

        在vscode中搜索扩展python,找到如图所示的第一个,安装成功后,按照提示或者自行重启vscode

         新建一个.py文件,然后输入下面的代码,点击如图所示的运行按钮,或是右键然后点击Run code进行运行代码

 1.2 调出运行代码窗口

        这里注意安装如下图所示,运行命令就不用每次重新打开命令窗口了,当然我这里使用了powershell(管理员界面) 

        如果没有使用的话,建议可以打开前通过右键软件,然后以管理员身份运行,当然,也可以在属性中的兼容性中,将其调为一直为管理员打开,具体可以直接搜索教程,很简单,这样不管是安装第三方还是使用命令,报错也会大大减少

2. Streamlit基础概念

2.1 Streamlit的命令启动使用

2.1.1 运行方式一

        Streamlit的使用非常直观。首先,在一个标准的Python脚本中嵌入几个Streamlit命令,然后通过命令streamlit run来启动它: 

streamlit run 你的脚本.py [-- 脚本参数]

        按照上面的方式运行脚本后,一个本地的Streamlit服务器随即启动,你的应用程序将在默认网页浏览器的新标签页中打开。这个应用程序如同一块画布,你可以在上面绘制图表、文本、小部件、表格等元素。

        在应用中展示的内容完全由你决定。例如,st.write用于向应用直接写入原始文本,下面用第一个实例来进行演示,创建你的第一个 Streamlit 应用

        st.write用于向页面直接写入数据,类似于文件写入中的 python中的f.write()是写入文件中,这个是写在web页面的,如果懂java的话,就是response.getWriter() 获得到的对象 ,然后用out来代表对象  out.write("Hello world")在web页面写入数据

import streamlit as st # type: ignore
st.write("Hello World") # 向页面写入数据
streamlit run demo01.py # 后面是你的py脚本名

        其中的# type: ignore是用来忽略警告的,因为vscode无法识别到这个安装在全局的库,直接忽略或者不用管,并不应响代码的使用 

 在弹出的浏览器窗口中可以看到

2.1.2 运行方式二

下面是开发文档中的一些内容,但是根据我来看开发文档出现了错误,应该是在一个破折号后,

        当你向脚本传递自定义参数时,这些参数必须放在一个破折号之后。否则,这些参数会被解释为Streamlit本身的参数。

        但是我感觉另一种方式不如在vscode或是IDE的终端中运行,毕竟还是少敲一点单词

        另一种运行Streamlit的方法是将其作为Python模块来运行。这对于配置像PyCharm这样的IDE以支持Streamlit非常有用:

# 运行方式
python -m streamlit run 你的脚本.py

# 这等同于:
streamlit run 你的脚本.py

你还可以向streamlit run传递URL!这在结合GitHub Gist时尤为有用。例如:

streamlit run https://raw.githubusercontent.com/streamlit/demo-uber-nyc-pickups/master/streamlit_app.py

                下面是开发文档一大堆文字,我对每个部分总结一段话,并进行介绍

2.2. 开发流程

      ,通俗来说就是,类似与Vite管理Vue应用类似,但是不是自动实时更新,而是保存后,会提醒你要改动"你是否更改并运行",基本上也算实时,意味着提高了开发效率,对我来说目前应用与win,和linux无关后面的问题对我来说不用关注了.

        当更新应用时,只需保存源文件,系统会检测到变化并提示重新运行。选择"始终重新运行"可实现代码更改后的自动更新。这种快速迭代的工作方式,结合编辑器和浏览器的并排布局,提高了开发效率。注意,自1.10.0版本起,应用不能从Linux根目录运行,以避免权限问题和错误。使用Docker时,应通过WORKDIR指定主脚本的正确目录。

2.3 数据流

        对于修改代码和进行组件互动时就会重新运行整个代码,这个可以根据Streamlit应用的刚开始的输入   streamlit hello 测试中的动画演示来理解  ,更改其中的参数,代码便会重新运行,对于重复的高强度的运算,可以通过缓存等进行跳过重复运算

        Streamlit应用的架构通过重新运行整个Python脚本来更新屏幕上的内容,这在源代码修改或用户与小部件互动时都会发生。回调函数在脚本其余部分之前运行,而Streamlit通过@st.cache_data装饰器等机制在后台优化性能,允许跳过重复的高成本计算,确保应用的快速和无缝体验。

2.4 数据展示与样式

下面是文档中的一些实例,可以快速帮助我们熟悉Streamlit应用的一些基本语法和处理,当然基本上还是一写第三方库的使用,熟悉的话学起来就很简单了      

        在Streamlit应用中,有几种展示数据(如表格、数组、数据帧)的方法。下面将介绍魔法命令(magic)和st.write(),它们可以用来书写从文本到表格的任何内容。之后,我们将探讨专为数据可视化设计的方法。

2.4.1 使用魔法命令

        你也可以不调用任何Streamlit方法来向应用写入内容。Streamlit支持所谓的“魔法命令”,这意味着你不必使用st.write()。下面的代码段展示了这一点:

下面就是使用了pandas库,进行了创建了表格,其中按照json格式或是叫python中的字典格式也行

"""
# 我的第一个应用
这是我们首次尝试使用数据创建表格:
"""

import streamlit as st # type: ignore # 
import pandas as pd # type: ignore
df = pd.DataFrame({
  '第一列': [1, 2, 3, 4],
  '第二列': [10, 20, 30, 40]
})

df

        每当Streamlit看到一个变量或字面值独立成行时,它就会自动使用st.write()将内容写入你的应用。想了解更多,请参考magic命令的文档。 

2.4.2 写入数据帧

        除了魔法命令,st.write()是Streamlit的“瑞士军刀”。几乎任何内容都可以传递给st.write():文本、数据、Matplotlib图形、Altair图表等等。放心,Streamlit会识别并正确渲染这些内容。

代码基本和上面一致,但是是通过st.write()进行写入到web页面的

import streamlit as st
import pandas as pd

st.write("这是我们首次尝试使用数据创建表格:")
st.write(pd.DataFrame({
    '第一列': [1, 2, 3, 4],
    '第二列': [10, 20, 30, 40]
}))

2.4.3 为什么不会一直使用st.write()

有几个原因:

  1. 魔法 和 st.write() 会检查你传递的数据类型,然后决定如何最好地在应用中呈现它。有时你可能想要用另一种方式展示。例如,与其将数据框作为交互式表格绘制,你可能希望通过使用 st.table(df) 将其绘制为静态表格。
  2. 第二个原因是,其他方法返回的对象可以被使用和修改,无论是通过向其添加数据还是替换数据。
  3. 最后,如果你使用了更具体的Streamlit方法,你可以传递额外的参数来自定义它的行为。

2.4.4 小例子

        创建一个数据框并使用Pandas的Styler对象改变其格式。在这个例子中,使用Numpy第三方库生成随机样本,并使用st.dataframe()方法绘制一个交互式表格

  其中 np.random.randn(10, 20) 生成了一个包含 10 行和 20 列的二维数组,数组中的数值来自标准正态分布(均值为 0,标准差为 1)。

import streamlit as st # type: ignore # 
import numpy as np # type: ignore # 

dataframe = np.random.randn(10, 20)
st.dataframe(dataframe)

        让我们基于第一个例子进一步操作,使用Pandas的Styler对象来突出显示交互式表格中的某些元素。 

        其中数据的创建还是使用numpy库的方法进行创建.其中通过columns=('列%d' % i for i in range(20))设置数据框的列名为“列0”到“列19”。  看不懂的话,其中for循环使用的列表推导式,之前我有写过列表推导式的使用,感兴趣的话可以看看,然后就是使用了占位符将列表推导式,也就是每次循环的数据,在每一列进行展示.

        其中dataframe.style.highlight_max(axis=0)Pandas的一个方法链,用于给数据框添加样式。这里highlight_max函数用于突出显示每一列中的最大值。参数axis=0指定了函数是沿着列的方向(垂直方向)查找最大值

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

dataframe = pd.DataFrame(
    np.random.randn(10, 20),
    columns=('列%d' % i for i in range(20)))

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

Streamlit还提供了一个生成静态表格的方法:st.table()

import streamlit as st # type: ignore # 
import numpy as np # type: ignore # 
import pandas as pd # type: ignore # 

dataframe = pd.DataFrame(
    np.random.randn(10, 20),
    columns=('列%d' % i for i in range(20)))
st.table(dataframe)

 

  • 27
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XError_xiaoyu

你的支持,使我更好的创作

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值