bamboolib

重要

此功能目前以公共预览版提供。

备注

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

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

Bamboolib 在后台使用 ipywidgets,这是一个用于 IPython 内核的交互式 HTML 小组件框架。 Ipywidgets 在 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 的虚拟数据集”,请选择“Sales 数据集”。

  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 数据帧的引用的单元格中,通过再次运行此单元格,打印该数据帧。 小组件将被清除并显示新数据。

数据加载任务

本节内容:

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

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

  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. 对于“表”,请输入目标表的名称。

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

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

  6. 单击“执行” 。

    小组件根据指定的设置显示表的内容。

提示

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

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

数据操作任务

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

本节内容:

选择列

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

  1. 在“数据”选项卡上的“搜索操作”下拉列表中,执行下列操作之一
    • 键入 select,然后选择“选择或删除列”。
    • 选择“选择或删除列”。
  2. 在“选择或删除列”窗格中的“选择”下拉列表中,选择“选择”。
  3. 选择目标列名或包含条件。
  4. 对于“数据帧名称”,输入表内容的编程标识符的名称作为数据帧,或保留 df 作为默认编程标识符。
  5. 单击“执行” 。

删除列

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

  1. 在“数据”选项卡上的“搜索操作”下拉列表中,执行下列操作之一
    • 键入 drop,然后选择“选择或删除列”。
    • 选择“选择或删除列”。
  2. 在“选择或删除列”窗格中的“选择”下拉列表中,选择“删除”。
  3. 选择目标列名或包含条件。
  4. 对于“数据帧名称”,输入表内容的编程标识符的名称作为数据帧,或保留 df 作为默认编程标识符。
  5. 单击“执行” 。

筛选行

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

  1. 在“数据”选项卡上的“搜索操作”下拉列表中,执行下列操作之一
    • 键入 filter,然后选择“筛选行”。
    • 选择“筛选行”。
  2. 在“筛选行”窗格中的“选择”下拉列表中(“位置”上方),选择“选择行”或“删除行”。
  3. 指定第一个筛选器条件。
  4. 若要添加另一个筛选器条件,请单击“添加条件”,并指定下一个筛选器条件。 根据需要重复操作。
  5. 对于“数据帧名称”,输入表内容的编程标识符的名称作为数据帧,或保留 df 作为默认编程标识符。
  6. 单击“执行” 。

对行进行排序

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

  1. 在“数据”选项卡上的“搜索操作”下拉列表中,执行下列操作之一
    • 键入 sort,然后选择“对行进行排序”。
    • 选择“对行进行排序”。
  2. 在“对列进行排序”窗格中,选择排序依据的第一列和排序顺序。
  3. 要添加其他排序条件,请单击“添加列”,并指定下一个排序条件。 根据需要重复操作。
  4. 对于“数据帧名称”,输入表内容的编程标识符的名称作为数据帧,或保留 df 作为默认编程标识符。
  5. 单击“执行” 。

对行和列进行分组的任务

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

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

  1. 在“数据”选项卡上的“搜索操作”下拉列表中,执行下列操作之一
    • 键入 group,然后选择“分组依据和聚合(通过重命名)”。
    • 选择“分组依据和聚合(通过重命名)”。
  2. 在“分组依据与列重命名”窗格中,选择分组依据的列、第一个计算,并根据需要指定计算列的名称。
  3. 若要添加另一个计算,请单击“添加计算”,并指定下一个计算和列名称。 根据需要重复操作。
  4. 指定存储结果的位置。
  5. 对于“数据帧名称”,输入表内容的编程标识符的名称作为数据帧,或保留 df 作为默认编程标识符。
  6. 单击“执行” 。
按多个聚合函数对行和列进行分组

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

  1. 在“数据”选项卡上的“搜索操作”下拉列表中,执行下列操作之一
    • 键入 group,然后选择“分组依据和聚合(默认值)”。
    • 选择“分组依据和聚合(默认值)”。
  2. 在“分组依据与列重命名”中,选择分组依据的列和第一个计算。
  3. 要添加另一个计算,请单击“添加计算”,并指定下一个计算。 根据需要重复操作。
  4. 指定存储结果的位置。
  5. 对于“数据帧名称”,输入表内容的编程标识符的名称作为数据帧,或保留 df 作为默认编程标识符。
  6. 单击“执行” 。

删除包含缺失值的行

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

  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 列值除以 units_sold 列值的结果。

  1. 在“数据”选项卡上的“搜索操作”下拉列表中,执行下列操作之一
    • 键入 formula,然后选择“新建列公式”。
    • 选择“新建列公式”。
  2. 在“替换缺失值 ”窗格中,选择要替换其缺失值的列,然后指定替换值。
  3. 单击“执行” 。

数据操作历史记录任务

本节内容:

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

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

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

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

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

执行下列操作之一:

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

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

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

执行下列操作之一:

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

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

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

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

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

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

  1. 单击“获取代码”。

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

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

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

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

限制

  • 使用 bamboolib 进行数据整理限制为大约 1000 万行。 此限制基于 pandas 和群集的计算资源。
  • 使用 bamboolib 进行数据可视化限制为大约 1 万行。 此限制基于 plotly。

其他资源