Del via


Selvstudium: Analysér funktionelle afhængigheder i en semantisk model

I dette selvstudium bygger du videre på tidligere arbejde udført af en Power BI-analytiker og gemt i form af semantiske modeller (Power BI-datasæt). Ved hjælp af SemPy (prøveversion) i Synapse Data Science-oplevelsen i Microsoft Fabric analyserer du funktionelle afhængigheder, der findes i kolonner i en DataFrame. Denne analyse hjælper med at finde problemer med kvaliteten af ikke-banale data for at få mere nøjagtig indsigt.

I dette selvstudium lærer du, hvordan du:

  • Anvend domænekendskab for at formulere hypoteser om funktionelle afhængigheder i en semantisk model.
  • Bliv fortrolig med komponenterne i Python-biblioteket for semantiske links (SemPy), der understøtter integration med Power BI og hjælper med at automatisere analyse af datakvalitet. Disse komponenter omfatter:
    • FabricDataFrame – en pandaslignende struktur, der er forbedret med yderligere semantiske oplysninger.
    • Nyttige funktioner til at trække semantiske modeller fra et Fabric-arbejdsområde ind i din notesbog.
    • Nyttige funktioner, der automatiserer evalueringen af hypoteser om funktionelle afhængigheder, og som identificerer overtrædelser af relationer i dine semantiske modeller.

Forudsætninger

  • Vælg arbejdsområder i navigationsruden til venstre for at finde og vælge dit arbejdsområde. Dette arbejdsområde bliver dit aktuelle arbejdsområde.

  • Download Customer Profitability Sample.pbix semantiske model fra GitHub-lageret med stofeksempler.

  • I dit arbejdsområde skal du vælge Importér>rapport eller Sideinddelt rapport>Fra denne computer for at uploade filen Eksempel på kunderentabilitet.pbix- til dit arbejdsområde.

Følg med i notesbogen

Notesbogen powerbi_dependencies_tutorial.ipynb følger med dette selvstudium.

Konfigurer notesbogen

I dette afsnit skal du konfigurere et notesbogmiljø med de nødvendige moduler og data.

  1. Installér SemPy fra PyPI ved hjælp af funktionen %pip indbygget installation i notesbogen:

    %pip install semantic-link
    
  2. Udfør den nødvendige import af moduler, som du skal bruge senere:

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

Indlæs og forbehandler dataene

I dette selvstudium bruges en semantisk standardmodel Eksempel på kunderentabilitet.pbix-. Du kan få en beskrivelse af den semantiske model under eksempel på kunderentabilitet for Power BI.

  1. Indlæs Power BI-dataene i FabricDataFrames ved hjælp af SemPys read_table funktion:

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

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

    Selvom outputtet af denne kode ligner en pandas DataFrame, har du faktisk initialiseret en datastruktur kaldet en FabricDataFrame, der understøtter nogle nyttige handlinger oven på pandas.

  3. Kontrollér datatypen for customer:

    type(customer)
    

    Resultatet bekræfter, at customer er af typen sempy.fabric._dataframe._fabric_dataframe.FabricDataFrame.'

  4. Deltag i customer og state DataFrames:

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

Identificer funktionelle afhængigheder

En funktionel afhængighed manifesterer sig som en en til mange-relation mellem værdierne i to (eller flere) kolonner i en DataFrame. Disse relationer kan bruges til automatisk at registrere problemer med datakvaliteten.

  1. Kør SemPys find_dependencies funktion på den flettede DataFrame for at identificere eventuelle eksisterende funktionelle afhængigheder mellem værdier i kolonnerne:

    dependencies = customer_state_df.find_dependencies()
    dependencies
    
  2. Visualiser de identificerede afhængigheder ved hjælp af SemPys plot_dependency_metadata funktion:

    plot_dependency_metadata(dependencies)
    

    Skærmbillede, der viser afbildningen af afhængighedsmetadata.

    Som forventet viser diagrammet over funktionelle afhængigheder, at kolonnen Customer bestemmer nogle kolonner, f.eks. City, Postal Codeog Name.

    Overraskende nok viser grafen ikke en funktionel afhængighed mellem City og Postal Code, sandsynligvis fordi der er mange overtrædelser i relationerne mellem kolonnerne. Du kan bruge SemPys plot_dependency_violations funktion til at visualisere overtrædelser af afhængigheder mellem bestemte kolonner.

Udforsk dataene for kvalitetsproblemer

  1. Tegn en graf med SemPys plot_dependency_violations visualiseringsfunktion.

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

    Skærmbillede, der viser afbildningen af afhængighedsovertrædelser.

    Afbildningen af afhængighedsovertrædelser viser værdier for Postal Code i venstre side og værdier for City i højre side. En kant forbinder en Postal Code i venstre side med en City i højre side, hvis der er en række, der indeholder disse to værdier. Kanterne anmærkes med antallet af sådanne rækker. Der er f.eks. to rækker med postnummeret 20004, den ene med byen "North Tower" og den anden med byen "Washington".

    Desuden viser afbildningen et par overtrædelser og mange tomme værdier.

  2. Bekræft antallet af tomme værdier for Postal Code:

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

    50 rækker har NA for postnummer.

  3. Slip rækker med tomme værdier. Find derefter afhængigheder ved hjælp af funktionen find_dependencies. Bemærk den ekstra parameter verbose=1, der giver et indblik i SemPys interne funktioner:

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

    Den betingede entropi for Postal Code og City er 0,049. Denne værdi angiver, at der er funktionelle afhængighedsovertrædelser. Før du retter fejlene, skal du hæve grænsen for betinget entropi fra standardværdien for 0.01 til 0.05, bare for at se afhængighederne. Lavere tærskler resulterer i færre afhængigheder (eller højere selektivitet).

  4. Hæv tærsklen for betinget entropi fra standardværdien for 0.01 til 0.05:

    plot_dependency_metadata(customer_state_df2.find_dependencies(threshold=0.05))
    

    Afbildning af afhængighedsmetadata med en højere grænse for entropi.

    Hvis du anvender domænekendskab til, hvilket objekt der bestemmer værdier for andre objekter, virker grafen over afhængigheder nøjagtig.

  5. Udforsk flere problemer med datakvaliteten, der blev registreret. En stiplet pil joinforbinder f.eks. City og Region, hvilket angiver, at afhængigheden kun er omtrentlig. Denne omtrentlige relation kan betyde, at der er en delvis funktionel afhængighed.

    customer_state_df.list_dependency_violations('City', 'Region')
    
  6. Se nærmere på hver af de tilfælde, hvor en ikke-Region værdi forårsager en overtrædelse:

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

    Resultatet viser Downers Grove by, der forekommer i Illinois og Nebraska. Downer's Grove er dog en by i Illinois, ikke Nebraska.

  7. Se byen Fremont:

    customer_state_df[customer_state_df.City=='Fremont']
    

    Der er en by kaldet Fremont i Californien. Men for Texas returnerer søgemaskinen Premont, ikke Fremont.

  8. Det er også mistænkeligt at se overtrædelser af afhængigheden mellem Name og Country/Region, som det fremgår af den stiplede linje i den oprindelige graf over afhængighedsovertrædelser (før rækkerne med tomme værdier slippes).

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

    Det ser ud til, at én kunde, SDI Design er til stede i to områder – USA og Canada. Denne forekomst er muligvis ikke en semantisk overtrædelse, men kan blot være et ualmindeligt tilfælde. Alligevel er det værd at se nærmere på:

  9. Se nærmere på kundens SDI Design:

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

    Yderligere inspektion viser, at det faktisk er to forskellige kunder (fra forskellige brancher) med samme navn.

Udforskning af dataanalyser er en spændende proces, og det samme er datarensning. Der er altid noget, som dataene skjuler, afhængigt af hvordan du ser på dem, hvad du vil spørge om osv. Semantisk link giver dig nye værktøjer, som du kan bruge til at opnå mere med dine data.

Tjek andre selvstudier for semantisk link / SemPy: