『玩转Streamlit』--表单Form
在Streamlit
中,Form
组件是一种特殊的UI元素,允许用户输入数据而不立即触发应用的重新运行。
这对于创建需要用户输入多个参数后再进行处理的交互式表单非常有用。
1. 概要
Form
组件的主要作用是在一个表单内集中处理多个用户输入,使得数据收集和验证更加高效和直观。
通过Form
组件,开发者可以创建包含多个输入控件(如文本输入框、下拉选择框等)的表单,用户可以在表单内一次性填写所有必要的信息,然后提交。
这避免了传统表单提交时每次输入都会触发页面刷新的问题,从而提高了用户体验和应用的交互性。
根据Form
组件的特点,在类似下面这些场景中,我们可以考虑使用Form
:
- 用户注册与登录:通过
Form
组件构建一个包含用户名、密码、邮箱等多个输入组件,以及一个提交按钮的页面,并在用户点击提交按钮后才开始进行验证和处理。 - 数据查询与筛选:通过
Form
组件可以包含多个选择框、输入框等组件,用于收集用户的查询或筛选条件。 - 参数配置与设置:在构建复杂的Web应用程序时,可能需要用户配置或设置一些参数,这些参数可能包括算法参数、界面样式等。通过
Form
组件,可以集中展示和配置这些参数。 - 多步骤表单处理:通过
Form
组件,开发者可以创建包含多个步骤的表单,并在用户完成每个步骤后收集相应的数据。 - 动态表单生成:在某些高级应用场景中,可能需要根据用户的选择或输入动态生成表单。例如,在构建在线问卷时,可能需要根据用户的选择展示不同的问题。
总之,Streamlit
的Form
组件在很多应用场景中都发挥着重要作用,特别是在需要收集和处理多个用户输入的场景中表现尤为突出。
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 = None
if 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. 总结
总的来说,Streamlit
的Form
组件能够帮助我们简化表单的创建和数据收集的过程,使我们能够轻松构建具有复杂交互功能的数据应用。
『玩转Streamlit』--表单Form的更多相关文章
- 来玩Play框架04 表单
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 表单(form)是最常见的从客户往服务器传递数据的方式.Play框架提供了一些工具 ...
- HTML ------ 关于表单 Form
Form(表单)主要用于采集和提交用户输入的信息,是页面与WEB服务器交互过程中 最重要的信息来源. 掌握表单(Form)有以下几个要点: 重要form属性 form常用控件 form提交方式 § 重 ...
- Bootstrap~表单Form
回到目录 在进行自己的后台改版时,大体布局都使用了bootstrap,剩下的表单部分没理由不去使用它,对于表单的美化和布局,bootstrap做的也是很不错的,有大气的边框,多功能的按钮及宏观的表单布 ...
- 表单 - Form - EasyUI提供的表单异步提交
方案一 被提交的表单 <form id="loginForm" method="post"> <table align="cente ...
- 跟服务器交互的Web表单(form)
使用HTML来构建可以跟服务器交互的Web表单(form),通过给你的form元素添加一个action属性来达到此目的. action属性的值指定了表单提交到服务器的地址. 例如: <form ...
- 3、网页制作Dreamweaver(表单form)
表单form (虚线不显示) 1.写法: <form id="form1" name="form1" method="post" ac ...
- DHTMLX 前端框架 建立你的一个应用程序 教程(九)--绑定表单Form到表格Grrid中
绑定表单Form到表格Grrid中 现在我们需要选中一行表格数据的时候 数据能在表单中显示出来 我们可以使用DHTMLX 丰富的组件功能实现它. 绑定表单到表格 1.调用bind方法将表单绑定到网格, ...
- DHTMLX 前端框架 建立你的一个应用程序 教程(八)-- 添加表单Form
添加表单Form 我们下一步是在页面中添加一个表单,表格中的选中字段将会显示在表单中.提供一个提交按钮 可以对显示的数据进行修改提交. 添加表单到布局单元格中 1.在右侧布局中使用attachForm ...
- 微信小程序基础之表单Form的使用
表单Form的应用很广泛,我们可以利用form设计登录注册,也可以设计一种答题问卷的形式,今天主要讲一下form的使用 form表单,将组件内输入的"switch","i ...
- HTML(七)HTML 表单(form元素介绍,input元素的常用type类型,input元素的常用属性)
前言 表单是网页与用户的交互工具,由一个<form>元素作为容器构成,封装其他任何数量的表单控件,还有其他任何<body>元素里可用的标签 表单能够包含<input> ...
随机推荐
- 十五,Spring Boot 整合连接数据库(详细配置)
十五,Spring Boot 整合连接数据库(详细配置) @ 目录 十五,Spring Boot 整合连接数据库(详细配置) 最后: JDBC + HikariDataSource(Spring Bo ...
- Java SE 23 新增特性
Java SE 23 新增特性 作者:Grey 原文地址: 博客园:Java SE 23 新增特性 CSDN:Java SE 23 新增特性 源码 源仓库: Github:java_new_featu ...
- 微信小程序开发疑难
1.开发者工具在小程序webview中注入wx时会提示token过期,但真机正常
- ZRAM的Swap功能和 SWAP分区有什么区别
ZRAM(压缩内存块设备)和传统的SWAP分区都是Linux系统中用来增加可用内存的方法,但它们的工作原理和实现方式有很大的区别: ZRAM 压缩内存:ZRAM使用压缩算法将数据存储在内存中.这样,当 ...
- Android Systrace 基础知识 -- Why 60 fps ?
1.正文 今天来讲一下为何我们讲到流畅度,要首先说 60 帧. 我们先来理一下基本的概念: 60 fps 的意思是说,画面每秒更新 60 次 这 60 次更新,是要均匀更新的,不是说一会快,一会慢,那 ...
- ts 的 declare 用途
declare namespace API { /** 新增数据集合 */ type CreateDataSet = { createdAt: string; dname: string; headI ...
- 16 Transformer 的编码器(Encodes)——我在做更优秀的词向量
博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...
- 一次彻底讲清如何处理mysql 的死锁问题
MySQL 死锁 是指两个或多个事务互相等待对方持有的锁,从而导致所有事务都无法继续执行的现象.在 InnoDB 存储引擎中,死锁是通过锁机制产生的,特别是在并发较高.业务逻辑复杂的情况下,更容易发生 ...
- 24个希腊字母与 Tex 表示
大写 小写 英文 中文 Α α Alpha 阿尔法 Β β Beta 贝塔 Γ γ Gamma 伽马 Δ δ Delta 德尔塔 Ε ε Epsilon 艾普西隆 Ζ ζ Zeta 泽塔 Η η Et ...
- 工作中的技术总结_ thymeleaf的应用 _select&input的数据回显 _20210910
工作中的技术总结_ thymeleaf的应用 _select&input的数据回显 _20210910 在需要用户输入的场合,常常会有对用户填入数据的验证,对数据的验证不通过则需要返回到表单页 ...