次の方法で共有


セマンティック リンクを使用してデータ内の機能依存関係を検出、調査、検証する

機能依存関係は、テーブル内の列間のリレーションシップであり、ある列の値を使用して別の列の値を決定します。 これらの依存関係を理解すると、データ内のパターンとリレーションシップを明らかにするのに役立ちます。これは、特徴エンジニアリング、データ クリーニング、モデル構築の各タスクに役立ちます。 機能依存関係は、他の方法では検出が困難なデータ品質の問題を見つけて修正できる効果的なインバリアントとして機能します。

この記事では、セマンティック リンクを使用して以下を行います。

  • FabricDataFrame の列間の依存関係を検索する
  • 依存関係を視覚化する
  • データ品質の問題を特定する
  • データ品質の問題を視覚化する
  • データセット内の列間に機能的制約を適用する

前提条件

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

Spark 3.4 以降では、Fabric を使用する場合、セマンティック リンクは既定のランタイムで使用でき、インストールする必要はありません。 Spark 3.3 以前を使用している場合、またはセマンティック リンクの最新バージョンに更新する場合は、次のコマンドを実行します。

%pip install -U semantic-link
``` 

## Find functional dependencies in data

The SemPy `find_dependencies` function detects functional dependencies between the columns of a FabricDataFrame. The function uses a threshold on conditional entropy to discover approximate functional dependencies, where low conditional entropy indicates strong dependence between columns. To make the `find_dependencies` function more selective, you can set a lower threshold on conditional entropy. The lower threshold means that only stronger dependencies will be detected.

This Python code snippet demonstrates how to use `find_dependencies`:

```python
from sempy.fabric import FabricDataFrame
from sempy.dependencies import plot_dependency_metadata
import pandas as pd


df = FabricDataFrame(pd.read_csv("your_data.csv"))

deps = df.find_dependencies()

find_dependencies 関数は、列間の依存関係が検出された FabricDataFrame を返します。 リストは、1 対 1 のマッピングを持つ列を表しています。 また、この関数は、推移的エッジを削除することで、潜在的な依存関係を取り除こうとします。

dropna=True オプションを指定すると、どちらの列にも NaN 値を持つ行は評価から除外されます。 これにより、以下の例に示すように、非推移的な依存関係が発生する可能性があります。

A B C
1 1 1
1 1 1
1 NaN 9
2 NaN 2
2 2 2

次の例に示すように、dropna=True オプションを指定すると、依存関係チェーンがサイクルを形成する場合があります。

A B C
1 1 NaN
2 1 NaN
NaN 1 1
NaN 2 1
1 NaN 1
1 NaN 2

データ内の依存関係を視覚化する

(find_dependencies を使用して) データセット内の機能依存関係を見つけたら、plot_dependency_metadata 関数を使用して依存関係を視覚化できます。 この関数は、find_dependencies から結果の FabricDataFrame を受け取り、列と列のグループ間の依存関係を視覚的に表現します。

次の Python コード スニペットは、plot_dependencies の使用方法を示しています。

from sempy.fabric import FabricDataFrame
from sempy.dependencies import plot_dependency_metadata
from sempy.samples import download_synthea

download_synthea(which='small')

df = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv"))

deps = df.find_dependencies()
plot_dependency_metadata(deps)

plot_dependency_metadata 関数は、列の 1 対 1 のグループを示す視覚化を生成します。 1 つのグループに属する列は、1 つのセルに配置されます。 適切な候補が見つからない場合は、空の FabricDataFrame が返されます。

plot_dependencies 関数の出力を示すスクリーンショット。

データ品質の問題を特定する

データ品質の問題は、欠損値、不整合、不正確さなど、さまざまな形式で発生する可能性があります。 これらの問題を特定して対処することは、データに基づいて構築された分析またはモデルの信頼性と有効性を確保する上で重要です。 データ品質の問題を検出する方法の 1 つは、データセット内の列間の機能依存関係の違反を調べることです。

list_dependency_violations 関数は、データセット列間の機能依存関係の違反を特定するのに役立ちます。 決定項列と依存列が与えられた場合、この関数は、機能依存性に違反する値を、それぞれの出現回数とともに表示する。 これは、おおよその依存関係を検査し、データ品質の問題を特定するのに役立ちます。

次のコード スニペットは、list_dependency_violations 関数の使用方法を示しています。

from sempy.fabric import FabricDataFrame
from sempy.samples import download_synthea

download_synthea(which='small')

df = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv"))

violations = df.list_dependency_violations(determinant_col="ZIP", dependent_col="CITY")

この例では、この関数は、ZIP (決定項) 列と CITY (依存) 列の間に機能的な依存関係があることを前提としています。 データセットにデータ品質の問題 (同じ郵便番号が複数の都市に割り当てられているなど) がある場合、この関数は問題のあるデータを出力します。

郵便番号 CITY count
12345 ボストン 2
12345 シアトル 1

この出力は、2 つの異なる都市 (ボストンとシアトル) の郵便番号値が同じ (12345) であることを示しています。 これは、データセット内のデータ品質の問題を示唆しています。

list_dependency_violations 関数には、欠損値の処理、違反値にマップされた値の表示、返される違反の数の制限、カウント列または決定項列による結果の並べ替えのためのオプションが用意されています。

list_dependency_violations の出力は、データセット内のデータ品質の問題を特定するのに役立ちます。 ただし、結果を慎重に調べ、データのコンテキストを考慮して、特定された問題に対処するための最も適切な措置を決定する必要があります。 このアプローチには、分析またはモデルの信頼性と有効性を確保するために、データのクリーニング、検証、または探索がさらに必要になる場合があります。

データ品質の問題を視覚化する

データ品質の問題は、データに基づいて構築された分析またはモデルの信頼性と有効性を損ねる可能性があります。 これらの問題を特定して対処することは、結果の精度を確保するために重要です。 データ品質の問題を検出するには、データセット内の列間の機能依存関係の違反を調べることができます。 これらの違反を視覚化すると、問題がより明確に示され、これらにより効果的に対処するのに役立ちます。

plot_dependency_violations 関数は、データセット内の列間の機能依存関係の違反を視覚化するのに役立ちます。 決定項列と依存列を指定すると、この関数で違反値がグラフィカル形式で表示され、データ品質の問題の性質と程度を理解しやすくなります。

次のコード スニペットは、plot_dependency_violations 関数の使用方法を示しています。

from sempy.fabric import FabricDataFrame
from sempy.dependencies import plot_dependency_violations
from sempy.samples import download_synthea

download_synthea(which='small')

df = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv"))

df.plot_dependency_violations(determinant_col="ZIP", dependent_col="CITY")

この例では、この関数は、ZIP (決定項) 列と CITY (依存) 列の間に既存の機能的な依存関係があることを前提としています。 データセットにデータ品質の問題がある場合 (複数の都市に同じ郵便番号が割り当てられているなど)、この関数は違反値のグラフを生成します。

plot_dependency_violations 関数には、欠損値の処理、違反値にマップされた値の表示、返される違反の数の制限、カウント列または決定項列による結果の並べ替えのためのオプションが用意されています。

plot_dependency_violations 関数は、データセット内のデータ品質の問題を特定するのに役立つ視覚化を生成します。 ただし、結果を慎重に調べ、データのコンテキストを考慮して、特定された問題に対処するための最も適切な措置を決定する必要があります。 このアプローチには、分析またはモデルの信頼性と有効性を確保するために、データのクリーニング、検証、または探索がさらに必要になる場合があります。

plot_dependency_violations 関数の出力を示すスクリーンショット。

機能的制約を適用する

データ品質は、データセットに基づいて構築された分析またはモデルの信頼性と有効性を確保するために不可欠です。 データセット内の列間に機能的制約を適用すると、データ品質の向上の役に立ちます。 機能的制約は、列間のリレーションシップの一貫性と正確性を確保する上で役に立ちます。これにより、分析やモデルの結果がより正確になることにつながります。

drop_dependency_violations 関数は、データセット内の列間に機能的制約を適用するのに役立ちます。 この関数は、指定された制約に違反する行を削除します。 決定列と依存列を指定すると、この関数は、2 つの列間の機能的制約に準拠していない値を持つ行を削除します。

次のコード スニペットは、drop_dependency_violations 関数の使用方法を示しています。

from sempy.fabric import FabricDataFrame
from sempy.samples import download_synthea

download_synthea(which='small')

df = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv"))

cleaned_df = df.drop_dependency_violations(determinant_col="ZIP", dependent_col="CITY")

ここでは、この関数は ZIP (決定値) 列と CITY (依存) 列の間に機能的制約を適用します。 決定項の値ごとに、依存値の最も一般的な値が選択され、他の値を持つすべての行が削除されます。 たとえば、このデータセットの場合、CITY=Seattle の行が削除され、機能依存関係 ZIP -> CITY が出力に保持されます。

郵便番号 CITY
12345 シアトル
12345 ボストン
12345 ボストン
98765 Baltimore
00000 サンフランシスコ

drop_dependency_violations 関数は、出力の詳細度を制御するための verbose オプションを提供します。 verbose=1 を設定すると、削除された行の数を確認できます。 verbose=2 値は、削除された行の全体的行内容を示します。

drop_dependency_violations 関数は、データセット内の列間に機能的制約を適用できます。これは、データ品質を向上させ、分析またはモデルでより正確な結果をもたらすのに役立ちます。 ただし、データセットから重要な情報を誤って削除しないように、データのコンテキストと、適用する機能的制約を慎重に検討する必要があります。