IT评测·应用市场-qidao123.com

标题: 『玩转Streamlit』--表单Form [打印本页]

作者: 诗林    时间: 2024-12-4 11:54
标题: 『玩转Streamlit』--表单Form
在Streamlit中,Form组件是一种特殊的UI元素,允许用户输入数据而不立刻触发应用的重新运行。
这对于创建需要用户输入多个参数后再进行处置惩罚的交互式表单非常有用。
1. 概要

Form组件的重要作用是在一个表单内集中处置惩罚多个用户输入,使得数据网络和验证更加高效和直观。
通过Form组件,开发者可以创建包罗多个输入控件(如文本输入框、下拉选择框等)的表单,用户可以在表单内一次性填写所有必要的信息,然后提交。
这避免了传统表单提交时每次输入都会触发页面刷新的标题,从而进步了用户体验和应用的交互性。
根据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企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4