探索和验证语义模型和 DataFrame 中的关系

本文介绍如何使用 SemPy 语义链接函数在 Power BI 语义模型和 pandas 数据帧中发现和验证关系。

在数据科学和机器学习中,了解数据中的结构和关系非常重要。 借助 Power BI,你可以对这些结构和关系进行建模和可视化。 若要获取更多见解或生成机器学习模型,请使用 SemPy 库模块中的语义链接函数。

数据科学家和业务分析师使用 SemPy 函数列出、可视化和验证 Power BI 语义模型中的关系,或在 pandas DataFrames 中查找和验证关系。

先决条件

  • 创建新的笔记本,将代码复制并粘贴到单元格中。

  • 对于 Spark 3.4 及更高版本,使用 Fabric 时,默认运行时中提供了语义链接,因此无需安装它。 对于 Spark 3.3 或更低版本,请运行以下命令,如需更新到最新版本的语义链接,也可运行此命令:

    %pip install -U semantic-link
    
  • 将湖仓添加到笔记本

列出语义模型中的关系

list_relationships 模块中的 sempy.fabric 函数会返回在 Power BI 语义模型中找到的所有关系的列表。 该列表有助于你了解数据的结构以及不同表和列的连接方式。

此函数通过使用语义链接来提供带批注的 DataFrame。 DataFrame 包括必要的元数据来理解语义模型中的关系。 带批注的 DataFrame 使分析语义模型的结构变得容易,并将其用于机器学习模型或其他数据分析任务。

若要使用 list_relationships 函数,请首先导入 sempy.fabric 模块。 然后,可以使用 Power BI 语义模型的名称或 UUID 调用该函数,如以下示例所示:

import sempy.fabric as fabric

fabric.list_relationships("my_dataset")

前面的代码使用名为 list_relationships 的 Power BI 语义模型调用函数。 该函数返回一个 pandas 数据帧,其中每个关系对应一行,以便于快速探索和分析语义模型中的这些关系。

注意

笔记本、Power BI 数据集语义模型和湖屋可以位于同一工作区或不同工作区。 默认情况下,SemPy 尝试从以下工作区访问语义模型:

  • 如果已将湖屋附加到笔记本,则为湖屋的工作区。
  • 笔记本的工作区(如果没有附加湖屋)。

如果语义模型不在这两个工作区中,则在调用 SemPy 方法时必须指定语义模型的工作区。

可视化语义模型中的关系

使用该 plot_relationship_metadata 函数可视化语义模型中的关系,并了解模型的结构。 此函数创建一个图形,它显示表和列之间的连接,以便更轻松地了解不同元素的关联方式。

下面是如何使用函数 plot_relationship_metadata 的示例:

import sempy.fabric as fabric
from sempy.relationships import plot_relationship_metadata

relationships = fabric.list_relationships("my_dataset")
plot_relationship_metadata(relationships)

在此示例中,该 list_relationships 函数获取 my_dataset 语义模型中的关系,该 plot_relationship_metadata 函数创建一个图形来显示这些关系。

通过选择要包含的列、设置如何处理缺失的键值以及添加更多 graphviz 属性来自定义图形。

验证语义模型中的关系

使用该 list_relationship_violations 函数检查语义模型中的关系,并查找任何问题或不一致。 该 list_relationship_violations 函数会检查表,以确保它们与语义模型中的关系匹配。

此函数可帮助你查找关系多重性不一致的问题,并在这些问题影响数据分析或机器学习模型之前解决问题。

若要使用该 list_relationship_violations 函数,请导入 sempy.fabric 模块并从语义模型中读取表。 然后,用一个将表名称映射到包含表内容的 DataFrames 的字典来调用函数。

以下示例代码演示了如何列出关系冲突:

import sempy.fabric as fabric

tables = {
    "Sales": fabric.read_table("my_dataset", "Sales"),
    "Products": fabric.read_table("my_dataset", "Products"),
    "Customers": fabric.read_table("my_dataset", "Customers"),
}

fabric.list_relationship_violations(tables)

上述代码调用函数list_relationship_violations,传入一个包含SalesProductsCustomers表的字典,这些表来自my_dataset语义模型。 可以通过设置覆盖阈值、选择处理缺失键的方法以及设定报告缺失键数来定制函数。

该函数返回一个 pandas DataFrame,其中包含每个关系冲突的一行,以便快速查找并修复语义模型中的问题。 使用 list_relationship_violations 函数使语义模型保持一致且准确,以便构建更可靠的机器学习模型,并从数据中获得更好的见解。

查找 pandas 数据帧中的关系

list_relationships函数、plot_relationships_df函数和list_relationship_violations函数是Fabric模块中用于探索语义模型中关系的强大工具。 有时,需要在其他数据源(如 pandas DataFrames)中找到关系。

使用 find_relationships 模块中的 sempy.relationship 函数查找 pandas DataFrames 中的关系。

find_relationships 模块中的 sempy.relationships 函数允许数据科学家和业务分析师在 pandas 数据帧列表中找到潜在关系。 此函数可帮助你发现表和列之间的连接,以便详细了解数据及其元素之间的关系。

下面介绍如何在 pandas 数据帧中查找关系:

from sempy.relationships import find_relationships

tables = [df_sales, df_products, df_customers]

find_relationships(tables)

前面的代码使用三个 pandas 数据帧的列表调用 find_relationships 函数: df_salesdf_products以及 df_customers。 该函数返回一个 pandas DataFrame,每个潜在关系对应一行,使您能够浏览和分析数据中的关系。

通过设置覆盖阈值、名称相似性阈值、要排除的关系列表以及是否包括多对多关系来自定义函数。

验证 pandas 数据帧中的关系

使用 find_relationships 函数在 pandas DataFrames 中找到潜在关系后,使用该 list_relationship_violations 函数验证这些关系并识别任何问题或不一致。

list_relationship_violations 函数会检查表以确保它们与发现的关系匹配。 使用此函数可查找与指定关系乘数不一致的问题,因此可以在问题影响数据分析或机器学习模型之前解决问题。

以下示例演示如何在 pandas DataFrames 中查找关系冲突:

from sempy.relationships import find_relationships, list_relationship_violations

tables = [df_sales, df_products, df_customers]
relationships = find_relationships(tables)

list_relationship_violations(tables, relationships)

该示例调用list_relationship_violations 函数使用三个 pandas DataFrame:df_salesdf_productsdf_customers,以及find_relationships 函数中的关系数据帧。 该 list_relationship_violations 函数返回一个 pandas DataFrame,其中包含每个关系冲突的一行,以便快速查找并修复数据中的任何问题。

通过设置覆盖阈值、选择如何处理缺失键以及定义要报告的缺失键数量来自定义函数。

list_relationship_violations 函数与 pandas DataFrames 配合使用,使数据保持一致且准确。 这有助于构建可靠的机器学习模型,并从数据中获取更深入的见解。