博主原文链接:https://www.yourmetaverse.cn/nlp/369/
构建交互式数据框架:使用Gradio的Dataframe模块
Gradio是一个功能强大且易于使用的库,可帮助您构建交互式界面和部署机器学习模型。其中的Dataframe模块为数据框架提供了一种类似于电子表格的组件,可用于接受或显示2D输入。本文将介绍Gradio的Dataframe模块及其常用方法change、input和select,帮助您了解如何使用该模块构建交互式数据框架。
Dataframe模块简介
Gradio的Dataframe模块允许用户通过类似于电子表格的界面进行数据输入和显示。它可以接受上传的电子表格数据,并将其表示为pandas.DataFrame、numpy.array、List[List]或List等数据类型。同时,它还可以将数据以电子表格的形式呈现,期望接收pandas.DataFrame、numpy.array、List[List]、List、带有"data"键(可选地还有"headers"键)的字典,或指向CSV文件的路径作为输出。
Dataframe模块的常用参数包括:
value
:默认值,作为一个二维值列表。如果是可调用对象,该函数将在应用加载时被调用,用于设置组件的初始值。headers
:字符串列表,用于指定列的标题名称。如果为None,则不显示列标题。row_count
:限制输入行数并决定用户是否可以创建新行。元组的第一个元素是一个整数,表示行数;第二个元素应为’fixed’或’dynamic’,表示新行的行为。如果传递一个整数,行数默认为’dynamic’。col_count
:限制输入列数并决定用户是否可以创建新列。元组的第一个元素是一个整数,表示列数;第二个元素应为’fixed’或’dynamic’,表示新列的行为。如果传递一个整数,列数默认为’dynamic’。datatype
:表格中值的数据类型。可以为整个表格提供单个字符串,也可以作为字符串列表按列提供。有效的数据类型包括"str"、“number”、“bool”、“date"和"markdown”。type
:组件返回的值的类型。可选值为"pandas"(pandas DataFrame)、“numpy”(numpy数组)或"array"(Python数组)。max_rows
:一次显示的最大行数。设置为None表示无限制。max_cols
:一次显示的最大列数。设置为None表示无限制。overflow_row_behaviour
:当出现溢出行时的行为。如果设置为"paginate",将创建分页以显示溢出行;如果设置为"show_ends",将显示起始和结束行,并截断中间行。label
:组件在界面中的名称。
其他可选参数包括scale
、min_width
、interactive
、visible
、elem_id
、elem_classes
和wrap
等。
示例代码
以下是一个使用Dataframe模块的示例代码:
import gradio as gr
def filter_records(records, gender):
return records[records["gender"] == gender]
demo = gr.Interface(
filter_records,
[
gr.Dataframe(
headers=["name", "age", "gender"],
datatype=["str", "number", "str"],
row_count=5,
col_count=(3, "fixed"),
),
gr.Dropdown(["M", "F", "O"]),
],
"dataframe",
description="Enter gender as 'M', 'F', or 'O' for other.",
)
if __name__ == "__main__":
demo.launch()
change方法
Dataframe模块的change
方法用于监听组件值的变化。当用户输入或函数更新导致组件值发生变化时,将触发该方法。通过调用change
方法,您可以将一个函数与Dataframe组件关联起来,并在组件值发生变化时执行相应的逻辑。
常用参数包括:
fn
:要关联的函数,通常是一个机器学习模型的预测函数。该函数的每个参数对应一个输入组件,函数应返回单个值或一个与输出组件对应的值元组。
除了fn
参数外,change
方法还支持其他参数,如inputs
、outputs
、api_name
、status_tracker
、scroll_to_output
、show_progress
、queue
、batch
、max_batch_size
、preprocess
、postprocess
、cancels
和every
等,用于定义函数的行为和触发逻辑。
input方法
Dataframe模块的input
方法用于监听用户对组件值的更改。当用户更改组件的值时,将触发该方法。通过调用input
方法,您可以将一个函数与Dataframe组件关联起来,并在用户更改组件值时执行相应的逻辑。
参数与change
方法相似,包括fn
、inputs
、outputs
、api_name
、status_tracker
、scroll_to_output
、show_progress
、queue
、batch
、max_batch_size
、preprocess
、postprocess
、cancels
和every
等。
select方法
Dataframe模块的select
方法用于监听用户选择数据框架中的单元格事件。当用户选择数据框架中的单元格时,将触发该方法。通过调用`select
`方法,您可以将一个函数与Dataframe组件关联起来,并在用户选择单元格时执行相应的逻辑。
参数与change
和input
方法类似,包括fn
、inputs
、outputs
、api_name
、status_tracker
、scroll_to_output
、show_progress
、queue
、batch
、max_batch_size
、preprocess
、postprocess
、cancels
和every
等。
参数详解
Dataframe
组件的参数
参数 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
value | list[list[Any]] | Callable | None | None | 默认值为二维值列表。如果是可调用对象,则在应用程序加载时调用该函数以设置组件的初始值。 |
headers | list[str] | None | None | 字符串头名称列表。如果为None,则不显示标题。 |
row_count | int | tuple[int, str] | (1, ‘dynamic’) | 输入的行数限制和用户是否可以创建新行。元组的第一个元素是整数,表示行数;第二个元素应为’fixed’或’dynamic’,表示新行的行为。如果传递整数,则行默认为’dynamic’。 |
col_count | int | tuple[int, str] | None | None | 输入的列数限制和用户是否可以创建新列。元组的第一个元素是整数,表示列数;第二个元素应为’fixed’或’dynamic’,表示新列的行为。如果传递整数,则列默认为’dynamic’。 |
datatype | str | list[str] | “str” | 表格中值的数据类型。可以为每个列提供字符串列表,也可以为整个表格提供单个字符串。有效的数据类型包括"str"、“number”、“bool”、“date"和"markdown”。 |
type | str | “pandas” | 组件返回的值的类型。"pandas"表示返回 pandas DataFrame,"numpy"表示返回 numpy 数组,"array"表示返回 Python 数组。 |
max_rows | int | None | 20 | 一次显示的最大行数。将其设置为 None 表示无限制。 |
max_cols | int | None | None | 一次显示的最大列数。将其设置为 None 表示无限制。 |
overflow_row_behaviour | str | “paginate” | 如果设置为"paginate",将为溢出行创建页面。如果设置为"show_ends",将显示初始行和最后一行,并截断中间行。 |
label | str | None | None | 组件在界面中的名称。 |
every | float | None | None | 如果value 是可调用对象,在客户端连接打开时每隔 every 秒运行该函数。否则没有影响。必须启用队列。可以通过此组件的 .load_event 属性访问事件(例如,取消事件)。 |
show_label | bool | True | 如果为 True,则显示标签。 |
scale | int | None | None | 相对于同一行中相邻组件的宽度比例。例如,如果组件 A 的 scale=2,组件 B 的 scale=1,则组件 A 的宽度是组件 B 的两倍。应为整数。 |
min_width | int | 160 | 最小像素宽度,如果屏幕空间不足以满足此值,则换行。如果某个 scale 值导致该组件比 min_width 更窄,则首先将尊重 min_width 参数。 |
interactive | bool | None | None | 如果为 True,则允许用户编辑数据表;如果为 False,则只能用于显示数据。如果未提供此参数,则根据组件用作输入还是输出来推断该值。 |
visible | bool | True | 如果为 False,则隐藏组件。 |
elem_id | str | None | None | 可选字符串,用作此组件在 HTML DOM 中的 id。可用于定位 CSS 样式。 |
elem_classes | list[str] | str | None | None | 可选的字符串列表,用作此组件在 HTML DOM 中的类。可用于定位 CSS 样式。 |
wrap | bool | False | 如果为 True,则文本将在适当的情况下换行,如果为 False,则表格将水平滚动。默认为 False。 |
change方法参数
参数 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
fn | Callable | None | required | 需要包装的函数,通常是机器学习模型的预测函数。函数的每个参数对应一个输入组件,函数应返回单个值或一个元组,元组的每个元素对应一个输出组件。 |
inputs | Component | list[Component] | set[Component] | None | None | 要用作输入的 gradio.components 的列表。如果函数不需要输入,则应传递一个空列表。 |
outputs | Component | list[Component] | None | None | 要用作输出的 gradio.components 的列表。如果函数不返回输出,则应传递一个空列表。 |
api_name | str | None | None | 定义此参数将在 API 文档中公开该端点。 |
status_tracker | None | None | - |
scroll_to_output | bool | False | 如果为 True,则在完成时滚动到输出组件。 |
show_progress | ‘full’ | ‘minimal’ | ‘hidden’ | “full” | 如果为 True,则在等待时显示进度动画。 |
queue | bool | None | None | 如果为 True,则将请求放入队列(如果已启用队列)。如果为 False,则不将此事件放入队列,即使已启用队列。如果为 None,则使用 gradio 应用程序的队列设置。 |
batch | bool | False | 如果为 True,则函数应处理一批输入,这意味着它应接受每个参数的输入值列表。列表的长度应相等(最多为 max_batch_size 的长度)。然后,函数必须返回一个元组的列表(即使只有一个输出组件),元组中的每个列表对应一个输出组件。 |
max_batch_size | int | 4 | 如果从队列调用此方法,最大批处理在一起的输入数量(仅当 batch=True 时才相关)。 |
preprocess | bool | True | 如果为 False,则在运行 ‘fn’ 之前不运行组件数据的预处理(例如,如果使用 Image 组件调用此方法,则保持为 base64 字符串)。 |
postprocess | bool | True | 如果为 False,则在将 ‘fn’ 的输出返回给浏览器之前不运行组件数据的后处理。 |
cancels | dict[str, Any] | list[dict[str, Any]] | None | None | 当触发此监听器时,要取消的其他事件列表。例如,设置 cancels=[click_event] 将取消 click_event,其中 click_event 是另一个组件的 .click 方法的返回值。尚未运行的函数(或正在迭代的生成器)将被取消,但当前正在运行的函数将被允许完成。 |
every | float | None | None | 在客户端连接打开时每隔 every 秒运行此事件。以秒为单位解释。必须启用队列。 |
input方法参数
参数 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
fn | Callable | None | required | 需要包装的函数,通常是机器学习模型的预测函数。函数的每个参数对应一个输入组件,函数应返回单个值或一个元组,元组的每个元素对应一个输出组件。 |
inputs | Component | list[Component] | set[Component] | None | None | 要用作输入的 gradio.components 的列表。如果函数不需要输入,则应传递一个空列表。 |
outputs | Component | list[Component] | None | None | 要用作输出的 gradio.components 的列表。如果函数不返回输出,则应传递一个空列表。 |
api_name | str | None | None | 定义此参数将在 API 文档中公开该端点。 |
status_tracker | None | None | - |
scroll_to_output | bool | False | 如果为 True,则在完成时滚动到输出组件。 |
show_progress | ‘full’ | ‘minimal’ | ‘hidden’ | “full” | 如果为 True,则在等待时显示进度动画。 |
queue | bool | None | None | 如果为 True,则将请求放入队列(如果已启用队列)。如果为 False,则不将此事件放入队列,即使已启用队列。如果为 None,则使用 gradio 应用程序的队列设置。 |
batch | bool | False | 如果为 True,则函数应处理一批输入,这意味着它应接受每个参数的输入值列表。列表的长度应相等(最多为 max_batch_size 的长度)。然后,函数必须返回一个元组的列表(即使只有一个输出组件),元组中的每个列表对应一个输出组件。 |
max_batch_size | int | 4 | 如果从队列调用此方法,最大批处理在一起的输入数量(仅当 batch=True 时才相关)。 |
preprocess | bool | True | 如果为 False,则在运行 ‘fn’ 之前不运行组件数据的预处理(例如,如果使用 Image 组件调用此方法,则保持为 base64 字符串)。 |
postprocess | bool | True | 如果为 False,则在将 ‘fn’ 的输出返回给浏览器之前不运行组件数据的后处理。 |
cancels | dict[str, Any] | list[dict[str, Any]] | None | None | 当触发此监听器时,要取消的其他事件列表。例如,设置 cancels=[click_event] 将取消 click_event,其中 click_event 是另一个组件的 .click 方法的返回值。尚未运行的函数(或正在迭代的生成器)将被取消,但当前正在运行的函数将被允许完成。 |
every | float | None | None | 在客户端连接打开时每隔 every 秒运行此事件。以秒为单位解释。必须启用队列。 |
select方法参数
参数 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
fn | Callable | None | required | 需要包装的函数,通常是机器学习模型的预测函数。函数的每个参数对应一个输入组件,函数应返回单个值或一个元组,元组的每个元素对应一个输出组件。 |
inputs | Component | list[Component] | set[Component] | None | None | 要用作输入的 gradio.components 的列表。如果函数不需要输入,则应传递一个空列表。 |
outputs | Component | list[Component] | None | None | 要用作输出的 gradio.components 的列表。如果函数不返回输出,则应传递一个空列表。 |
api_name | str | None | None | 定义此参数将在 API 文档中公开该端点。 |
status_tracker | None | None | - |
scroll_to_output | bool | False | 如果为 True,则在完成时滚动到输出组件。 |
show_progress | ‘full’ | ‘minimal’ | ‘hidden’ | “full” | 如果为 True,则在等待时显示进度动画。 |
queue | bool | None | None | 如果为 True,则将请求放入队列(如果已启用队列)。如果为 False,则不将此事件放入队列,即使已启用队列。如果为 None,则使用 gradio 应用程序的队列设置。 |
batch | bool | False | 如果为 True,则函数应处理一批输入,这意味着它应接受每个参数的输入值列表。列表的长度应相等(最多为 max_batch_size 的长度)。然后,函数必须返回一个元组的列表(即使只有一个输出组件),元组中的每个列表对应一个输出组件。 |
max_batch_size | int | 4 | 如果从队列调用此方法,最大批处理在一起的输入数量(仅当 batch=True 时才相关)。 |
preprocess | bool | True | 如果为 False,则在运行 ‘fn’ 之前不运行组件数据的预处理(例如,如果使用 Image 组件调用此方法,则保持为 base64 字符串)。 |
postprocess | bool | True | 如果为 False,则在将 ‘fn’ 的输出返回给浏览器之前不运行组件数据的后处理。 |
cancels | dict[str, Any] | list[dict[str, Any]] | None | None | 当触发此监听器时,要取消的其他事件列表。例如,设置 cancels=[click_event] 将取消 click_event,其中 click_event 是另一个组件的 .click 方法的返回值。尚未运行的函数(或正在迭代的生成器)将被取消,但当前正在运行的函数将被允许完成。 |
every | float | None | None | 在客户端连接打开时每隔 every 秒运行此事件。以秒为单位解释。必须启用队列。 |
结语
通过Gradio的Dataframe模块,您可以轻松构建交互式数据框架,使用户能够方便地输入和显示数据。通过change、input和select等方法,您可以为Dataframe组件添加监听器,实现对组件值变化的响应和相应的逻辑处理。希望本文对您理解和使用Gradio的Dataframe模块有所帮助!