教學課程:分析語意模型中的功能相依性
在本教學課程中,您會在 Power BI 分析員先前完成之工作的基礎上進行組建,並以語意模型的形式儲存 (Power BI 資料集)。 藉由在 Microsoft Fabric 內的 Synapse 資料科學體驗中使用 SemPy (預覽),您可以分析 DataFrame 資料行中存在的功能相依性。 此分析有助於探索重要的資料品質問題,以取得更精確的深入解析。
在本教學課程中,您會了解如何:
- 套用領域知識,在語意模型中提出有關功能相依性的假設。
- 熟悉語意連結之 Python 庫 (SemPy) 的元件,其可支援與 Power BI 整合,並協助自動化資料品質分析。 這些元件包括:
- FabricDataFrame - 使用其他語意資訊增強的 Pandas 類似結構。
- 將語意模型從 Fabric 工作區提取至筆記本的實用函數。
- 實用的函數,可自動評估有關功能相依性的假設,並在您的語意模型中找出違反關聯性的情況。
必要條件
取得 Microsoft Fabric 訂用帳戶。 或註冊免費的 Microsoft Fabric 試用版。
登入 Microsoft Fabric。
使用首頁左側的體驗切換器,切換至 Synapse 資料科學體驗。
從左側瀏覽窗格中選取 [工作區],以尋找並選取您的工作區。 此工作區會成為您目前的工作區。
從 fabric-samples GitHub 存放庫下載 Customer Profitability Sample.pbix 語意模型,並將其上傳至您的工作區。
在筆記本中跟著做
本教學課程隨附 powerbi_dependencies_tutorial.ipynb 筆記本。
若要開啟本教學課程隨附的筆記本,請遵循為資料科學教學課程準備系統中的指示,將筆記本匯入您的工作區。
如果您想要複製並貼上此頁面中的程式碼,則可以建立新的筆記本。
開始執行程式碼之前,請務必將 Lakehouse 連結至筆記本。
設定筆記本
在本章節中,您會使用必要的模組和資料來設定筆記本環境。
使用筆記本內的
%pip
內嵌安裝功能從 PyPI 安裝SemPy
:%pip install semantic-link
對稍後需要的模組執行必要的匯入:
import sempy.fabric as fabric from sempy.dependencies import plot_dependency_metadata
載入及前置處理資料
本教學課程使用標準範例語意模型 Customer Profitability 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 中兩個或多個資料行中的值之間的一對多關聯性。 這些關聯性可用來自動偵測資料品質問題。
在合併的 DataFrame 上執行 SemPy 的
find_dependencies
函數,以識別資料行中的值之間的任何現有功能相依性: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 個資料列具有郵遞區號的 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']
結果顯示城市 Downers Grove 出現在伊利諾伊州和內布拉斯加州。 然而,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 的其他教學課程: