Dela via


Självstudie: Analysera funktionella beroenden i en semantisk modell

I den här självstudien bygger du vidare på tidigare arbete som utförts av en Power BI-analytiker och lagras i form av semantiska modeller (Power BI-datauppsättningar). Genom att använda SemPy (förhandsversion) i Synapse Data Science-upplevelsen i Microsoft Fabric analyserar du funktionella beroenden som finns i kolumner i en DataFrame. Den här analysen hjälper till att identifiera problem med datakvalitet som inte är triviala för att få mer exakta insikter.

I den här handledningen lär du dig hur du:

  • Använd domänkunskap för att formulera hypoteser om funktionella beroenden i en semantisk modell.
  • Bekanta dig med komponenter i semantiklänkens Python-bibliotek (SemPy) som stöder integrering med Power BI och hjälper till att automatisera datakvalitetsanalys. Dessa komponenter omfattar:
    • FabricDataFrame – en Pandas-liknande struktur som utökas med ytterligare semantisk information.
    • Användbara funktioner för att hämta semantiska modeller från en Fabric-arbetsyta till din notebook.
    • Användbara funktioner som automatiserar utvärderingen av hypoteser om funktionella beroenden och som identifierar överträdelser av relationer i dina semantiska modeller.

Förutsättningar

  • Välj Arbetsytor i det vänstra navigeringsfönstret för att hitta och välja din arbetsyta. Den här arbetsytan blir din aktuella arbetsyta.

  • Ladda ned den semantiska modellen Customer Profitability Sample.pbix från GitHub-lagringsplatsen fabric-samples .

  • På arbetsytan väljer du Importera>rapport eller paginerad rapport>från den här datorn för att ladda upp filen Customer Profitability Sample.pbix till din arbetsyta.

Följ med i anteckningsboken

Den powerbi_dependencies_tutorial.ipynb notebook-filen medföljer denna självstudie.

Konfigurera anteckningsboken

I det här avsnittet konfigurerar du en notebook-miljö med nödvändiga moduler och data.

  1. Installera SemPy från PyPI med hjälp av den %pip in-line-installationsfunktionen i notebook-filen:

    %pip install semantic-link
    
  2. Utför nödvändiga importer av moduler som du behöver senare:

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

Läsa in och förbearbeta data

I den här självstudien används en standardexempel på en semantisk modell av Customer Profitability Sample.pbix. En beskrivning av semantikmodellen finns i exempel på kundlönsamhet för Power BI-.

  1. Läs in Power BI-data i FabricDataFrames med hjälp av SemPys read_table-funktion:

    dataset = "Customer Profitability Sample"
    customer = fabric.read_table(dataset, "Customer")
    customer.head()
    
  2. Läs in tabellen State i en FabricDataFrame:

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

    Även om utdata från den här koden ser ut som en Pandas DataFrame har du faktiskt initierat en datastruktur som kallas en FabricDataFrame som stöder vissa användbara åtgärder ovanpå Pandas.

  3. Kontrollera datatypen för customer:

    type(customer)
    

    Utdata bekräftar att customer är av typen sempy.fabric._dataframe._fabric_dataframe.FabricDataFrame.'

  4. Anslut customer och state DataFrames:

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

Identifiera funktionella beroenden

Ett funktionellt beroende manifesterar sig som en en-till-många-relation mellan värdena i två (eller flera) kolumner i en DataFrame. Dessa relationer kan användas för att automatiskt identifiera datakvalitetsproblem.

  1. Kör SemPys find_dependencies funktion på den sammanfogade DataFrame för att identifiera befintliga funktionella beroenden mellan värden i kolumnerna:

    dependencies = customer_state_df.find_dependencies()
    dependencies
    
  2. Visualisera identifierade beroenden med hjälp av SemPys plot_dependency_metadata funktion:

    plot_dependency_metadata(dependencies)
    

    Skärmbild som visar diagrammet med beroendemetadata.

    Som förväntat visar diagrammet funktionella beroenden att kolumnen Customer avgör vissa kolumner som City, Postal Codeoch Name.

    Överraskande nog visar diagrammet inte ett funktionellt beroende mellan City och Postal Code, förmodligen för att det finns många överträdelser i relationerna mellan kolumnerna. Du kan använda SemPys plot_dependency_violations-funktion för att visualisera överträdelser av beroenden mellan specifika kolumner.

Utforska data för kvalitetsproblem

  1. Rita ett diagram med SemPys plot_dependency_violations visualiseringsfunktion.

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

    Skärmbild som visar diagrammet över beroendeöverträdelser.

    Diagrammet över beroendeöverträdelser visar värden för Postal Code till vänster och värden för City till höger. En kant ansluter en Postal Code till vänster med en City till höger om det finns en rad som innehåller dessa två värden. Kanterna kommenteras med antalet sådana rader. Det finns till exempel två rader med postnummer 20004, en med staden "North Tower" och den andra med staden "Washington".

    Dessutom visar diagrammet några överträdelser och många tomma värden.

  2. Bekräfta antalet tomma värden för Postal Code:

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

    50 rader har NA för postnummer.

  3. Släpp rader med tomma värden. Leta sedan reda på beroenden med hjälp av funktionen find_dependencies. Observera den extra parametern verbose=1 som ger en inblick i det interna arbetet i SemPy:

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

    Villkorsstyrd entropi för Postal Code och City är 0,049. Det här värdet anger att det finns funktionella beroendeöverträdelser. Innan du åtgärdar överträdelserna höjer du tröskelvärdet för villkorsstyrd entropi från standardvärdet för 0.01 till 0.05, bara för att se beroendena. Lägre tröskelvärden resulterar i färre beroenden (eller högre selektivitet).

  4. Höj tröskelvärdet för villkorsstyrd entropi från standardvärdet för 0.01 till 0.05:

    plot_dependency_metadata(customer_state_df2.find_dependencies(threshold=0.05))
    

    Diagram över beroendemetadata med ett högre tröskelvärde för entropi.

    Om du använder domänkunskaper om vilken entitet som avgör värden för andra entiteter verkar det här beroendediagrammet vara korrekt.

  5. Utforska fler problem med datakvalitet som har identifierats. En streckad pil kopplar till exempel City och Region, vilket indikerar att beroendet bara är ungefärligt. Den här ungefärliga relationen kan innebära att det finns ett partiellt funktionellt beroende.

    customer_state_df.list_dependency_violations('City', 'Region')
    
  6. Ta en närmare titt på varje fall där ett icke-tomt Region-värde orsakar en överträdelse.

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

    Resultatet visar att staden Downers Grove ligger i Illinois och Nebraska. Downer's Grove är dock en stad i Illinois, inte Nebraska.

  7. Ta en titt på staden Fremont:

    customer_state_df[customer_state_df.City=='Fremont']
    

    Det finns en stad som heter Fremont i Kalifornien. Men för Texas returnerar sökmotorn Premont, inte Fremont.

  8. Det är också misstänkt att se överträdelser av beroendet mellan Name och Country/Region, vilket anges av den streckade linjen i den ursprungliga grafen över beroendeöverträdelser (innan raderna med tomma värden släpps).

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

    Det verkar som om en kund, SDI Design finns i två regioner – USA och Kanada. Denna förekomst kanske inte är en semantisk överträdelse, men kan bara vara ett ovanligt fall. Ändå är det värt att ta en närmare titt:

  9. Ta en närmare titt på kundens SDI Design:

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

    Ytterligare kontroll visar att det faktiskt är två olika kunder (från olika branscher) med samma namn.

Undersökande dataanalys är en spännande process, och det är även datarensning. Det finns alltid något som data döljer, beroende på hur du ser på dem, vad du vill fråga och så vidare. Semantisk länk ger dig nya verktyg som du kan använda för att uppnå mer med dina data.

Kolla in andra handledningar för Semantisk länk/SemPy: