bamboolib

重要

本文档已停用,可能不会更新。 bamboolib 已被弃用,不再建议使用。 有关代码生成方面的帮助,请参阅 Databricks 助手

注释

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

bamboolib 是一个用户界面组件,允许从 Azure Databricks notebook 内进行无代码数据分析和转换。 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 DataFrame,以显示与该特定 DataFrame 配合使用的 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_prioC 的行来执行相同的操作。此步骤是扩展 bamboolib 之前自动生成的代码的示例。

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

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

    注释

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

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

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

  13. 继续执行关键任务

将 bamboolib 与现有 DataFrame 配合使用

在本演练中,你将使用 bamboolib 在笔记本中显示 pandas DataFrame 的内容。 此数据帧包含示例销售数据集的副本。 然后,尝试使用 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_prioC 的行来执行相同的操作。此步骤是扩展 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 数据帧 引用的单元格中,重新运行该单元格以打印数据帧。 小组件将会清除,然后显示新数据。

数据加载任务

本节内容:

把示例数据集的内容读入到控件中

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

  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 文件的内容读入组件。

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

Scenario:你想要将Azure Databricks工作区中数据库表的内容读取到控件中。

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

    注释

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

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

  3. 对于“表”,请输入目标表的名称

  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 列的值设置为 Baby Food 的行。

  1. 在“数据”选项卡上的“搜索操作”下拉列表中,执行下列操作之一
    • 键入 filter,然后选择筛选行
    • 选择“筛选行”。
  2. 在“筛选行”窗格中“where”上方的“选择”下拉列表中,选择“选择行”或“删除行”
  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. 进行所需的更改,然后单击“执行”。

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

场景:你希望获取如下 Python 代码:以编程方式重新创建当前小组件的状态(以 Pandas DataFrame 的形式标识)。 你希望在此工作簿中的另一个单元格中运行此代码,或者完全在不同的工作簿中运行此代码。

  1. 单击“获取代码”。

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

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

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

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

局限性

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

其他资源