探索和验证语义模型和 DataFrame 中的关系
本文介绍如何使用 SemPy 语义链接函数来发现和验证 Power BI 语义模型和 pandas DataFrame 中的关系。
在数据科学和机器学习中,理解数据中的结构和关系非常重要。 Power BI 是一种功能强大的工具,可用于对这些结构和关系进行建模和可视化。 若要获取更多见解或构建机器学习模型,可以使用 SemPy 库模块中的语义链接函数深入了解。
数据科学家和业务分析师可以使用 SemPy 函数列出、可视化和验证 Power BI 语义模型中的关系,或在 pandas DataFrame 中查找和验证关系。
先决条件
获取 Microsoft Fabric 订阅。 或者注册免费的 Microsoft Fabric 试用版。
登录 Microsoft Fabric。
使用主页左侧的体验切换器切换到 Synapse 数据科学体验。
创建新的笔记本,将代码复制/粘贴到单元格中。
对于 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 语义模型中的 Sales、Products 和 Customers 表的字典来调用 list_relationship_violations
函数。 可以通过设置覆盖阈值、指定如何处理缺失键以及定义要报告的缺失键数来自定义函数。
该函数返回一个 pandas 数据帧,其中每个关系冲突一行,使你可以轻松识别和解决语义模型中的任何问题。
通过使用 list_relationship_violations
函数,可以确保语义模型一致且准确,从而生成更可靠的机器学习模型并深入了解数据。
查找 pandas 数据帧中的关系
虽然 Fabric 模块中的 list_relationships
、plot_relationships_df
和 list_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_sales
、df_products
和 df_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_sales
、df_products
和 df_customers
)列表以及 find_relationships
中的关系 DataFrame 调用 list_relationship_violations
函数。
list_relationship_violations
函数将返回 pandas 数据帧,每个关系冲突一行,便于你轻松地识别和解决数据中的任何问题。
可以通过设置覆盖阈值、指定如何处理缺失键以及定义要报告的缺失键数来自定义函数。
通过将 list_relationship_violations
函数与 pandas 数据帧配合使用,可以确保数据一致且准确,从而生成更可靠的机器学习模型并深入了解数据。