共用方式為


使用語意連結偵測、探索和驗證資料中的功能相依性

功能相依性指資料表中資料行之間的關聯性,其中一個資料行中的值用於判斷另一個資料行中的值。 了解這些相依性可協助您找出數據中的模式和關聯性,進而有助於特徵工程、數據清理和模型建置工作。 功能相依性可作為一種有效的不變因素,幫助您尋找並修正原本難以偵測的資料品質問題。

在本文中,您會使用語意連結來:

  • 尋找 FabricDataFrame 資料行之間的相依性
  • 視覺化相依性
  • 發現資料品質問題
  • 實現資料品質問題視覺化
  • 在資料集中的資料行之間強制執行功能限制

必要條件

  • 移至 Microsoft Fabric 中找到的 資料科學 體驗。
  • 建立新筆記本,以將程式碼複製/貼到儲存格中。
  • 若是 Spark 3.4 和更高版本,使用 Fabric 時,預設執行階段可使用語意連結,而且不需要安裝。 如果使用的是 Spark 3.3 或以下版本,或者想要更新為最新版本的語意連結,可以執行命令: python %pip install -U semantic-link  
  • 將 Lakehouse 新增至筆記本

若是 Spark 3.4 和更高版本,使用 Fabric 時,預設執行階段可使用語意連結,而且不需要安裝。 如果您使用 Spark 3.3 或更新版本,或想要更新為最新版本的 Semantic Link,請執行此命令:

%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 分組。 屬於單一群組的數據行會放在單一單元格中。 如果找不到合適的候選者,則會傳回空的 FabricDataFrame。

顯示 plot_dependencies 函數輸出的螢幕擷取畫面。

發現資料品質問題

數據質量問題可能會有各種形式,例如遺漏值、不一致或不準確。 識別和解決這些問題非常重要,以確保任何建置於數據上的分析或模型的可靠性與有效性。 偵測數據質量問題的其中一種方法是檢查數據集中數據行之間的功能相依性違規。

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 (相依) 資料行之間的功能相依性。 如果數據集有數據質量問題 ,例如,指派給多個城市的相同郵遞區號 ,函式會輸出有問題的數據:

郵遞區號 計數
12345 波士頓 2
12345 西雅圖 1

此輸出表示兩個不同的城市(波士頓和西雅圖)具有相同的郵遞區號值(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 式可協助在數據集中的數據行之間強制執行功能條件約束。 它違反指定條件約束的數據列。 假設有行列式數據行和相依數據行,此函式會移除數據列的值不符合兩個數據行之間的功能條件約束。

此代碼段示範如何使用 函 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 會保留於輸出中:

郵遞區號
12345 西雅圖
12345 波士頓
12345 波士頓
98765 巴爾的摩
00000 舊金山

drop_dependency_violations 式提供 verbose 控制輸出詳細信息的選項。 藉由設定 verbose=1,您可以看到已卸除的數據列數目。 值 verbose=2 會顯示已卸除數據列的整個數據列內容。

drop_dependency_violations 式可以在數據集中的數據行之間強制執行功能條件約束,這有助於改善數據品質,並在分析或模型中產生更精確的結果。 不過,您必須仔細考慮數據的內容,以及您選擇強制執行的功能條件約束,以確保您不會不小心從數據集中移除重要資訊。