次の方法で共有


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

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

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

  • 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 以前を使用している場合、またはセマンティック リンクの最新バージョンに更新する場合は、次のコマンドを実行できます。

python %pip install -U semantic-link  

データの機能依存関係を検索する

SemPy の find_dependencies 関数は、FabricDataFrame の列間の機能的依存関係を検出します。 この関数は、条件付きエントロピーのしきい値を用いて、近似的な機能依存性を発見します。条件付きエントロピーが低い場合、列間の依存性が強いことを示します。 find_dependencies 関数の選択性を高めるために、条件付きエントロピのしきい値を低く設定できます。 しきい値が低いほど、より強力な依存関係のみが検出されることを意味します。

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

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

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

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

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

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

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

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 関数の出力を示すスクリーンショット。

機能的制約を適用する

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

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
12345 シアトル
12345 ボストン
12345 ボストン
98765 Baltimore
00000 サンフランシスコ

CITY=Seattle の行が削除され、機能依存関係 ZIP -> CITY が出力に保持されます。

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

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