『玩转Streamlit』--表单Form

news/2024/12/4 12:13:17/文章来源:https://www.cnblogs.com/wang_yb/p/18585991

Streamlit中,Form组件是一种特殊的UI元素,允许用户输入数据而不立即触发应用的重新运行。

这对于创建需要用户输入多个参数后再进行处理的交互式表单非常有用。

1. 概要

Form组件的主要作用是在一个表单内集中处理多个用户输入,使得数据收集和验证更加高效和直观。

通过Form组件,开发者可以创建包含多个输入控件(如文本输入框、下拉选择框等)的表单,用户可以在表单内一次性填写所有必要的信息,然后提交。

这避免了传统表单提交时每次输入都会触发页面刷新的问题,从而提高了用户体验和应用的交互性。

根据Form组件的特点,在类似下面这些场景中,我们可以考虑使用Form

  1. 用户注册与登录:通过Form组件构建一个包含用户名、密码、邮箱等多个输入组件,以及一个提交按钮的页面,并在用户点击提交按钮后才开始进行验证和处理。
  2. 数据查询与筛选:通过Form组件可以包含多个选择框、输入框等组件,用于收集用户的查询或筛选条件。
  3. 参数配置与设置:在构建复杂的Web应用程序时,可能需要用户配置或设置一些参数,这些参数可能包括算法参数、界面样式等。通过Form组件,可以集中展示和配置这些参数。
  4. 多步骤表单处理:通过Form组件,开发者可以创建包含多个步骤的表单,并在用户完成每个步骤后收集相应的数据。
  5. 动态表单生成:在某些高级应用场景中,可能需要根据用户的选择或输入动态生成表单。例如,在构建在线问卷时,可能需要根据用户的选择展示不同的问题。

总之,StreamlitForm组件在很多应用场景中都发挥着重要作用,特别是在需要收集和处理多个用户输入的场景中表现尤为突出。

2. 主要参数

Form组件的参数很简单,主要用来简单的控制样式和提交的行为。

名称 类型 说明
key str 组件名称,具有唯一性
clear_on_submit bool 用户提交后,表单内的所有组件是否都重置为默认值
enter_to_submit bool 当用户在与表单内的组件交互时,按Enter键时是否提交表单
border bool 是否在窗体周围显示边框

Form组件本身并不直接接受各种组件来作为参数,但表单内部可以包含多种输入组件,如文本框(st.text_input)、选择框(st.selectbox)、滑块(st.slider)等。

此外,Form组件需要配合st.form_submit_button来创建一个提交按钮。

3. 使用示例

下面通过一些根据实际场景来简化的示例,演示Form组件的使用方式。

3.1. 数据预处理参数设置

在数据分析或机器学习项目中,数据预处理是一个关键步骤。

我们可以使用Form组件来让用户选择数据预处理的参数,如缺失值处理方法和特征缩放方法。

import streamlit as st
import pandas as pd
from sklearn.preprocessing import StandardScaler, MinMaxScaler# 加载示例数据集
data = pd.DataFrame({"feature1": [1, 2, None, 4, 5], "feature2": [10, 20, 30, None, 50]}
)# 定义表单提交后的回调函数
def preprocess_data(fill_method, scale_method):if fill_method == "mean":data.fillna(data.mean(), inplace=True)elif fill_method == "median":data.fillna(data.median(), inplace=True)else:data.dropna(inplace=True)if scale_method == "standard":scaler = StandardScaler()elif scale_method == "minmax":scaler = MinMaxScaler()else:scaler = Noneif scaler:data_scaled = pd.DataFrame(scaler.fit_transform(data),columns=data.columns,)st.write(data_scaled)else:st.write(data)# 创建表单
with st.form(key="preprocess_form"):fill_method = st.selectbox(label="缺失值处理", options=["mean", "median", "drop"])scale_method = st.selectbox(label="特征缩放", options=["standard", "minmax", "none"])submitted = st.form_submit_button(label="提交")if submitted:preprocess_data(fill_method, scale_method)

运行效果如下,【提交】按钮点击后才会刷新页面。

3.2. 机器学习模型超参数调优

在训练机器学习模型时,超参数的选择对模型性能有很大影响。

我们可以使用Form组件来让用户选择模型的超参数,并展示模型在验证集上的性能。

import streamlit as st
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score# 加载示例数据集
data = load_iris()
X, y = data.data, data.target
X_train, X_val, y_train, y_val = train_test_split(X,y,test_size=0.2,random_state=42,
)# 定义表单提交后的回调函数
def train_model(n_estimators, max_depth):model = RandomForestClassifier(n_estimators=n_estimators,max_depth=max_depth,random_state=42,)model.fit(X_train, y_train)y_pred = model.predict(X_val)accuracy = accuracy_score(y_val, y_pred)st.write(f"准确率: {accuracy:.2f}")# 创建表单
with st.form(key="model_form"):n_estimators = st.number_input(label="Estimators 数量",min_value=10,max_value=200,step=10,value=100,)max_depth = st.number_input(label="最大深度",min_value=1,max_value=20,step=1,value=10,)submitted = st.form_submit_button(label="开始训练")if submitted:train_model(n_estimators, max_depth)

运行界面如下,点击【开始训练】按钮后显示训练后模型的准确率。

4. 总结

总的来说,StreamlitForm组件能够帮助我们简化表单的创建和数据收集的过程,使我们能够轻松构建具有复杂交互功能的数据应用。

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

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

相关文章

netboot ipxe 源码

来自: https://www.egg0.com/show/19831.html最近,正在学习 iPXE 源码,于是开始各种 Google 查找 iPXE 的资料进行学习。以下就是学习过程中一些感觉比较重要的点,特此记录,以备后续查阅。 起源上世纪 90 年代初,网卡开始在其扩展卡上包含启动 ROM,每个扩展卡都遵循自己…

Expert电子实验室--嵌入式多功能调试器Exlink硬件分析

哈哈,容我介绍一下,如果大家对电子感兴趣,可以看一下下面的图片,会经常更新优秀的原创文章。再次感谢每一个努力的电子爱好者。1 前言 开源链接:Exlink最好用的嵌入式多功能调试器 大家好呀,在浏览网站的时候,突然看到这样的一个作品,瞬间眼前一亮。这个项目是Expert电…

docker安装SqlServer2019

使用docker compose部署 资源清单文件 services:sqlserver-2019:restart: alwayscontainer_name: sqlserverimage: mcr.microsoft.com/mssql/server:2019-latestuser: root#端口映射ports:- 1433:1433volumes:- ./mssql:/var/opt/mssql#环境变量environment:- ACCEPT_EULA=Y#SA…

独立按键的扫描

独立按键的扫描电路原理分析 按键部分[以使用K9\K10\K11\K12为例]首先,将 KeyOut3 置 0 ,其他三条分路[KeyOut1、KeyOut2、KeyOut4]置1,此时, KeyOut3 分路的按键 K9\K10\K11\K12 作为 4 个独立按键处理 将此 4 个按键的状态直接送给小灯,即可控制小灯的亮灭: 按下 K9 ,此…

diffusion model 理论基础

Diffusion Model理论基础 基于最大似然的生成模型,给定一个数据集\(x_{D}\),训练使得模型最大化似然估计\(p_{\phi}(x_{D})\)模型希望学习得到关于x的概率分布,然后可以通过采样的方式生成想要的图片

LLM大模型: CV领域常见attention思路变种及其作用(二)

attention机制的效果非凡,但本身也是有缺陷的:Q*K矩阵的复杂度高达O(n^2);如果用在CV领域,还涉及到如下问题:局部性、全局性 稀疏性 多尺度问题   为了更好地把attention机制应用于CV,上述的几个问题是需要解决的!1、DilateFormer: Multi-Scale DilatedTransformer fo…

哈哈,我好像知道 Cursor 为什么叫 Cursor 了,真相竟然是。。。

最近 Cursor 太火了,到处都是 Cursor 的文章和视频。它就像一个能实时查看你代码的编程高手,可以提供建议,捕捉错误,还可以帮你重构代码。 你不用写一行代码,只需要动动嘴,它就能一顿操作猛如虎给你写一个官网、一个 Chrome 插件、一个卡密系统、一个。。。按这速度发展下…

QEMU中虚拟Linux网络配置

QEMU中虚拟Linux网络配置 baidu: 只有在ping的时候才想起我,对吗 初 刚才使用qemu测试驱动的时候,忽然发现ssh不能顺利的接入到虚拟操作系统之中,原以为是物理机资源紧张导致qemu启动变慢,结果摸鱼半天之后依然无法通过ssh访问。使用vnc接入后发现虚拟机无法上网,没有被分…

精橙FPGA,一个承接FPGA代码设计的资深工程师团队。

一、我们是谁 精橙FPGA,一个承接FPGA代码设计的资深工程师团队。 二、服务内容 面向在校学生、职场工程师等人员,提供FPGA入门指导和FPGA代码设计外包服务。 三、业务范围 主要提供Xilinx/Altera以及国产FPGA的入门指导和FPGA代码设计外包服务,包括但不限于以下内容: 3.1 F…

Vue项目访问路径加统一前缀(若依)

如果多个项目要发布至同一个域名下,或Vue项目要加项目名访问时,则可以通过域名后加统一前缀来区分及路由至指定的服务,例如同一域名下:站点A:https://www.abc.com站点B:https://www.abc.com/bbb站点B-接口API:https://www.abc.com/bbb/api Vue项目访问路径加统一前缀步骤…

ERP术语 中日英对照表

<table><tr><td>客户</td><td>Customer</td><td>得意先</td></tr><tr><td>供应商</td><td>Supplier</td><td>仕入先</td></tr><tr><td>仓库</td>&l…

2024 PyCharm安装激活使用教程 (至2099年)

Pycharm 简介 Pycharm 是一款非常强大的Python集成开发环境(IDE),由JetBrains公司开发。它提供了丰富的功能和工具,帮助开发者更高效地编写、调试和部署代码。 要求 在开始之前,请确保您的计算机满足以下系统要求:操作系统:Windows、macOS或Linux 处理器:至少1 GHz的处理器…