Selvstudium: Ryd op i data med funktionelle afhængigheder
I dette selvstudium bruger du funktionelle afhængigheder til datarensning. Der findes en funktionel afhængighed, når én kolonne i en semantisk model (et Power BI-datasæt) er en funktion i en anden kolonne. En postnummer kolonne kan f.eks. bestemme værdierne i en by kolonne. En funktionel afhængighed manifesterer sig som en en til mange-relation mellem værdierne i to eller flere kolonner i en DataFrame. I dette selvstudium bruges datasættet Synthea til at vise, hvordan funktionelle relationer kan hjælpe med at registrere problemer med datakvaliteten.
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 hjælper med at automatisere analyse af datakvalitet. Disse komponenter omfatter:
- FabricDataFrame – en pandaslignende struktur, der er forbedret med yderligere semantiske oplysninger.
- 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 Microsoft Fabric-prøveversion.
Log på Microsoft Fabric.
Brug oplevelsesskifteren nederst til venstre på startsiden til at skifte til Fabric.
- 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.
Følg med i notesbogen
Notesbogen data_cleaning_functional_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 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.
- For Spark 3.4 og nyere er semantisk link tilgængeligt i standardkørslen, når du bruger Fabric, og det er ikke nødvendigt at installere det. Hvis du bruger Spark 3.3 eller nedenfor, eller hvis du vil opdatere til den nyeste version af Semantic Link, kan du køre kommandoen:
python %pip install -U semantic-link
Udfør den nødvendige import af moduler, som du skal bruge senere:
import pandas as pd import sempy.fabric as fabric from sempy.fabric import FabricDataFrame from sempy.dependencies import plot_dependency_metadata from sempy.samples import download_synthea
Træk i eksempeldataene. I dette selvstudium skal du bruge Synthea datasæt af syntetiske medicinske journaler (lille version for nemheds skyld):
download_synthea(which='small')
Udforsk dataene
Initialiser en
FabricDataFrame
med indholdet af den providers.csv fil:providers = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv")) providers.head()
Kontrollér, om der er problemer med datakvaliteten med SemPys
find_dependencies
funktion ved at afbilde en graf over automatisk registrerede funktionelle afhængigheder:deps = providers.find_dependencies() plot_dependency_metadata(deps)
Grafen over funktionelle afhængigheder viser, at
Id
bestemmerNAME
ogORGANIZATION
(angivet med de udfyldte pile), hvilket forventes, daId
er entydig:Bekræft, at
Id
er entydig:providers.Id.is_unique
Koden returnerer
True
for at bekræfte, atId
er entydig.
Analysér funktionelle afhængigheder i dybden
Grafen over funktionelle afhængigheder viser også, at ORGANIZATION
bestemmer ADDRESS
og ZIP
som forventet. Du kan dog forvente, at ZIP
også bestemmer CITY
, men den stiplede pil angiver, at afhængigheden kun er omtrentlig, hvilket peger på et problem med datakvaliteten.
Der er andre egenskaber i grafen.
NAME
bestemmer f.eks. ikke GENDER
, Id
, SPECIALITY
eller ORGANIZATION
. Hver af disse særheder kan være værd at undersøge.
Se nærmere på den omtrentlige relation mellem
ZIP
ogCITY
ved hjælp af SemPyslist_dependency_violations
funktion for at se en tabelliste over overtrædelser:providers.list_dependency_violations('ZIP', 'CITY')
Tegn en graf med SemPys
plot_dependency_violations
visualiseringsfunktion. Denne graf er nyttig, hvis antallet af overtrædelser er lille:providers.plot_dependency_violations('ZIP', 'CITY')
Afbildningen af afhængighedsovertrædelser viser værdier for
ZIP
i venstre side og værdier forCITY
i højre side. En kant forbinder et postnummer i venstre side af afbildningen med en by 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 02747-1242, én række med byen "NORTH DARTHMOUTH" og den anden med byen "DARTHMOUTH", som vist i det forrige plot og følgende kode:Bekræft de tidligere observationer, du har foretaget med afbildningen af afhængighedsovertrædelser, ved at køre følgende kode:
providers[providers.ZIP == '02747-1242'].CITY.value_counts()
Afbildningen viser også, at blandt de rækker, der har
CITY
som "DARTHMOUTH", har ni rækker enZIP
på 02747-1262; én række har enZIP
på 02747-1242; og én række har enZIP
på 02747-2537. Bekræfter disse observationer med følgende kode:providers[providers.CITY == 'DARTMOUTH'].ZIP.value_counts()
Der er andre postnumre, der er knyttet til "DARTMOUTH", men disse postnumre vises ikke i grafen over afhængighedsovertrædelser, da de ikke antyder problemer med datakvaliteten. Postnummeret "02747-4302" er f.eks. entydigt knyttet til "DARTMOUTH" og vises ikke i grafen over afhængighedsovertrædelser. Bekræft ved at køre følgende kode:
providers[providers.ZIP == '02747-4302'].CITY.value_counts()
Opsummer problemer med datakvaliteten, der er registreret med SemPy
Når du går tilbage til grafen over afhængighedsovertrædelser, kan du se, at der er flere interessante problemer med datakvaliteten i denne semantiske model:
- Nogle bynavne er alle med store bogstaver. Dette problem er nemt at løse ved hjælp af strengmetoder.
- Nogle bynavne har kvalifikatorer (eller præfikser), f.eks. "Nord" og "Øst". Postnummeret "2128" knyttes f.eks. til "EAST BOSTON" én gang og til "BOSTON" én gang. Et lignende problem opstår mellem "NORTH DARTHMOUTH" og "DARTHMOUTH". Du kan prøve at slippe disse kvalifikatorer eller knytte postnumre til byen med den mest almindelige forekomst.
- Der er stavefejl i nogle byer, f.eks. "PITTSFIELD" vs. "PITTSFILED" og "NEWBURGPORT vs. "NEWBURYPORT". For "NEWBURGPORT" kan denne typo rettes ved hjælp af den mest almindelige forekomst. For "PITTSFIELD", der kun én forekomst hver gør det meget sværere for automatisk fjernelse uden ekstern viden eller brug af en sprogmodel.
- Nogle gange forkortes præfikser som "Vest" til et enkelt bogstav "W". Dette problem kan muligvis løses med en simpel erstatning, hvis alle forekomster af "W" står for "West".
- Postnummeret "02130" kort til "BOSTON" én gang og "Jamaica Plain" én gang. Dette problem er ikke let at løse, men hvis der var flere data, kan tilknytning til den mest almindelige forekomst være en potentiel løsning.
Ryd dataene
Løs problemer med store bogstaver ved at ændre al brug af store og små bogstaver til store og små bogstaver:
providers['CITY'] = providers.CITY.str.title()
Kør registreringen af overtrædelse igen for at se, at nogle af tvetydighederne er væk (antallet af overtrædelser er mindre):
providers.list_dependency_violations('ZIP', 'CITY')
På dette tidspunkt kan du tilpasse dine data mere manuelt, men en potentiel opgave til oprydning af data er at slippe rækker, der overtræder funktionelle begrænsninger mellem kolonner i dataene, ved hjælp af SemPys
drop_dependency_violations
funktion.For hver værdi af den determinante variabel fungerer
drop_dependency_violations
ved at vælge den mest almindelige værdi for den afhængige variabel og slippe alle rækker med andre værdier. Du bør kun anvende denne handling, hvis du er sikker på, at denne statistiske heuristik vil føre til de korrekte resultater for dine data. Ellers skal du skrive din egen kode for at håndtere de registrerede overtrædelser efter behov.Kør funktionen
drop_dependency_violations
på kolonnerneZIP
ogCITY
:providers_clean = providers.drop_dependency_violations('ZIP', 'CITY')
Angiv eventuelle afhængighedsovertrædelser mellem
ZIP
ogCITY
:providers_clean.list_dependency_violations('ZIP', 'CITY')
Koden returnerer en tom liste for at angive, at der ikke er flere overtrædelser af den funktionelle begrænsning CITY –> ZIP-.
Relateret indhold
Tjek andre selvstudier for semantisk link / SemPy:
- selvstudium: Analysér funktionelle afhængigheder i en semantisk eksempelmodel
- selvstudium: Udtræk og beregn Power BI-målinger fra en Jupyter-notesbog
- selvstudium: Find relationer i en semantisk model ved hjælp af semantisk link
- selvstudium: Find relationer i datasættet Synthea ved hjælp af semantisk link
- selvstudium: Valider data ved hjælp af GX- (SemPy and Great Expectations)