教學課程:分析語意模型中的功能相依性
在本教學課程中,您會以Power BI分析師先前完成的工作為基礎,並以語意模型的形式儲存(Power BI 數據集)。 藉由在 Microsoft Fabric 內的 Synapse 資料科學 體驗中使用 SemPy (預覽),您可以分析 DataFrame 數據行中存在的功能相依性。 此分析有助於探索非即時數據質量問題,以取得更精確的深入解析。
在本教學課程中,您會了解如何:
- 套用領域知識,以制定語意模型中功能相依性的假設。
- 熟悉語意連結的 Python 連結庫 (SemPy) 元件,可支援與 Power BI 整合,並協助自動化數據品質分析。 這些元件包括:
- FabricDataFrame - 使用其他語意信息增強的 pandas 類似結構。
- 將語意模型從 Fabric 工作區提取到筆記本的實用函式。
- 實用的函式,可自動評估有關功能相依性的假設,以及識別語意模型中關聯性的違規。
必要條件
取得 Microsoft Fabric 訂用帳戶。 或者,註冊免費的 Microsoft Fabric 試用版。
登入 Microsoft Fabric。
使用首頁左側的體驗切換器,切換至 Synapse 資料科學 體驗。
從左側瀏覽窗格中選取 [工作區 ],以尋找並選取您的工作區。 此工作區會變成您目前的工作區。
在筆記本中跟著
powerbi_dependencies_tutorial.ipynb 筆記本隨附本教學課程。
若要開啟本教學課程隨附的筆記本,請遵循準備系統以進行數據科學教學課程中的指示,將筆記本匯入您的工作區。
如果您想要複製並貼上此頁面中的程式碼,您可以 建立新的筆記本。
開始執行程序代碼之前,請務必將 Lakehouse 附加至筆記本 。
設定筆記本
在本節中,您會使用必要的模組和數據來設定筆記本環境。
使用
%pip
筆記本內的內嵌安裝功能從 PyPI 安裝SemPy
:%pip install semantic-link
執行稍後所需模組的必要匯入:
import sempy.fabric as fabric from sempy.dependencies import plot_dependency_metadata
載入和前置處理數據
本教學課程使用標準範例語意模型 客戶獲利率 Sample.pbix。 如需語意模型的描述,請參閱 Power BI 的客戶獲利率範例。
使用 SemPy 的
read_table
函式,將 Power BI 數據載入 FabricDataFrames:dataset = "Customer Profitability Sample" customer = fabric.read_table(dataset, "Customer") customer.head()
將
State
數據表載入 FabricDataFrame:state = fabric.read_table(dataset, "State") state.head()
雖然此程式代碼的輸出看起來像 pandas DataFrame,但您實際上已初始化稱為 的數據結構,其
FabricDataFrame
支援 pandas 上的一些實用作業。檢查的
customer
資料型態:type(customer)
輸出會
customer
確認 類型為sempy.fabric._dataframe._fabric_dataframe.FabricDataFrame
。'customer
聯結 和state
DataFrame:customer_state_df = customer.merge(state, left_on="State", right_on="StateCode", how='left') customer_state_df.head()
識別功能相依性
功能相依性會將本身顯示為 DataFrame 內兩個或多個數據行中值之間的一對多關聯性。 這些關聯性可用來自動偵測數據質量問題。
在合併的數據框架上執行 SemPy 的 函
find_dependencies
式,以識別數據行中值之間的任何現有功能相依性:dependencies = customer_state_df.find_dependencies() dependencies
使用 SemPy 函
plot_dependency_metadata
式將識別的相依性視覺化:plot_dependency_metadata(dependencies)
如預期般,功能相依性圖表顯示
Customer
資料行會決定某些資料行,例如City
、Postal Code
和Name
。令人驚訝的是,圖表不會顯示 和
Postal Code
之間的功能相依性,可能是因為數據行之間的City
關聯性有許多違規。 您可以使用 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 個數據列具有郵遞區編碼的 NA。
卸除具有空白值的數據列。 然後,使用函式尋找相
find_dependencies
依性。 請注意額外參數verbose=1
,其提供 SemPy 內部運作的一瞥:customer_state_df2=customer_state_df.dropna() customer_state_df2.find_dependencies(verbose=1)
和
City
的條件式 entropyPostal Code
為 0.049。 這個值表示有功能相依性違規。 修正違規之前,請將條件式 entropy 的臨界值從的預設值0.01
提高為0.05
,只是若要查看相依性。 較低的閾值會產生較少的相依性(或更高的選擇性)。將條件式 entropy 上的臨界值從 預設值
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']
結果顯示唐尼斯格羅夫市發生在伊利諾伊州和內布拉斯加州。 然而,唐納的格羅夫是伊利諾伊州一個城市,而不是內布拉斯加州。
看看弗里蒙特市:
customer_state_df[customer_state_df.City=='Fremont']
也值得懷疑的是,查看和
Country/Region
之間的Name
相依性違規違規,如原始相依性違規圖表中的虛線所表示(在卸除具有空白值的數據列之前)。customer_state_df.list_dependency_violations('Name', 'Country/Region')
似乎有一個客戶,SDI 設計存在於兩個區域 - 美國 和加拿大。 此事件可能不是語意違規,但可能只是罕見的情況。 不過,值得仔細看看:
進一步了解客戶 SDI 設計:
customer_state_df[customer_state_df.Name=='SDI Design']
進一步檢查顯示,它實際上是兩個不同的客戶(來自不同行業),同名。
探勘數據分析是一個令人興奮的程序,數據清理也是如此。 根據您查看數據的方式、您想要詢問的內容等等,數據一律會隱藏。 語意連結提供您可用來達成更多數據的新工具。
相關內容
查看語意連結 /SemPy 的其他教學課程:
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應