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

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

Bamboolib 在后台使用 ipywidgets ,这是一个用于 IPython 内核 的交互式 HTML 小组件框架。 Ipywidgets 在 IPython 内核 内部运行。

  • Azure Databricks 笔记本 ,它 附加 到具有 Databricks Runtime 11.0 或更高版本的 Azure Databricks 群集
  • bamboolib 库必须可供笔记本使用。 可以通过 PyPI 在工作区中安装库 ,通过 PyPI 仅在特定群集上安装库 ,或使用 %pip 命令 使库仅对特定笔记本可用
  • 创建 Python 笔记本。

  • 将笔记本 附加 到满足 要求 的群集。

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

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

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

    或者,可以打印现有的 pandas 数据帧以显示 bamboolib,以便与该特定数据帧一起使用。

  • 继续执行关键任务

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

    单独使用 bamboolib

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

  • 创建 Python 笔记本。

  • 将笔记本附加到满足要求的群集。

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

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

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

  • 单击“加载虚拟数据”。

  • 在“加载虚拟数据”窗格中,对于“加载用于测试 bamboolib 的虚拟数据集”,请选择“Sales 数据集”。

  • 单击“执行” 。

  • 显示 item_type 为“婴儿食品”的所有行:

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

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

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

    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'])]
    
  • 添加此代码,使其仅显示 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'])]
    

    除了编写此代码,还可通过在第三个单元格中使用 bamboolib 仅显示 order_prio 为 C 的行来执行相同的操作。此步骤是扩展 bamboolib 之前自动生成的代码的示例。

  • 按区域按升序对行进行排序:

  • 在第四个单元格中的小组件中,在“搜索操作”列表中,选择“对行进行排序”。
  • 在“对列进行排序”窗格中的“选择列”列表中,选择“区域”。
  • 在“区域”旁边的列表中,选择“升序(A-Z)”。
  • 单击“执行” 。
  • 这相当于自己编写以下代码:

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

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

  • 继续执行关键任务

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

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

  • 创建 Python 笔记本。

  • 将笔记本附加到满足要求的群集。

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

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

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

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

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

  • 单击“显示 bamboolib UI”。

  • 显示 item_type 为“婴儿食品”的所有行:

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

  • 粘贴和修改代码:

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

    # Step: Keep rows where item_type is one of: Baby Food
    df = df.loc[df['item_type'].isin(['Baby Food'])]
    
  • 添加此代码,使其仅显示 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'])]
    

    除了编写此代码,还可通过在第三个单元格中使用 bamboolib 仅显示 order_prio 为 C 的行来执行相同的操作。此步骤是扩展 bamboolib 之前自动生成的代码的示例。

  • 按区域按升序对行进行排序:

    a. 在第四个单元格中的小组件中,单击“对行进行排序”。

  • 在“对列进行排序”窗格中的“选择列”列表中,选择“区域”。
  • 在“区域”旁边的列表中,选择“升序(A-Z)”。
  • 单击“执行” 。
  • 这相当于自己编写以下代码:

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

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

  • 继续执行关键任务

    本节内容:

  • 将小组件添加到单元格
  • 清除小组件
  • 数据加载任务
  • 数据操作任务
  • 数据操作历史记录任务
  • 获取代码以编程方式重新创建小组件的当前状态作为数据帧
  • 将小组件添加到单元格

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

  • 确保笔记本满足 bamboolib 的要求

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

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

    import bamboolib as bam
    
  • 选项 1:在你希望在其中显示小组件的单元格中,添加以下代码,然后运行该单元格:

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

    选项 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) ]
    

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

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

    清除小组件

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

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

    小组件将被清除并重新播放“Databricks: 从 DBFS 中读取 CSV 文件”、“Databricks: 加载数据库表”和“加载虚拟数据”按钮。

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

    import bamboolib as bam
    

    选项 2:在包含对 pandas 数据帧的引用的单元格中,通过再次运行此单元格,打印该数据帧。 小组件将被清除并显示新数据。

    数据加载任务

    本节内容:

  • 将示例数据集的内容读入小组件
  • 将 CSV 文件的内容读入小组件
  • 将数据集表的内容读入小组件
  • 将示例数据集的内容读入小组件

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

  • 单击“加载虚拟数据”。

    如果“加载虚拟数据”不可见,请清除具有选项 1 的小组件,然后重试。

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

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

  • 单击“执行” 。

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

    可以切换当前小组件以显示其他示例数据集的内容:

  • 在当前小组件中,单击“加载虚拟数据”选项卡。
  • 按照前面的步骤将其他示例数据集的内容读取到小组件中。
  • 将 CSV 文件的内容读入小组件

    场景:你想要将 Azure Databricks 工作区中的 CSV 文件的内容读取到小组件中。

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

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

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

  • 选择目标 CSV 文件。

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

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

  • 对于“小数点分隔符”,请输入分隔 CSV 文件中的小数的字符,或将句点 (.) 字符保留为默认值分隔符。

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

  • 单击“打开 CSV 文件”。

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

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

  • 在当前小组件中,单击“从 DBFS 中读取 CSV”选项卡。
  • 按照前面的步骤将其他 CSV 文件的内容读取到小组件中。
  • 将数据集表的内容读入小组件

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

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

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

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

  • 对于“表”,请输入目标表的名称。

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

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

  • 单击“执行” 。

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

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

  • 在当前小组件中,单击“Databricks: 加载数据库表”选项卡。
  • 按照前面的步骤将其他表的内容读取到小组件中。
  • 数据操作任务

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

    本节内容:

  • 对行进行排序
  • 对行和列进行分组的任务
  • 删除包含缺失值的行
  • 删除重复行
  • 查找并替换缺失值
  • 创建列公式
  • 场景:你希望按名称、数据类型或以匹配某些正则表达式的方式仅显示特定的表列。 例如,在虚拟“Sales 数据集”中,你希望仅显示 item_typesales_channel 列,或者只显示列名称中包含字符串 _date 的列。

  • 在“数据”选项卡上的“搜索操作”下拉列表中,执行下列操作之一:
    • 键入 select,然后选择“选择或删除列”。
    • 选择“选择或删除列”。
    • 在“选择或删除列”窗格中的“选择”下拉列表中,选择“选择”。
    • 选择目标列名或包含条件。
    • 对于“数据帧名称”,输入表内容的编程标识符的名称作为数据帧,或将 df 保留为默认编程标识符。
    • 单击“执行” 。
    • 场景:你希望按名称、数据类型或以匹配某些正则表达式的方式隐藏特定的表列。 例如,在虚拟“Sales 数据集”中,你希望隐藏 order_prioorder_dateship_date 列,或者希望隐藏仅包含日期时间值的所有列。

    • 在“数据”选项卡上的“搜索操作”下拉列表中,执行下列操作之一:
      • 键入 drop,然后选择“选择或删除列”。
      • 选择“选择或删除列”。
      • 在“选择或删除列”窗格中的“选择”下拉列表中,选择“删除”。
      • 选择目标列名或包含条件。
      • 对于“数据帧名称”,输入表内容的编程标识符的名称作为数据帧,或将 df 保留为默认编程标识符。
      • 单击“执行” 。
      • 场景:你希望根据匹配或缺少的特定列值等条件显示或隐藏特定表行。 例如,在虚拟“Sales 数据集”中,你希望仅显示item_type 列值设置为 Baby Food 的行。

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

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

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

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

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

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

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

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

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

              • 在“数据”选项卡上的“搜索操作”下拉列表中,执行下列操作之一:
                • 键入 drop 或 remove,然后选择“删除缺失值”。
                • 选择“删除缺失值”。
                • 在“删除缺失值”窗格中,选择列以删除具有该列缺少值的任何行。
                • 对于“数据帧名称”,输入表内容的编程标识符的名称作为数据帧,或将 df 保留为默认编程标识符。
                • 单击“执行” 。
                • 删除重复行

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

                • 在“数据”选项卡上的“搜索操作”下拉列表中,执行下列操作之一:
                  • 键入 drop 或 remove,然后选择“删除/删除重复项”。
                  • 选择“删除/删除重复项”。
                  • 在“删除重复项 ”窗格中,选择列以删除对于这些列具有重复值的任何行,然后选择是保留具有重复值的第一行还是最后一行。
                  • 对于“数据帧名称”,输入表内容的编程标识符的名称作为数据帧,或将 df 保留为默认编程标识符。
                  • 单击“执行” 。
                  • 查找并替换缺失值

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

                  • 在“数据”选项卡上的“搜索操作”下拉列表中,执行下列操作之一:
                    • 键入 find 或 replace,然后选择“查找并替换缺失值”。
                    • 选择“查找并替换缺失值”。
                    • 在“替换缺失值 ”窗格中,选择要替换其缺失值的列,然后指定替换值。
                    • 单击“执行” 。
                    • 创建列公式

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

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

                        本节内容:

                      • 查看在小组件中执行的操作列表
                      • 撤消在小组件中执行的最近操作
                      • 恢复在小组件中执行的最近操作
                      • 更改在小组件中执行的最近操作
                      • 查看在小组件中执行的操作列表

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

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

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

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

                        执行下列操作之一:

                      • 单击逆时针方向箭头图标。
                      • 单击“历史记录”,然后在“转换历史记录”窗格中,单击“撤消最后一步”。
                      • 恢复在小组件中执行的最近操作

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

                        执行下列操作之一:

                      • 单击顺时针箭头图标。
                      • 单击“历史记录”,然后在“转换历史记录”窗格中,单击“恢复最后一步”。
                      • 更改在小组件中执行的最近操作

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

                      • 执行下列操作之一:
                        • 单击铅笔图标。
                        • 单击“历史记录”,然后在“转换历史记录”窗格中,单击“编辑最后一步”。
                        • 进行所需的更改,然后单击“执行”。
                        • 获取代码以编程方式重新创建小组件的当前状态作为数据帧

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

                        • 单击“获取代码”。

                        • 在“导出代码”窗格中,单击“复制代码”。 代码将复制到系统的剪贴板。

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

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

                          # Your pasted code here, followed by...
                          
                        • 使用 bamboolib 进行数据整理限制为大约 1000 万行。 此限制基于 pandas 和群集的计算资源。
                        • 使用 bamboolib 进行数据可视化限制为大约 1 万行。 此限制基于 plotly。
                        • bamboolib 文档
  •