首页 > 其他分享 >『玩转Streamlit』--表单Form

『玩转Streamlit』--表单Form

时间:2024-12-04 12:21:53浏览次数:4  
标签:Form -- 表单 组件 Streamlit st data method

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组件能够帮助我们简化表单的创建和数据收集的过程,使我们能够轻松构建具有复杂交互功能的数据应用。

标签:Form,--,表单,组件,Streamlit,st,data,method
From: https://www.cnblogs.com/wang_yb/p/18585991

相关文章

  • 人形机器人 —— IsaacManipulator
    标题建议,例如:英伟达IsaacManipulator产品体验运行的商品名称产品名称及版本:IsaacManipulator版本信息及相关配置:运行的过程记录【GPU加速任务】请描述您在使用IsaacManipulator时,调用cuMotion加速库来进行机器人运动规划和轨迹优化等任务的步骤和过程,并记录任务......
  • V1 Cyberpunk Edgerunners
    \(“Whether\I've\let\you\down...my\love...”\)这是一个全新的时代,却也是一个悲剧的时代。It'sanewera,butatragicera.赛博朋克,1983年,一个名叫威廉吉布森的少年,在打字机前敲出霓虹灯与混沌的新世界。Cyberpunk,anewculturearisenfromayoungmannamed......
  • 腾讯通RTX低成本升级方案,支持Linux内核系统及移动端
    一、腾讯通RTX继续使用的难题自腾讯通RTX停止更新并下架官网以来,用户无法再获取技术支持和资源下载。同时,产品在实际使用中还面临以下突出问题:●不兼容国产系统及移动端:腾讯通RTX仅支持Windows和Mac系统,不支持统信UOS、银河麒麟等Linux内核国产操作系统,以及移动端设备(Android和......
  • linux中安装多个python版本环境
    一、更新系统软件包yumupdate-y 二、安装软件管理包和可能使用的依赖yum-ygroupinstall"Developmenttools"yuminstallopenssl-develbzip2-develexpat-develgdbm-develreadline-develsqlite-devel 三、下载Pyhton3到/usr/local目录https://www.python......
  • docker安装SqlServer2019
    使用dockercompose部署资源清单文件services:sqlserver-2019:restart:alwayscontainer_name:sqlserverimage:mcr.microsoft.com/mssql/server:2019-latestuser:root#端口映射ports:-1433:1433volumes:-./mssql:/var......
  • netboot ipxe 源码
     来自:https://www.egg0.com/show/19831.html    最近,正在学习iPXE源码,于是开始各种Google查找iPXE的资料进行学习。以下就是学习过程中一些感觉比较重要的点,特此记录,以备后续查阅。起源  上世纪90年代初,网卡开始在其扩展卡上包含启动ROM,每个扩展卡都遵循......
  • Expert电子实验室--嵌入式多功能调试器Exlink硬件分析
    哈哈,容我介绍一下,如果大家对电子感兴趣,可以看一下下面的图片,会经常更新优秀的原创文章。再次感谢每一个努力的电子爱好者。1前言开源链接:Exlink最好用的嵌入式多功能调试器大家好呀,在浏览网站的时候,突然看到这样的一个作品,瞬间眼前一亮。这个项目是Expert电子实验室设计的。......
  • 校园失物招领借助 SpringBoot:塑造校园互助寻物新风尚
    3系统分析3.1可行性分析开发者在进行开发系统之前,都需要进行可行性分析,保证该系统能够被成功开发出来。3.1.1技术可行性开发该校园失物招领系统所采用的技术是vue和MYSQL数据库。计算机专业的学生在学校期间已经比较系统的学习了很多编程方面的知识,同时也接触了很多编程......
  • SpringBoot 构建校园失物招领信息化系统:加速失物招领进程
    2系统开发环境2.1vue技术Vue(读音/vjuː/,类似于view)是一套用于构建用户界面的渐进式JavaScript框架。[5]与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工......
  • 这些省市外资公司也可以申请ICP许可证了。
    对ICP经营许可证申请有一定了解的朋友肯定知道,ICP经营许可证的申请条件其中之一就是“申请公司无外资控股”。而随着上半年工信部发布《工业和信息化部关于开展增值电信业务扩大对外开放试点工作的通告》,以及近期各试点“正式开启试点工作”,外资企业也能申请ICP许可证了。当然,......