次の方法で共有


Power BI セマンティック モデル内のリレーションシップを調査して検証する

この記事では、SemPy モジュールを使用して、Power BI セマンティック モデルと pandas DataFrame 内のリレーションシップを検出して検証する方法について説明します。

データ サイエンスや機械学習では、データ内の構造とリレーションシップを理解することが重要です。 Power BI は、データをモデル化して視覚化できる強力なツールですが、より多くの分析情報を得たり、機械学習モデルを構築したりするためには、セマンティック モデルの構造をさらに詳しく調べることが必要な場合があります。 データ サイエンティストとビジネス アナリストは、SemPy ライブラリのさまざまな関数を使用して、Power BI セマンティック モデルまたは pandas DataFrame 内のリレーションシップを調査できます。

次のことを学習します。

  • Power BI セマンティック モデル内のリレーションシップの検出、視覚化、調査を行う
  • pandas DataFrame 内のリレーションシップを検出して検証する

前提条件

  • Microsoft Fabric の Data Science エクスペリエンスに移動します。
  • 新しいノートブックを作成して、コードをコピーしてセルに貼り付けます。
  • Spark 3.4 以降では、Fabric を使用する場合、セマンティック リンクは既定のランタイムで使用でき、インストールする必要はありません。 Spark 3.3 以前を使用している場合、またはセマンティック リンクの最新バージョンに更新する場合は、コマンド python %pip install -U semantic-link を実行できます。 
  • レイクハウスをノートブックに追加します。 Spark 3.4 以降では、Fabric を使用する場合、セマンティック リンクは既定のランタイムで使用でき、インストールする必要はありません。 Spark 3.3 以前を使用している場合、またはセマンティック リンクの最新バージョンに更新する場合は、次のコマンドを実行できます。

python %pip install -U semantic-link  

セマンティック モデル内のリレーションシップを見つける

list_relationships 関数を使用すると、Power BI セマンティック モデル内で見つかったすべてのリレーションシップの一覧を取得できるため、データの構造と、さまざまなテーブルと列がどのように接続されているかをより深く理解できます。

この関数は、セマンティック リンクを利用して機能します。このリンクにより、セマンティック モデル内のリレーションシップを理解するために必要な、メタデータを含む注釈付き DataFrame が提供されます。 これにより、セマンティック モデルの構造を分析し、それを機械学習モデルやその他のデータ分析タスクで利用することが容易になっています。

list_relationships 関数を使用するには、まず sempy.fabric モジュールをインポートする必要があります。 その後、次のコードに示すように、Power BI セマンティック モデルの名前または UUID を使用して関数を呼び出すことができます。

import sempy.fabric as fabric

fabric.list_relationships("my_dataset")

前のコードは、list_relationships 関数が my_dataset という名前の Power BI セマンティック モデルで呼び出されていることを示しています。 この関数からは、リレーションシップごとに 1 行の pandas DataFrame が返されます。それによって、セマンティック モデル内のリレーションシップを簡単に調査して分析できます。

ヒント

ノートブック、セマンティック モデル (Power BI データセット)、Lakehouse は、同じワークスペースに配置することも、異なるワークスペースに配置することもできます。 既定では、SemPy は次の場所からセマンティック モデルへのアクセスを試みます。

  • ノートブックにレイクハウスをアタッチした場合は、レイクハウスのワークスペース。
  • レイクハウスがアタッチされていない場合は、ノートブックのワークスペース。

セマンティック モデルが 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 モジュールをインポートし、セマンティック モデルからテーブルを読み取る必要があります。 その後、テーブルの内容を含む DataFrame にテーブル名をマップするディクショナリを使用して、関数を呼び出すことができます。

次のコードは、リレーションシップ違反を一覧表示する方法を示しています。

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 関数は、セマンティック モデル my_datasetSalesProductsCustomers テーブルを含むディクショナリを使用して呼び出されます。 この関数からは、リレーションシップ違反ごとに 1 行の pandas DataFrame が返されます。それによって、セマンティック モデル内の問題を簡単に特定して対処できます。

不足しているキーの処理方法を指定したり、カバレッジしきい値を設定したり、報告する不足キーの数を定義したりすることで、関数をカスタマイズできます。

list_relationship_violations 関数を使用すると、セマンティック モデルの整合性と正確性を確認できるため、より信頼性の高い機械学習モデルを構築し、データについてより詳細な分析情報を得ることができます。

pandas DataFrame 内のリレーションシップを検出する

Fabric モジュールの関数 list_relationshipsplot_relationships_dflist_relationship_violations は、セマンティック モデル内のリレーションシップを調査するための強力なツールですが、他のデータ ソースから pandas DataFrame 形式で取り込まれたリレーションシップを検出することが必要な場合もあります。

ここで役立つのが sempy.relationship モジュールの find_relationships 関数です。

find_relationships 関数は、データ サイエンティストやビジネス アナリストが Pandas DataFrame のリスト内の潜在的なリレーションシップを検出するのに役立ちます。

この関数を使用すると、テーブルと列の間で可能な接続を識別できるため、データの構造と、さまざまな要素がどのように関連しているかを理解しやすくなります。

次のコードは、pandas DataFrame 内のリレーションシップを検出する方法を示しています。

from sempy.relationships import find_relationships

tables = [df_sales, df_products, df_customers]

find_relationships(tables)

前のコードでは、find_relationships 関数は、df_salesdf_productsdf_customers という 3 つの Pandas DataFrame のリストを使用して呼び出されています。 この関数からは、潜在的なリレーションシップごとに 1 行の pandas DataFrame が返されます。それによって、データ内のリレーションシップを簡単に調査して分析できます。

カバレッジしきい値、名前の類似性のしきい値、除外するリレーションシップの一覧、多対多リレーションシップを含めるかどうかを指定することで、関数をカスタマイズできます。

pandas DataFrame 内のリレーションシップを検証する

find_relationships 関数を使用して pandas DataFrame 内の潜在的なリレーションシップを検出したら、これらのリレーションシップを検証し、潜在的な問題や不整合を特定することが不可欠です。 ここで役立つのが sempy.relationships モジュールの 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)

前のコードでは、list_relationship_violations 関数は、3 つの pandas DataFrame (df_salesdf_productsdf_customers) のリストと、find_relationships 関数から取得したリレーションシップの DataFrame を使用して呼び出されています。 list_relationship_violations 関数からは、リレーションシップ違反ごとに 1 行の pandas DataFrame が返されます。それによって、データ内の問題を簡単に特定して対処できます。

不足しているキーの処理方法を指定したり、カバレッジしきい値を設定したり、報告する不足キーの数を定義したりすることで、関数をカスタマイズできます。

pandas DataFrame で list_relationship_violations 関数を使用すると、データの整合性と正確性を確認できるため、信頼性の高い機械学習モデルを構築し、データについて、より詳細な分析情報を得ることができます。