『玩转Streamlit』--表单Form

诗林  金牌会员 | 2024-12-4 11:54:13 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 581|帖子 581|积分 1743

在Streamlit中,Form组件是一种特殊的UI元素,允许用户输入数据而不立刻触发应用的重新运行。
这对于创建需要用户输入多个参数后再进行处置惩罚的交互式表单非常有用。
1. 概要

Form组件的重要作用是在一个表单内集中处置惩罚多个用户输入,使得数据网络和验证更加高效和直观。
通过Form组件,开发者可以创建包罗多个输入控件(如文本输入框、下拉选择框等)的表单,用户可以在表单内一次性填写所有必要的信息,然后提交。
这避免了传统表单提交时每次输入都会触发页面刷新的标题,从而进步了用户体验和应用的交互性。
根据Form组件的特点,在雷同下面这些场景中,我们可以考虑使用Form:

  • 用户注册与登录:通过Form组件构建一个包罗用户名、密码、邮箱等多个输入组件,以及一个提交按钮的页面,并在用户点击提交按钮后才开始进行验证和处置惩罚。
  • 数据查询与筛选:通过Form组件可以包罗多个选择框、输入框等组件,用于网络用户的查询或筛选条件。
  • 参数设置与设置:在构建复杂的Web应用程序时,大概需要用户设置或设置一些参数,这些参数大概包罗算法参数、界面样式等。通过Form组件,可以集中展示和设置这些参数。
  • 多步调表单处置惩罚:通过Form组件,开发者可以创建包罗多个步调的表单,并在用户完成每个步调后网络相应的数据。
  • 动态表单生成:在某些高级应用场景中,大概需要根据用户的选择或输入动态生成表单。例如,在构建在线问卷时,大概需要根据用户的选择展示不同的标题。
总之,Streamlit的Form组件在很多应用场景中都发挥着紧张作用,特别是在需要网络和处置惩罚多个用户输入的场景中表现尤为突出。
2. 重要参数

Form组件的参数很简朴,重要用来简朴的控制样式和提交的行为。
名称范例说明keystr组件名称,具有唯一性clear_on_submitbool用户提交后,表单内的所有组件是否都重置为默认值enter_to_submitbool当用户在与表单内的组件交互时,按Enter键时是否提交表单borderbool是否在窗体周围显示边框Form组件本身并不直接接受各种组件来作为参数,但表单内部可以包罗多种输入组件,如文本框(st.text_input)、选择框(st.selectbox)、滑块(st.slider)等。
别的,Form组件需要配合st.form_submit_button来创建一个提交按钮。
3. 使用示例

下面通过一些根据实际场景来简化的示例,演示Form组件的使用方式。
3.1. 数据预处置惩罚参数设置

在数据分析或呆板学习项目中,数据预处置惩罚是一个关键步调。
我们可以使用Form组件来让用户选择数据预处置惩罚的参数,如缺失值处置惩罚方法和特征缩放方法。
  1. import streamlit as st
  2. import pandas as pd
  3. from sklearn.preprocessing import StandardScaler, MinMaxScaler
  4. # 加载示例数据集
  5. data = pd.DataFrame(
  6.     {"feature1": [1, 2, None, 4, 5], "feature2": [10, 20, 30, None, 50]}
  7. )
  8. # 定义表单提交后的回调函数
  9. def preprocess_data(fill_method, scale_method):
  10.     if fill_method == "mean":
  11.         data.fillna(data.mean(), inplace=True)
  12.     elif fill_method == "median":
  13.         data.fillna(data.median(), inplace=True)
  14.     else:
  15.         data.dropna(inplace=True)
  16.     if scale_method == "standard":
  17.         scaler = StandardScaler()
  18.     elif scale_method == "minmax":
  19.         scaler = MinMaxScaler()
  20.     else:
  21.         scaler = None
  22.     if scaler:
  23.         data_scaled = pd.DataFrame(
  24.             scaler.fit_transform(data),
  25.             columns=data.columns,
  26.         )
  27.         st.write(data_scaled)
  28.     else:
  29.         st.write(data)
  30. # 创建表单
  31. with st.form(key="preprocess_form"):
  32.     fill_method = st.selectbox(label="缺失值处理", options=["mean", "median", "drop"])
  33.     scale_method = st.selectbox(
  34.         label="特征缩放", options=["standard", "minmax", "none"]
  35.     )
  36.     submitted = st.form_submit_button(label="提交")
  37.     if submitted:
  38.         preprocess_data(fill_method, scale_method)
复制代码
运行效果如下,【提交】按钮点击后才会刷新页面。

3.2. 呆板学习模型超参数调优

在训练呆板学习模型时,超参数的选择对模型性能有很大影响。
我们可以使用Form组件来让用户选择模型的超参数,并展示模型在验证集上的性能。
  1. import streamlit as st
  2. from sklearn.datasets import load_iris
  3. from sklearn.model_selection import train_test_split
  4. from sklearn.ensemble import RandomForestClassifier
  5. from sklearn.metrics import accuracy_score
  6. # 加载示例数据集
  7. data = load_iris()
  8. X, y = data.data, data.target
  9. X_train, X_val, y_train, y_val = train_test_split(
  10.     X,
  11.     y,
  12.     test_size=0.2,
  13.     random_state=42,
  14. )
  15. # 定义表单提交后的回调函数
  16. def train_model(n_estimators, max_depth):
  17.     model = RandomForestClassifier(
  18.         n_estimators=n_estimators,
  19.         max_depth=max_depth,
  20.         random_state=42,
  21.     )
  22.     model.fit(X_train, y_train)
  23.     y_pred = model.predict(X_val)
  24.     accuracy = accuracy_score(y_val, y_pred)
  25.     st.write(f"准确率: {accuracy:.2f}")
  26. # 创建表单
  27. with st.form(key="model_form"):
  28.     n_estimators = st.number_input(
  29.         label="Estimators 数量",
  30.         min_value=10,
  31.         max_value=200,
  32.         step=10,
  33.         value=100,
  34.     )
  35.     max_depth = st.number_input(
  36.         label="最大深度",
  37.         min_value=1,
  38.         max_value=20,
  39.         step=1,
  40.         value=10,
  41.     )
  42.     submitted = st.form_submit_button(label="开始训练")
  43.     if submitted:
  44.         train_model(n_estimators, max_depth)
复制代码
运行界面如下,点击【开始训练】按钮后显示训练后模型的准确率。

4. 总结

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

诗林

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表