機能依存関係はテーブル内の列間のリレーションシップであり、ある列の値によって別の列の値が決まります。 これらの依存関係を理解することは、データ内のパターンとリレーションシップを明らかにするのに役立ちます。 この理解は、特徴エンジニアリング、データ クリーニング、モデル構築のタスクに役立ちます。 機能依存関係は、検出が困難な可能性があるデータ品質の問題を見つけて修正するのに役立つ効果的なインバリアントとして機能します。
この記事では、セマンティック リンクを使用して以下を行います。
- FabricDataFrame の列間の依存関係を検索する
- 依存関係を視覚化する
- データ品質の問題を特定する
- データ品質の問題を視覚化する
- データセット内の列間に機能的制約を適用する
前提条件
Microsoft Fabric サブスクリプションを取得します。 または、無料のMicrosoft Fabric試用版にサインアップします。
Microsoft Fabric にサインインします。
ホーム ページの左下にあるエクスペリエンス スイッチャーを使用して Fabric に切り替えます。
- Microsoft Fabricにあるデータ サイエンス エクスペリエンスに移動します。
- コードをコピーしてセルに貼り付ける 新しいノートブック を作成します。
- Spark 3.4 以降では、Fabric を使用する場合、セマンティック リンクは既定のランタイムで使用でき、インストールする必要はありません。 Spark 3.3 以前を使用している場合、またはセマンティック リンクの最新バージョンに更新する場合は、次のコマンドを実行できます。
python %pip install -U semantic-link - レイクハウスをノートブックに追加します。
セマンティック リンクは、既定の Fabric ランタイムで使用できます。 セマンティック リンクの最新バージョンに更新するには、次のコマンドを実行します。
%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 値を持つ行を評価から排除します。 この削除により、次の例に示すように、非推移的な依存関係が発生する可能性があります。
| ある | B | C |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 1 | 1 |
| 1 | NAN | 9 |
| 2 | NAN | 2 |
| 2 | 2 | 2 |
次の例に示すように、 dropna=True オプションを指定すると、依存関係チェーンによってサイクルが形成される場合があります。
| ある | 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
import pandas as pd
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 を返します。
データ品質の問題を特定する
データ品質の問題は、欠損値、不整合、不正確さなど、さまざまな形を取る可能性があります。 データに基づいて構築された分析またはモデルの信頼性と有効性を確保するには、これらの問題を特定して対処することが重要です。 データ品質の問題を検出する 1 つの方法は、データセット内の列間の機能依存関係の違反を調べることです。
list_dependency_violations関数は、データセット列間の機能依存関係の違反を見つけるのに役立ちます。 決定列と依存列を指定すると、関数には、関数の依存関係に違反する値と、それぞれの出現回数が表示されます。 この情報は、おおよその依存関係を検査し、データ品質の問題を特定するのに役立ちます。
次のコード スニペットは、 list_dependency_violations 関数の使用方法を示しています。
from sempy.fabric import FabricDataFrame
from sempy.samples import download_synthea
import pandas as pd
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 (依存) 列の間に機能的な依存関係があることを前提としています。 データセットにデータ品質の問題がある場合 (たとえば、複数の都市に割り当てられているのと同じ郵便番号) は、問題のあるデータを出力します。
| ZIP | 都市 | 数える |
|---|---|---|
| 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.samples import download_synthea
import pandas as pd
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関数は、データセットのデータ品質の問題を特定するのに役立つ視覚化を生成します。 ただし、結果を慎重に調べ、データのコンテキストを考慮して、特定された問題に対処するための最も適切な措置を決定する必要があります。 このアプローチには、分析またはモデルの信頼性と有効性を確保するために、データのクリーニング、検証、または探索がさらに必要になる場合があります。
機能的制約を適用する
データ品質は、データセットに基づいて構築された分析またはモデルの信頼性と有効性を確保するために不可欠です。 データセット内の列間に機能的制約を適用すると、データ品質の向上の役に立ちます。 機能上の制約により、列間のリレーションシップの精度と一貫性が確保され、より正確な分析やモデルの結果が得られます。
drop_dependency_violations関数は、データセット内の列間に機能制約を適用します。 指定された制約に違反する行が削除されます。 決定列と依存列を指定すると、この関数は、2 つの列間の機能的制約に準拠していない値を持つ行を削除します。
次のコード スニペットは、drop_dependency_violations 関数の使用方法を示しています。
from sempy.fabric import FabricDataFrame
from sempy.samples import download_synthea
import pandas as pd
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 が出力に保持されます。
| ZIP | 都市 |
|---|---|
| 12345 | シアトル |
| 12345 | ボストン |
| 12345 | ボストン |
| 98765 | ボルチモア |
| 00000 | サンフランシスコ |
drop_dependency_violations 関数は、出力の詳細度を制御するための verbose オプションを提供します。
verbose=1 を設定すると、削除された行の数を確認できます。
verbose=2 値は、削除された行の全体的行内容を示します。
drop_dependency_violations 関数は、データセット内の列間に機能的制約を適用できます。これは、データ品質を向上させ、分析またはモデルでより正確な結果をもたらすのに役立ちます。 ただし、データセットから重要な情報を誤って削除しないように、データのコンテキストと、適用する機能上の制約を慎重に検討してください。