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 kan:

  • Anvend domænekendskab for at formulere hypoteser om funktionelle afhængigheder i en semantisk model.
  • Bliv fortrolig med komponenterne i det semantiske links Python-bibliotek (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

  • Få et Microsoft Fabric-abonnement. Du kan også tilmelde dig en gratis Prøveversion af Microsoft Fabric.

  • Log på Microsoft Fabric.

  • Brug oplevelsesskifteren i venstre side af startsiden til at skifte til Synapse Data Science-oplevelsen.

    Skærmbillede af menuen til skift af oplevelse, der viser, hvor du skal vælge Datavidenskab.

Følg med i notesbogen

Notesbogen powerbi_dependencies_tutorial.ipynb følger med dette selvstudium.

Hvis du vil åbne den medfølgende notesbog til dette selvstudium, skal du følge vejledningen i Forbered dit system til selvstudier om datavidenskab for at importere notesbogen til dit arbejdsområde.

Hvis du hellere vil kopiere og indsætte koden fra denne side, kan du oprette en ny notesbog.

Sørg for at vedhæfte et lakehouse til notesbogen , før du begynder at køre kode.

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 til 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 for eksempel på kunderentabilitet Sample.pbix. Du kan se 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 State tabellen 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, der kaldes en FabricDataFrame , der understøtter nogle nyttige handlinger oven på pandas.

  3. Kontrollér datatypen for customer:

    type(customer)
    

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

  4. Deltag i dataframes customer og state :

    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 visualiseringsfunktion plot_dependency_violations .

    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 på højre side. En kant forbinder en Postal Code på venstre side med en City på 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.05for 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 City f.eks. 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 værdi uden grund Region 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 en by i Illinois, ikke Nebraska.

  7. Se byen Fremont:

    customer_state_df[customer_state_df.City=='Fremont']
    

    Der er en by ved navn 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 du slipper rækkerne med tomme værdier).

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

    Det ser ud til, at én kunde, SDI Design, findes 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: