共用方式為


教學課程:分析語意模型中的功能相依性

在本教學課程中,您會以Power BI分析師先前完成的工作為基礎,並以語意模型的形式儲存(Power BI 數據集)。 藉由在 Microsoft Fabric 內的 Synapse 資料科學 體驗中使用 SemPy (預覽),您可以分析 DataFrame 數據行中存在的功能相依性。 此分析有助於探索非即時數據質量問題,以取得更精確的深入解析。

在本教學課程中,您會了解如何:

  • 套用領域知識,以制定語意模型中功能相依性的假設。
  • 熟悉語意連結的 Python 連結庫 (SemPy) 元件,可支援與 Power BI 整合,並協助自動化數據品質分析。 這些元件包括:
    • FabricDataFrame - 使用其他語意信息增強的 pandas 類似結構。
    • 將語意模型從 Fabric 工作區提取到筆記本的實用函式。
    • 實用的函式,可自動評估有關功能相依性的假設,以及識別語意模型中關聯性的違規。

必要條件

  • 從左側瀏覽窗格中選取 [工作區 ],以尋找並選取您的工作區。 此工作區會變成您目前的工作區。

  • 網狀架構範例 GitHub 存放庫下載客戶獲利率 Sample.pbix 語意模型,並將其上傳至您的工作區。

在筆記本中跟著

powerbi_dependencies_tutorial.ipynb 筆記本隨附本教學課程。

若要開啟本教學課程隨附的筆記本,請遵循準備系統以進行數據科學教學課程中的指示,將筆記本匯入您的工作區。

如果您想要複製並貼上此頁面中的程式碼,您可以 建立新的筆記本

開始執行程序代碼之前,請務必將 Lakehouse 附加至筆記本

設定筆記本

在本節中,您會使用必要的模組和數據來設定筆記本環境。

  1. 使用%pip筆記本內的內嵌安裝功能從 PyPI 安裝SemPy

    %pip install semantic-link
    
  2. 執行稍後所需模組的必要匯入:

    import sempy.fabric as fabric
    from sempy.dependencies import plot_dependency_metadata
    

載入和前置處理數據

本教學課程使用標準範例語意模型 客戶獲利率 Sample.pbix。 如需語意模型的描述,請參閱 Power BI 的客戶獲利率範例。

  1. 使用 SemPy 的 read_table 函式,將 Power BI 數據載入 FabricDataFrames:

    dataset = "Customer Profitability Sample"
    customer = fabric.read_table(dataset, "Customer")
    customer.head()
    
  2. State 數據表載入 FabricDataFrame:

    state = fabric.read_table(dataset, "State")
    state.head()
    

    雖然此程式代碼的輸出看起來像 pandas DataFrame,但您實際上已初始化稱為 的數據結構,其 FabricDataFrame 支援 pandas 上的一些實用作業。

  3. 檢查的 customer資料型態:

    type(customer)
    

    輸出會 customer 確認 類型為 sempy.fabric._dataframe._fabric_dataframe.FabricDataFrame。'

  4. customer聯結 和 state DataFrame:

    customer_state_df = customer.merge(state, left_on="State", right_on="StateCode",  how='left')
    customer_state_df.head()
    

識別功能相依性

功能相依性會將本身顯示為 DataFrame 內兩個或多個數據行中值之間的一對多關聯性。 這些關聯性可用來自動偵測數據質量問題。

  1. 在合併的數據框架上執行 SemPy 的 函 find_dependencies 式,以識別數據行中值之間的任何現有功能相依性:

    dependencies = customer_state_df.find_dependencies()
    dependencies
    
  2. 使用 SemPy 函 plot_dependency_metadata 式將識別的相依性視覺化:

    plot_dependency_metadata(dependencies)
    

    顯示相依性元數據繪圖的螢幕快照。

    如預期般,功能相依性圖表顯示 Customer 資料行會決定某些資料行,例如 CityPostal CodeName

    令人驚訝的是,圖表不會顯示 和Postal Code之間的功能相依性,可能是因為數據行之間的City關聯性有許多違規。 您可以使用 SemPy 的 函 plot_dependency_violations 式,將特定數據行之間的相依性違規可視化。

探索質量問題的數據

  1. 使用 SemPy 的 plot_dependency_violations 視覺效果函式繪製圖表。

    customer_state_df.plot_dependency_violations('Postal Code', 'City')
    

    顯示相依性違規繪圖的螢幕快照。

    相依性違規的繪圖會顯示左側的值 Postal Code ,以及右側的值 City 。 如果有包含這兩個值的資料列,邊緣會連接 Postal Code 左側 City 與右側的 。 邊緣會加上這類數據列計數的批注。 例如,有兩個數據列有郵遞區編碼 20004,一個是城市 「North Tower」,另一個是城市 「Washington」。。

    此外,此繪圖會顯示一些違規和許多空白值。

  2. 確認的空值 Postal Code數目:

    customer_state_df['Postal Code'].isna().sum()
    

    50 個數據列具有郵遞區編碼的 NA。

  3. 卸除具有空白值的數據列。 然後,使用函式尋找相 find_dependencies 依性。 請注意額外參數 verbose=1 ,其提供 SemPy 內部運作的一瞥:

    customer_state_df2=customer_state_df.dropna()
    customer_state_df2.find_dependencies(verbose=1)
    

    City 的條件式 entropy Postal Code 為 0.049。 這個值表示有功能相依性違規。 修正違規之前,請將條件式 entropy 的臨界值從的預設值 0.01 提高為 0.05,只是若要查看相依性。 較低的閾值會產生較少的相依性(或更高的選擇性)。

  4. 將條件式 entropy 上的臨界值從 預設值 0.01 提高為 0.05

    plot_dependency_metadata(customer_state_df2.find_dependencies(threshold=0.05))
    

    具有較高 entropy 閾值的相依性元數據繪圖。

    如果您套用哪些實體決定其他實體值的領域知識,則此相依性圖表似乎正確無誤。

  5. 探索偵測到的更多數據質量問題。 例如,虛線箭號聯結 CityRegion,表示相依性只是近似值。 此近似關聯性可能表示有部分功能相依性。

    customer_state_df.list_dependency_violations('City', 'Region')
    
  6. 進一步瞭解每個無空 Region 值造成違規的情況:

    customer_state_df[customer_state_df.City=='Downers Grove']
    

    結果顯示唐尼斯格羅夫市發生在伊利諾伊州和內布拉斯加州。 然而,唐納的格羅夫是伊利諾伊州個城市,而不是內布拉斯加州。

  7. 看看弗里蒙特

    customer_state_df[customer_state_df.City=='Fremont']
    

    加州有一個叫弗里蒙特的城市。 然而,對於德克薩斯州來說,搜尋引擎會 傳回普雷蒙特,而不是弗里蒙特。

  8. 也值得懷疑的是,查看和Country/Region之間的Name相依性違規違規,如原始相依性違規圖表中的虛線所表示(在卸除具有空白值的數據列之前)。

    customer_state_df.list_dependency_violations('Name', 'Country/Region')
    

    似乎有一個客戶,SDI 設計存在於兩個區域 - 美國 和加拿大。 此事件可能不是語意違規,但可能只是罕見的情況。 不過,值得仔細看看:

  9. 進一步了解客戶 SDI 設計

    customer_state_df[customer_state_df.Name=='SDI Design']
    

    進一步檢查顯示,它實際上是兩個不同的客戶(來自不同行業),同名。

探勘數據分析是一個令人興奮的程序,數據清理也是如此。 根據您查看數據的方式、您想要詢問的內容等等,數據一律會隱藏。 語意連結提供您可用來達成更多數據的新工具。

查看語意連結 /SemPy 的其他教學課程: