在本教學課程中,您會以儲存為語意模型 (Power BI 資料集) 的 Power BI 分析師所執行的工作為基礎。 透過在 Fabric Data Science 工作負載中使用 SemPy(預覽),你可以分析 DataFrame 欄位中的功能相依關係。 此分析可協助您發現細微的資料品質問題,以獲得更準確的見解。
在本教學課程中,您會了解如何:
- 套用領域知識,在語意模型中提出有關功能相依性的假設。
- 熟悉 Semantic Link 的 Python 程式庫 (SemPy) 元件,這些元件可與 Power BI 整合,並協助自動化資料品質分析。 這些元件包括:
- FabricDataFrame — 類似 pandas 的結構,透過額外的語意資訊增強
- 將 Fabric 工作區中的語意模型擷取到您的筆記本中的函式
- 評估功能相依性假設並識別語意模型中關係違規的函數
必要條件
取得 Microsoft Fabric 訂用帳戶。 或註冊免費的 Microsoft Fabric 試用版。
登入 Microsoft Fabric。
使用首頁左下角的體驗切換器切換到 Fabric。
從導覽窗格中選取 [工作區] ,以尋找並選取您的工作區。 此工作區會成為您目前的工作區。
從 fabric-samples GitHub 存放庫下載 Customer Profitability Sample.pbix 檔案。
在工作區中,選取 [從這部計算機匯入>報表或編頁報表>], 將 Customer Profitability Sample.pbix 檔案上傳至工作區。
在筆記本中跟著做
本教學課程隨附 powerbi_dependencies_tutorial.ipynb 筆記本。
若要開啟本教學課程隨附的筆記本,請遵循 準備您的系統以進行資料科學教學課程的指示,將筆記本匯入工作區。
如果您想要複製並貼上此頁面中的程式碼,則可以建立新的筆記本。
開始執行程式碼之前,請務必將 Lakehouse 連結至筆記本。
設定筆記型電腦
設定包含您所需模組和資料的筆記本環境。
使用
%pip在 Notebook 中從 PyPI 安裝 SemPy。%pip install semantic-link匯入您需要的模組。
import sempy.fabric as fabric from sempy.dependencies import plot_dependency_metadata
載入及前置處理資料
本教學課程使用標準範例語意模型 Customer Profitability Sample.pbix。 如需語意模型的描述,請參閱 Power BI 的客戶獲利率範例。
使用
fabric.read_table函數將 Power BI 資料載入至FabricDataFrame。dataset = "Customer Profitability Sample" customer = fabric.read_table(dataset, "Customer") customer.head()將表格
State載入FabricDataFrame.state = fabric.read_table(dataset, "State") state.head()雖然輸出看起來像 pandas DataFrame,但這段程式碼會初始化名為 a
FabricDataFrame的資料結構,該結構會在 pandas 之上新增作業。檢查
customer的資料類型。type(customer)輸出結果顯示
customer是sempy.fabric._dataframe._fabric_dataframe.FabricDataFrame。連接
customer和stateDataFrame物件。customer_state_df = customer.merge(state, left_on="State", right_on="StateCode", how='left') customer_state_df.head()
識別功能相依性
功能相依性是指在 DataFrame 中,兩個或多個資料行中的值之間的一對多關係。 使用這些關係來自動偵測資料品質問題。
在合併
find_dependencies上執行 Sempy 的DataFrame函數,以識別列值之間的功能依賴關係。dependencies = customer_state_df.find_dependencies() dependencies使用 Sempy 的
plot_dependency_metadata函數可視化依賴關係。plot_dependency_metadata(dependencies)函數相依圖顯示,
Customer資料行決定了像City、Postal Code和Name這類資料行。圖形未顯示
City與Postal Code之間存在函數相依性,可能是因為資料欄之間的關係中有許多違反情形。 使用 SemPy 的功能plot_dependency_violations可視化特定列之間的依賴違規。
探索資料中的品質問題
使用 SemPy 的
plot_dependency_violations視覺效果函數繪製關係圖。customer_state_df.plot_dependency_violations('Postal Code', 'City')
相依性違規的圖表左側顯示
Postal Code的值,右側顯示City的值。 如果有包含這兩個值的資料列,則邊緣會連線左側的Postal Code與右側的City。 邊緣標註了這類資料列的數量。 例如,有兩筆資料的郵遞區號為 20004,其中一筆的城市為 "North Tower",另一筆的城市為 "Washington"。該圖還顯示了一些違規行為和許多空值。
確認
Postal Code的空白值數目:customer_state_df['Postal Code'].isna().sum()有 50 列的
Postal Code為 NA。卸除具有空白值的資料列。 然後,使用
find_dependencies函數尋找相依性。 請注意額外參數verbose=1,以簡要了解 SemPy 的內部運作:customer_state_df2=customer_state_df.dropna() customer_state_df2.find_dependencies(verbose=1)Postal Code和City的條件熵為 0.049。 此值表示有功能相依性衝突。 修正衝突之前,請將條件熵的閾值從0.01的預設值提高為0.05,以查看相依性。 較低的閾值會產生較少的相依性 (或更高的選取性)。將條件熵的閾值從預設值
0.01提高為0.05:plot_dependency_metadata(customer_state_df2.find_dependencies(threshold=0.05))如果您套用網域知識,瞭解哪個實體決定其他實體的值,則此相依性圖表似乎很準確。
探索偵測到的更多資料品質問題。 例如,虛線箭頭聯結
City和Region,表示相依性只是近似值。 此近似關聯性可能表示存在部分功能相依性。customer_state_df.list_dependency_violations('City', 'Region')仔細看看每一種非空
Region值導致違規的情況:customer_state_df[customer_state_df.City=='Downers Grove']結果顯示了伊利諾伊州和內布拉斯加州的唐納斯格羅夫市。 然而,唐納斯格羅夫是 伊利諾伊州的一座城市,而不是內布拉斯加州。
看看 Fremont 市:
customer_state_df[customer_state_df.City=='Fremont']加州有一個叫 Fremont 的城市。 然而,對於德克薩斯州來說,搜尋引擎會傳回 Premont,而不是 Fremont。
看到
Name和Country/Region之間違反相依關係的情況也很可疑,如原始的相依關係違規圖中的虛線所示(在刪除空值資料列之前)。customer_state_df.list_dependency_violations('Name', 'Country/Region')SDI Design 的一位客戶出現在兩個區域 — 美國和加拿大。 這種情況可能不是語義違規,只是不常見。 儘管如此,還是值得仔細研究的:
進一步了解客戶 SDI Design:
customer_state_df[customer_state_df.Name=='SDI Design']進一步檢查後發現,兩位來自不同產業的客戶名稱相同。
探索性資料分析和資料清洗是迭代的。 你發現什麼取決於你的問題和觀點。 語義連結為您提供新工具,讓您從資料中獲得更多資訊。
相關內容
查看語義鏈接和 Sempy 的其他教程: