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 = 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. 总结

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

『玩转Streamlit』--表单Form的更多相关文章

  1. 来玩Play框架04 表单

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 表单(form)是最常见的从客户往服务器传递数据的方式.Play框架提供了一些工具 ...

  2. HTML ------ 关于表单 Form

    Form(表单)主要用于采集和提交用户输入的信息,是页面与WEB服务器交互过程中 最重要的信息来源. 掌握表单(Form)有以下几个要点: 重要form属性 form常用控件 form提交方式 § 重 ...

  3. Bootstrap~表单Form

    回到目录 在进行自己的后台改版时,大体布局都使用了bootstrap,剩下的表单部分没理由不去使用它,对于表单的美化和布局,bootstrap做的也是很不错的,有大气的边框,多功能的按钮及宏观的表单布 ...

  4. 表单 - Form - EasyUI提供的表单异步提交

    方案一 被提交的表单 <form id="loginForm" method="post"> <table align="cente ...

  5. 跟服务器交互的Web表单(form)

    使用HTML来构建可以跟服务器交互的Web表单(form),通过给你的form元素添加一个action属性来达到此目的. action属性的值指定了表单提交到服务器的地址. 例如: <form ...

  6. 3、网页制作Dreamweaver(表单form)

    表单form (虚线不显示) 1.写法: <form id="form1" name="form1" method="post" ac ...

  7. DHTMLX 前端框架 建立你的一个应用程序 教程(九)--绑定表单Form到表格Grrid中

    绑定表单Form到表格Grrid中 现在我们需要选中一行表格数据的时候 数据能在表单中显示出来 我们可以使用DHTMLX 丰富的组件功能实现它. 绑定表单到表格 1.调用bind方法将表单绑定到网格, ...

  8. DHTMLX 前端框架 建立你的一个应用程序 教程(八)-- 添加表单Form

    添加表单Form 我们下一步是在页面中添加一个表单,表格中的选中字段将会显示在表单中.提供一个提交按钮 可以对显示的数据进行修改提交. 添加表单到布局单元格中 1.在右侧布局中使用attachForm ...

  9. 微信小程序基础之表单Form的使用

    表单Form的应用很广泛,我们可以利用form设计登录注册,也可以设计一种答题问卷的形式,今天主要讲一下form的使用 form表单,将组件内输入的"switch","i ...

  10. HTML(七)HTML 表单(form元素介绍,input元素的常用type类型,input元素的常用属性)

    前言 表单是网页与用户的交互工具,由一个<form>元素作为容器构成,封装其他任何数量的表单控件,还有其他任何<body>元素里可用的标签 表单能够包含<input> ...

随机推荐

  1. SQL SEVER CDC 启动和关闭 操作说明

    什么是变更数据捕获 (CDC)? 变更数据捕获使用 SQL Server 代理记录表中发生的插入.更新及删除. 因此,它使得可以通过关系格式轻松使用这些数据更改. 将为修改的行捕获将这些更改数据应用到 ...

  2. Time Zone, Leap Year, Date Format, Epoch Time 时区, 闰年, 日期格式

    前言 以前有写过一篇了, 但很乱, 这篇就作为它的整理版吧. Leap Year 闰年 闰年是指那些有 366 天, 二月份有 29号 的年份. 比如 2020年 有 2月29日, 所以 2020 就 ...

  3. Spring —— 事务角色&&事务属性

    事务角色 事务管理员:发起事务方,在Spring中通常指代业务层开启事务的方法 事务协调员:加入事务方,在Spring中通常指代数据层方法,也可以是业务层方法       事务属性:    事务传播行 ...

  4. 邀请参与 2022 第三季度 Flutter 开发者调查

    自 Flutter 3 发布之后,我们在以移动端为中心到多平台框架的路线上稳步前行,用 Dart 2.17 的新语言特性帮助大家提升工作效率,并对核心工具进行了改进,让您在跨平台打造优秀体验时更加得心 ...

  5. 解锁Java线程池:实战技巧与陷阱规避

    专业在线打字练习网站-巧手打字通,只输出有价值的知识. 一 前言 线程池作为初学者常感困惑的一个领域,本次"巧手打字通课堂"将深入剖析其中几个最为普遍的误区.为了更清晰地阐述这些知 ...

  6. 从0到1搭建权限管理系统系列三 .net8 JWT创建Token并使用

    说明 该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发). 该系统文章,我会尽量说的非常详细,做到不管新手.老手都能看懂. 说明:OverallAuth2 ...

  7. 《Cloudera Hadoop大数据平台实战指南》代码下载

    <Cloudera Hadoop大数据平台实战指南>代码下载 本书图书资源下载地址链接:https://pan.baidu.com/s/1-P7Go5gdJLim33_Iju1rfg 提取 ...

  8. 使用Redis的好处

    性能极高--redis能支持超过100K+每秒的读写频率 丰富的数据类型--Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型 ...

  9. query和params的区别

    2者都是编程式路由跳转用来存放传递数据的位置,query使用path引入,数据显示在地址栏上,params使用name引入,传递的数据在页面看不见 :

  10. 祝贺开源之夏 2023 KubeSphere 社区项目中选学生!

    日前,开源之夏 2023 所有中选结果已出炉,在此祝贺各位中选的同学! 活动简介 开源之夏是由中科院软件所"开源软件供应链点亮计划"发起并长期支持的一项暑期开源活动,旨在鼓励在校学 ...