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

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

在数据科学和机器学习中,理解数据中的结构和关系非常重要。 Power BI 是一种功能强大的工具,可用于对这些结构和关系进行建模和可视化。 若要获取更多见解或构建机器学习模型,可以使用 SemPy 库模块中的语义链接函数深入了解。

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

先决条件

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

  • 对于 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")

前面的代码使用名为 my_dataset 的 Power BI 语义模型调用 list_relationships 函数。 该函数返回一个 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 模块并从语义模型中读取表。 然后,使用字典调用函数,该字典使用表内容将表名称映射到数据帧。

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

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)

前面的代码使用包含 my_dataset 语义模型中的 SalesProductsCustomers 表的字典来调用 list_relationship_violations 函数。 可以通过设置覆盖阈值、指定如何处理缺失键以及定义要报告的缺失键数来自定义函数。

该函数返回一个 pandas 数据帧,其中每个关系冲突一行,使你可以轻松识别和解决语义模型中的任何问题。 通过使用 list_relationship_violations 函数,可以确保语义模型一致且准确,从而生成更可靠的机器学习模型并深入了解数据。

查找 pandas 数据帧中的关系

虽然 Fabric 模块中的 list_relationshipsplot_relationships_dflist_relationship_violations 函数是探索语义模型内关系的强大工具,但可能还需要发现其他数据源中作为 pandas DataFrame 导入的关系。

这就是 sempy.relationship 模块中 find_relationships 函数发挥作用的地方。

find_relationships 模块中的 sempy.relationships 函数可帮助数据科学家和业务分析师发现 pandas DataFrame 列表中的潜在关系。 使用此函数可以识别表和列之间可能的连接,从而更好地了解数据的结构以及不同元素之间的关系。

以下示例代码演示了如何在 pandas DataFrame 中查找关系:

from sempy.relationships import find_relationships

tables = [df_sales, df_products, df_customers]

find_relationships(tables)

前面的代码使用三个 Pandas DataFrame 列表调用 find_relationships 函数:df_salesdf_productsdf_customers。 该函数返回 pandas 数据帧,每个潜在关系一行,便于你轻松地浏览和分析数据中的关系。

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

验证 pandas 数据帧中的关系

使用 find_relationships 函数在 Panda DataFrame 中发现潜在关系后,可以使用 list_relationship_violations 函数验证这些关系并识别任何潜在问题或不一致之处。

list_relationship_violations 函数验证表的内容,以确保它们与发现的关系匹配。 通过使用此函数来识别与指定关系乘数不一致的情况,可以在任何问题影响数据分析或机器学习模型之前予以解决。

以下示例代码演示了如何在 pandas DataFrame 中查找关系冲突:

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)

前面的代码使用三个 pandas DataFram(df_salesdf_productsdf_customers)列表以及 find_relationships 中的关系 DataFrame 调用 list_relationship_violations 函数。 list_relationship_violations 函数将返回 pandas 数据帧,每个关系冲突一行,便于你轻松地识别和解决数据中的任何问题。

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

通过将 list_relationship_violations 函数与 pandas 数据帧配合使用,可以确保数据一致且准确,从而生成更可靠的机器学习模型并深入了解数据。