bamboolib

重要

本文档已过时,将来可能不会更新。 bamboolib 已弃用。

注意

bamboolib 在 Databricks Runtime 11.3 LTS 及更高版本中受支持。

bamboolib 是一个用户界面组件,允许从 Azure Databricks 笔记本内部进行无代码数据分析和转换。 bamboolib 可帮助用户更轻松地处理其数据并加快常见的数据整理、浏览和可视化任务。 当用户使用他们的数据完成这些类型的任务时,bamboolib 会在后台自动生成 Python 代码。 用户可以与其他人共享此代码,这些人可以在自己的笔记本中运行此代码以快速重现这些原始任务。 他们还可以使用 bamboolib 通过其他数据任务扩展这些原始任务,而无需知道如何编写代码。 那些具有编码经验的人可以扩展此代码,以创建更复杂的结果。

在幕后,bamboolib 使用 ipywidgets,它是用于 Databricks 笔记本中的 IPython 内核的交互式 HTML 小组件框架。 ipywidgets 在 Databricks 笔记本中的 IPython 内核中运行。

目录

要求

快速入门

  1. 创建 Python 笔记本。

  2. 将笔记本连接到满足要求的群集。

  3. 在笔记本的第一个单元格中,输入以下代码,然后运行该单元格。 如果 bamboolib 已经安装在工作区或群集中,则跳过此步骤。

    %pip install bamboolib
    
  4. 在笔记本的第二个单元格中,输入以下代码,然后运行该单元格。

    import bamboolib as bam
    
  5. 在笔记本的第三个单元格中,输入以下代码,然后运行该单元格。

    bam
    

    注意

    或者,你可以输出现有的 pandas 数据帧,以显示 bamboolib 供该特定数据帧使用。

  6. 继续执行关键任务

演示

可以单独使用 bamboolib 或 与现有 pandas 数据帧配合使用

单独使用 bamboolib

本演练将使用 bamboolib 在笔记本中显示示例销售数据集的内容。 然后,尝试使用 bamboolib 自动生成的一些相关笔记本代码。 最后,您通过查询并排序销售数据集内容的副本来完成任务。

  1. 创建 Python 笔记本。

  2. 将笔记本连接到满足要求的群集。

  3. 在笔记本的第一个单元格中,输入以下代码,然后运行该单元格。 如果 bamboolib 已经安装在工作区或群集中,则跳过此步骤。

    %pip install bamboolib
    
  4. 在笔记本的第二个单元格中,输入以下代码,然后运行该单元格。

    import bamboolib as bam
    
  5. 在笔记本的第三个单元格中,输入以下代码,然后运行该单元格。

    bam
    
  6. 单击“加载虚拟数据”。

  7. 加载虚拟数据窗格中,对于加载用于测试 bamboolib 的虚拟数据集,请选择销售数据集

  8. 单击“执行” 。

  9. 显示所有 item_type 为“婴儿食品”的行。

    1. 在“搜索操作”列表中,选择“筛选行”。
    2. 在“筛选行”窗格中,在“选择”列表(位于“位置”上方),选择“选择行”选项。
    3. 在下面的列表中选择 item_type
    4. 在 item_type 旁边的“选择”列表中,选择“包含值”。
    5. 在“有值”旁边的“选择值”框中,选择“婴儿食品”。
    6. 单击“执行” 。
  10. 复制此查询自动生成的 Python 代码:

    1. 单击数据预览下方的“复制代码”。
  11. 粘贴和修改代码:

    1. 在笔记本的第四个单元格中粘贴所复制的代码。 应如下所示:

      import pandas as pd
      df = pd.read_csv(bam.sales_csv)
      # Step: Keep rows where item_type is one of: Baby Food
      df = df.loc[df['item_type'].isin(['Baby Food'])]
      
    2. 添加此代码,使其仅显示当 order_prio 等于 C 时的行,然后执行该单元格代码:

      import pandas as pd
      df = pd.read_csv(bam.sales_csv)
      # Step: Keep rows where item_type is one of: Baby Food
      df = df.loc[df['item_type'].isin(['Baby Food'])]
      
      # Add the following code.
      # Step: Keep rows where order_prio is one of: C
      df = df.loc[df['order_prio'].isin(['C'])]
      df
      

    提示

    除了编写此代码,您还可以在第三个单元格中通过使用 bamboolib 来实现相同的功能,即只显示 order_prio 为 C 的行。此步骤是扩展 bamboolib 之前自动生成的代码的一个示例。

  12. 按区域按升序对行进行排序:

    1. 在第四个单元格中的小组件中,在“搜索操作”列表中,选择“对行进行排序”。
    2. 在“对列进行排序”窗格中的“选择列”列表中,选择“区域”。
    3. 在“区域”旁边的列表中,选择“升序(A-Z)”。
    4. 单击“执行” 。

    注意

    这相当于自己编写以下代码:

    df = df.sort_values(by=['region'], ascending=[True])
    df
    

    您也可以仅在第三个单元格中使用 bamboolib 按区域升序对行进行排序。 此步骤演示如何使用 bamboolib 扩展你编写的代码。 使用 bamboolib 时,它会在后台自动生成其他代码,以便进一步扩展已扩展的代码!

  13. 继续执行关键任务

将 bamboolib 与现有数据帧配合使用

本演练将使用 bamboolib 在笔记本中显示 pandas 数据帧的内容。 此数据帧包含示例销售数据集的副本。 然后,尝试使用 bamboolib 自动生成的一些相关笔记本代码。 最后,查询数据帧的部分内容并对其进行排序。

  1. 创建 Python 笔记本。

  2. 将笔记本连接到满足要求的群集。

  3. 在笔记本的第一个单元格中,输入以下代码,然后运行该单元格。 如果 bamboolib 已经安装在工作区或群集中,则跳过此步骤。

    %pip install bamboolib
    
  4. 在笔记本的第二个单元格中,输入以下代码,然后运行该单元格。

    import bamboolib as bam
    
  5. 在笔记本的第三个单元格中,输入以下代码,然后运行该单元格。

    import pandas as pd
    
    df = pd.read_csv(bam.sales_csv)
    df
    

    请注意,bamboolib 仅支持 pandas 数据帧。 若要将 PySpark 数据帧转换为 pandas 数据帧,请调用 PySpark 数据帧上的 toPandas。 若要将 PySpark 数据帧上的 Pandas API 转换为 pandas 数据帧,请调用 PySpark 数据帧上 Pandas API 上的 to_pandas

  6. 单击“显示 bamboolib UI”。

  7. 显示所有 item_type 为“婴儿食品”的行。

    1. 在“搜索操作”列表中,选择“筛选行”。
    2. 在“筛选行”窗格中,在“选择”列表(位于“位置”上方),选择“选择行”选项。
    3. 在下面的列表中选择 item_type
    4. 在 item_type 旁边的“选择”列表中,选择“包含值”。
    5. 在“有值”旁边的“选择值”框中,选择“婴儿食品”。
    6. 单击“执行” 。
  8. 复制此查询自动生成的 Python 代码。 为此,请单击数据预览下方的“复制代码”。

  9. 粘贴和修改代码:

    1. 在笔记本的第四个单元格中粘贴所复制的代码。 应如下所示:

      # Step: Keep rows where item_type is one of: Baby Food
      df = df.loc[df['item_type'].isin(['Baby Food'])]
      
    2. 添加此代码,使其仅显示当 order_prio 等于 C 时的行,然后执行该单元格代码:

      # Step: Keep rows where item_type is one of: Baby Food
      df = df.loc[df['item_type'].isin(['Baby Food'])]
      
      # Add the following code.
      # Step: Keep rows where order_prio is one of: C
      df = df.loc[df['order_prio'].isin(['C'])]
      df
      

    提示

    除了编写此代码,您还可以在第三个单元格中通过使用 bamboolib 来实现相同的功能,即只显示 order_prio 为 C 的行。此步骤是扩展 bamboolib 之前自动生成的代码的一个示例。

  10. 按区域按升序对行进行排序:

    a。 在第四个单元格的控件中,单击“排序行”。

    1. 在“对列进行排序”窗格中的“选择列”列表中,选择“区域”。
    2. 在“区域”旁边的列表中,选择“升序(A-Z)”。
    3. 单击“执行” 。

    注意

    这相当于自己编写以下代码:

    df = df.sort_values(by=['region'], ascending=[True])
    df
    

    您也可以仅在第三个单元格中使用 bamboolib 按区域升序对行进行排序。 此步骤演示如何使用 bamboolib 扩展你编写的代码。 使用 bamboolib 时,它会在后台自动生成其他代码,以便进一步扩展已扩展的代码!

  11. 继续执行关键任务

关键任务

本节内容:

将小组件添加到单元格

场景:你希望 bamboolib 小组件显示在单元格中。

  1. 确保笔记本满足 bamboolib 的要求

  2. 如果 bamboolib 尚未安装在工作区或群集中,请在笔记本的单元格中运行以下代码,最好在第一个单元格中运行:

    %pip install bamboolib
    
  3. 在笔记本中运行以下代码,最好是在笔记本的第一个或第二个单元格中运行:

    import bamboolib as bam
    
  4. 选项 1:在您想显示小部件的单元格中,添加以下代码,然后运行该单元格:

    bam
    

    小组件显示在代码下方的单元格中。

    或:

    选项 2:在包含对 pandas 数据帧的引用的单元格中,打印数据帧。 例如,给定以下数据帧定义,运行该单元格:

    import pandas as pd
    from datetime import datetime, date
    
    df = pd.DataFrame({
      'a': [ 1, 2, 3 ],
      'b': [ 2., 3., 4. ],
      'c': [ 'string1', 'string2', 'string3' ],
      'd': [ date(2000, 1, 1), date(2000, 2, 1), date(2000, 3, 1) ],
      'e': [ datetime(2000, 1, 1, 12, 0), datetime(2000, 1, 2, 12, 0), datetime(2000, 1, 3, 12, 0) ]
    })
    
    df
    

    小组件显示在代码下方的单元格中。

    请注意,bamboolib 仅支持 pandas 数据帧。 若要将 PySpark 数据帧转换为 pandas 数据帧,请调用 PySpark 数据帧上的 toPandas。 若要将 PySpark 数据帧上的 Pandas API 转换为 pandas 数据帧,请调用 PySpark 数据帧上 Pandas API 上的 to_pandas

清理小组件

场景:你想要清除小组件的内容,然后将新数据读入现有小组件。

选项 1:在包含目标小组件的单元格中运行以下代码:

bam

小组件将被清除,然后重新显示如下按钮:“Databricks: 从 DBFS 中读取 CSV 文件”、“Databricks: 加载数据库表”和“加载模拟数据”按钮。

注意

如果出现此错误 name 'bam' is not defined,请在笔记本中运行以下代码(最好是在笔记本的第一个单元格中运行),然后重试:

import bamboolib as bam

选项 2:在包含对 pandas DataFrame 引用的单元格中,重新运行此单元格来打印该数据帧。 部件清除旧数据,并显示新数据。

数据加载任务

本节内容:

将示例数据集的内容读入控件

场景:你想要将一些示例数据(例如一些虚构的销售数据)读入小组件,以便测试小组件的功能。

  1. 单击“加载虚拟数据”。

    注意

    如果“加载虚拟数据”不可见,请使用选项 1 清除控件,然后重试。

  2. 在“加载虚拟数据”窗格中,对于“加载用于测试 bamboolib 的虚拟数据集”,请选择要加载的数据集的名称。

  3. 对于“数据帧名称”,输入表内容的编程标识符的名称作为数据帧,或保留 df 作为默认编程标识符。

  4. 单击“执行” 。

    小组件显示数据集的内容。

提示

您可以切换当前的小部件,以显示不同示例数据集的内容:

  1. 在当前小部件中,单击“加载虚拟数据”选项卡。
  2. 按照前面的步骤将其他示例数据集的内容读入控件。

将 CSV 文件的内容读入控件

场景:您希望将 Azure Databricks 工作区中的 CSV 文件的内容读取到控件中。

  1. 单击“Databricks: 从 DBFS 中读取 CSV 文件”。

    注意

    如果“Databricks: 从 DBFS 中读取 CSV 文件”不可见,请清除具有选项 1 的小组件,然后重试。

  2. 在“从 DBFS 中读取 CSV”窗格中,浏览到包含目标 CSV 文件的位置。

  3. 选择目标 CSV 文件。

  4. 对于“数据帧名称”,输入 CSV 文件内容的编程标识符的名称作为数据帧,或保留 df 作为默认编程标识符。

  5. 对于“CSV 值分隔符”,请输入分隔 CSV 文件中的值的字符,或将逗号 (,) 字符保留为默认值分隔符。

  6. 对于“小数点分隔符”,请输入分隔 CSV 文件中小数的字符,或者保留“.” 为默认分隔符。

  7. 对于“行数限制:读取前 N 行 - 留空表示不受限制”,您可以输入要导入控件的最大行数,或保留 100000 作为默认行数,或将此框留空以表示没有行数限制。

  8. 单击“打开 CSV 文件”。

    控件根据您指定的设置显示 CSV 文件的内容。

提示

可以切换当前小组件以显示其他 CSV 文件的内容:

  1. 在当前窗口部件中,点击从 DBFS 中读取 CSV选项卡。
  2. 请按照前面的步骤将其他 CSV 文件的内容导入到小组件中。

将数据库表的内容读入控件

场景:你想要将 Azure Databricks 工作区中的数据库表的内容读取到小部件中。

  1. 单击“Databricks: 加载数据库表”。

    注意

    如果Databricks: 加载数据库表不可见,请使用选项1清除小组件,然后重试。

  2. 在“Databricks: 加载数据库表”窗格中,对于“数据库 - 留空表示默认数据库”,请输入目标表所在的数据库的名称,或将此框留空以指定默认数据库。

  3. 对于Table,请输入目标表的名称。

  4. 对于“行数限制:读取前 N 行 - 留空表示不受限制”,您可以输入要导入控件的最大行数,或保留 100000 作为默认行数,或将此框留空以表示没有行数限制。

  5. 对于“数据帧名称”,输入表内容的编程标识符的名称作为数据帧,或保留 df 作为默认编程标识符。

  6. 单击“执行” 。

    该插件根据您指定的设置显示表格内容。

提示

可以切换当前组件以显示不同表格的内容:

  1. 在当前小部件中,单击“Databricks:加载数据库表”选项卡。
  2. 按照前面的步骤将其他表的内容读入小组件。

数据操作任务

bamboolib 提供 50 多个数据操作。 下面是一些较常见的入门数据操作任务。

本节内容:

选择列

场景:你希望按名称、数据类型或以匹配某些正则表达式的方式仅显示特定的表列。 例如,在虚拟“Sales 数据集”中,你希望仅显示 item_type 列,或者只显示列名称中包含字符串 sales_channel 的列。

  1. “数据” 选项卡上的 “搜索操作” 下拉列表中,执行以下操作之一:

    • 键入select,然后选择选择或放弃列
    • 选择“选择或删除列”。
  2. 在“选择或删除列”窗格中的“选择”下拉列表中,选择“选择”。

  3. 选择目标列名称或包含标准。

  4. 对于“数据帧名称”,输入表内容的编程标识符的名称作为数据帧,或保留 df 作为默认编程标识符。

  5. 单击“执行” 。

删除字段

场景:你希望按名称、数据类型或以匹配某些正则表达式的方式隐藏特定的表列。 例如,在虚拟“Sales 数据集”中,你希望隐藏 order_prioorder_date 列,或者希望隐藏仅包含日期时间值的所有列。

  1. “数据” 选项卡上的 “搜索操作” 下拉列表中,执行以下操作之一:

    • 键入 drop,然后选择“选择或删除列”。
    • 选择“选择或删除列”。
  2. 在“选择或删除列”窗格的下拉列表中,选择“删除”。

  3. 选择目标列名称或包含标准。

  4. 对于“数据帧名称”,输入表内容的编程标识符的名称作为数据帧,或保留 df 作为默认编程标识符。

  5. 单击“执行” 。

筛选行

场景:你希望根据匹配或缺少的特定列值等条件显示或隐藏特定表行。 例如,在示例“销售数据集”中,你希望只显示那些 列的值等于 item_type 的行。

  1. “数据” 选项卡上的 “搜索操作” 下拉列表中,执行以下操作之一:

    • 键入 filter,然后选择“过滤行”。
    • 选择“筛选行”。
  2. 在“筛选行”窗格中的“选择”下拉列表中(“位置”上方),选择“选择行”或“删除行”。

  3. 指定第一个筛选器条件。

  4. 若要添加另一个筛选器条件,请单击“添加条件”,并指定下一个筛选器条件。 根据需要重复操作。

  5. 对于“数据帧名称”,输入表内容的编程标识符的名称作为数据帧,或保留 df 作为默认编程标识符。

  6. 单击“执行” 。

对行进行排序

场景:你想要根据一列或多列中的值对表行进行排序。 例如,在虚拟“销售数据集”中,你希望按照 列的值按从 A 到 Z 的字母顺序显示行。

  1. “数据” 选项卡上的 “搜索操作” 下拉列表中,执行以下操作之一:

    • 键入sort,然后选择排序行
    • 选择“对行进行排序”。
  2. 在“排序列”窗格中,选择要排序的第一列和排序顺序。

  3. 要添加其他排序条件,请单击“添加列”,并指定下一个排序条件。 根据需要重复操作。

  4. 对于“数据帧名称”,输入表内容的编程标识符的名称作为数据帧,或保留 df 作为默认编程标识符。

  5. 单击“执行” 。

对行和列进行分组的任务

本节内容:
按单个聚合函数对行和列进行分组

场景:你希望通过计算分组来显示行和列结果,并且想要为这些分组分配自定义名称。 例如,在虚拟“销售数据集”中,你希望按 列的值对行进行分组,显示包含相同 country 值的行数,并将计算出的计数列表命名为 country

  1. “数据” 选项卡上的 “搜索操作” 下拉列表中,执行以下操作之一:

    • 键入group,然后选择按“分组方式和聚合(重命名)”进行操作。
    • 选择分组和聚合(重命名)
  2. 在“分组依据与列重命名”窗格中,选择要分组的列、第一个计算步骤,并可选择性地为计算列指定名称。

  3. 若要添加另一个计算,请单击“添加计算”,并指定下一个计算和列名称。 根据需要重复操作。

  4. 指定存储结果的位置。

  5. 对于“数据帧名称”,输入表内容的编程标识符的名称作为数据帧,或保留 df 作为默认编程标识符。

  6. 单击“执行” 。

按多个聚合函数对行和列进行分组

场景:你希望通过计算分组来显示行和列结果。 例如,在虚拟“销售数据集”中,你希望按 region 以及 country 列的值对行进行分组,按 sales_channel 显示包含相同 regioncountry 值的行数,以及按 sales_channeltotal_revenueregion 的唯一组合显示 country 的行数。

  1. “数据” 选项卡上的 “搜索操作” 下拉列表中,执行以下操作之一:

    • 键入 group,然后选择“按组聚合(默认选项)”。
    • 选择“分组和聚合(默认)”。
  2. 在“按列重命名分组”面板中,选择要分组的列和第一个计算。

  3. 要添加另一个计算,请单击“添加计算”,并指定下一个计算。 根据需要重复操作。

  4. 指定存储结果的位置。

  5. 对于“数据帧名称”,输入表内容的编程标识符的名称作为数据帧,或保留 df 作为默认编程标识符。

  6. 单击“执行” 。

删除包含缺失值的行

场景:你希望删除具有指定列缺失值的任何行。 例如,在虚拟“Sales 数据集”中,你希望删除任何具有缺失值 的行。

  1. “数据” 选项卡上的 “搜索操作” 下拉列表中,执行以下操作之一:

    • 键入 drop 或 remove,然后选择“删除缺失值”。
    • 选择“删除缺失值”。
  2. 在“删除缺失值”窗格中,选择列以删除具有该列缺少值的任何行。

  3. 对于“数据帧名称”,输入表内容的编程标识符的名称作为数据帧,或保留 df 作为默认编程标识符。

  4. 单击“执行” 。

删除重复行

场景:你希望删除具有指定列重复值的任何行。 例如,在虚拟“Sales 数据集”中,你希望删除彼此完全重复的任何行。

  1. “数据” 选项卡上的 “搜索操作” 下拉列表中,执行以下操作之一:

    • 键入 drop 或 remove,然后选择“删除/移除重复项”。
    • 选择“删除/删除重复项”。
  2. 在“删除重复项 ”窗格中,选择列以删除对于这些列具有重复值的任何行,然后选择是保留具有重复值的第一行还是最后一行。

  3. 对于“数据帧名称”,输入表内容的编程标识符的名称作为数据帧,或保留 df 作为默认编程标识符。

  4. 单击“执行” 。

查找并替换缺失值

场景:你希望将缺失值替换为具有指定列的任何行的替换值。 例如,在虚拟Sales 数据集中,你希望用item_type值替换Unknown Item Type列中具有缺失值的任何行。

  1. “数据” 选项卡上的 “搜索操作” 下拉列表中,执行以下操作之一:

    • 键入 find 或 replace,然后选择“查找并替换缺失值”。
    • 选择“查找并替换缺失值”。
  2. 在“替换缺失值 ”窗格中,选择要替换其缺失值的列,然后指定替换值。

  3. 单击“执行” 。

创建列公式

场景:你希望创建使用唯一公式的列。 例如,在虚拟“Sales 数据集”中,你希望创建一个名为 的列,该列显示每行的 profit_per_unit 列值除以 total_profit 列值的结果。

  1. “数据” 选项卡上的 “搜索操作” 下拉列表中,执行以下操作之一:

    • 键入 formula,然后选择 新建列公式
    • 选择“新建列公式”。
  2. 在“替换缺失值 ”窗格中,选择要替换其缺失值的列,然后指定替换值。

  3. 单击“执行” 。

数据操作历史记录任务

本节内容:

查看在小组件中执行的操作列表

场景:你希望从最近的更改开始,查看小组件中所做的所有更改的列表。

单击“历史记录”。 操作列表显示在“转换历史记录”窗格中。

撤消在小组件中执行的最近操作

场景:你希望还原在小组件中执行的最近一次更改。

执行下列操作之一:

  • 单击逆时针方向箭头图标。
  • 单击“历史记录”,然后在“转换历史记录”窗格中,单击“撤消最后一步”。

恢复在小组件中执行的最近操作

场景:你希望撤销在小组件中执行的最近一次还原。

执行下列操作之一:

  • 单击顺时针箭头图标。
  • 单击“历史记录”,然后在“转换历史记录”窗格中,单击“恢复最后一步”。

更改小组件中最近执行的操作

场景:你希望更改在小组件中执行的最近更改。

  1. 执行下列操作之一:

    • 单击铅笔图标。
    • 单击“历史记录”,然后在“转换历史记录”窗格中,单击“编辑最后一步”。
  2. 进行所需的更改,然后单击“执行”。

获取代码以编程方式将小组件的当前状态重新创建为数据帧

场景:你希望获得用于编程地重新创建当前小组件状态的 Python 代码,该状态以 pandas DataFrame 表示。 你希望在此工作簿中的另一个单元格中运行此代码,或者完全在不同的工作簿中运行此代码。

  1. 单击“获取代码”。

  2. 在“导出代码”窗格中,单击“复制代码”。 代码已复制到系统的剪贴板上。

  3. 将代码粘贴到此工作簿中的其他单元格或另一个工作簿中。

  4. 编写额外的代码,以编程方式操作此 pandas 数据帧,然后运行该代码单元。 例如,要显示数据帧的内容,假设数据帧由 df 以编程方式表示:

    # Your pasted code here, followed by...
    df
    

限制

有关详细信息,请参阅 Databricks 笔记本的已知限制

其他资源