Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Använd funktionella beroenden för att rensa data. Det finns ett funktionellt beroende när en kolumn i en semantisk modell (en Power BI-datauppsättning) är beroende av en annan kolumn. En kolumn kan till exempel ZIP code fastställa värdet i en city kolumn. Ett funktionellt beroende visas som en en-till-många-relation mellan värden i två eller flera kolumner i en DataFrame. I den här självstudien används Synthea-datamängden för att visa hur funktionella beroenden hjälper till att identifiera datakvalitetsproblem.
I den här guiden lär du dig att:
- Använd domänkunskap för att skapa hypoteser om funktionella beroenden i en semantisk modell.
- Bekanta dig med komponenter i Semantic Link Python-biblioteket (SemPy) som automatiserar datakvalitetsanalys. Dessa komponenter omfattar:
-
FabricDataFrame— en Pandas-liknande struktur med ytterligare semantisk information. - Funktioner som automatiserar utvärdering av hypoteser om funktionella beroenden och identifierar överträdelser i dina semantiska modeller.
-
Förutsättningar
Få en Microsoft Fabric prenumeration. Eller registrera dig för en kostnadsfri Microsoft Fabric-utvärderingsversion.
Logga in på Microsoft Fabric.
Använd upplevelseväxlaren längst ner till vänster på din startsida för att växla till Fabric.
- Välj Arbetsytor i navigeringsfönstret och välj sedan din arbetsyta för att ange den som den aktuella arbetsytan.
Följ med i anteckningsboken
Följ den här självstudien med notebook-filen data_cleaning_functional_dependencies_tutorial.ipynb .
Om du vill öppna den medföljande notebook-filen för den här handledningen följer du anvisningarna i Förbereda systemet för handledningar för datavetenskap för att importera anteckningsboken till din arbetsyta.
Om du hellre kopierar och klistrar in koden från den här sidan kan du skapa en ny notebook-fil.
Se till att koppla en lakehouse till anteckningsbok innan du börjar köra kod.
Konfigurera anteckningsboken
I det här avsnittet konfigurerar du en notebook-miljö.
Kontrollera Spark-versionen. Om du använder Spark 3.4 eller senare i Microsoft Fabric ingår Semantic Link som standard, så du behöver inte installera det. Om du använder Spark 3.3 eller tidigare, eller om du vill uppdatera till den senaste Semantic Link, kör du följande kommando.
%pip install -U semantic-linkImportera de moduler som du använder i den här notebook-filen.
import pandas as pd import sempy.fabric as fabric from sempy.fabric import FabricDataFrame from sempy.dependencies import plot_dependency_metadataLadda ned exempeldata. I den här självstudien använder du Synthea-datamängden för syntetiska medicinska journaler (liten version för enkelhetens skull).
download_synthea(which='small')
Utforska data
Initiera en
FabricDataFramemed innehållet i providers.csv-filen .providers = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv")) providers.head()Kontrollera om det finns datakvalitetsproblem med SemPys
find_dependenciesfunktion genom att rita en graf över autodetected funktionella beroenden.deps = providers.find_dependencies() plot_dependency_metadata(deps)Diagrammet visar som
IdbestämmerNAMEochORGANIZATION. Det här resultatet förväntas eftersomIddet är unikt.Bekräfta att det
Idär unikt.providers.Id.is_uniqueKoden returnerar
Trueför att bekräfta attIdär unik.
Analysera funktionella beroenden på djupet
Diagrammet funktionella beroenden visar också att ORGANIZATION avgör ADDRESS och ZIP, som förväntat. Du kan dock förvänta dig att ZIP också fastställer CITY, men den streckade pilen anger att beroendet bara är ungefärligt och pekar mot ett datakvalitetsproblem.
Det finns andra egenheter i diagrammet.
NAME avgör till exempel inte GENDER, Id, SPECIALITYeller ORGANIZATION. Var och en av dessa egenheter kan vara värt att undersöka.
- Ta en djupare titt på den ungefärliga relationen mellan
ZIPochCITYmed hjälp av SemPyslist_dependency_violationsfunktion för att lista överträdelserna:
providers.list_dependency_violations('ZIP', 'CITY')
- Rita ett diagram med SemPys
plot_dependency_violationsvisualiseringsfunktion. Det här diagrammet är användbart om antalet överträdelser är litet:
providers.plot_dependency_violations('ZIP', 'CITY')
Diagrammet över beroendeöverträdelser visar värden för ZIP på vänster sida och värden för CITY till höger. En kant ansluter ett postnummer till vänster i diagrammet med en stad 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 02747-1242, en rad med staden "NORTH DARTHMOUTH" och den andra med staden "DARTHMOUTH", som du ser i föregående diagram och följande kod:
- Bekräfta observationerna från diagrammet genom att köra följande kod:
providers[providers.ZIP == '02747-1242'].CITY.value_counts()
Diagrammet visar också att bland de rader som har
CITYsom "DARTHMOUTH" har nio rader enZIPpå 02747-1262. En rad harZIP02747-1242. En rad harZIP02747-2537. Bekräfta dessa observationer med följande kod:providers[providers.CITY == 'DARTHMOUTH'].ZIP.value_counts()Det finns andra postnummer som är associerade med "DARTMOUTH", men dessa postnummer visas inte i diagrammet över beroendeöverträdelser eftersom de inte antyder datakvalitetsproblem. Postnumret "02747-4302" är till exempel unikt associerat med "DARTMOUTH" och visas inte i diagrammet över beroendeöverträdelser. Bekräfta genom att köra följande kod:
providers[providers.ZIP == '02747-4302'].CITY.value_counts()
Sammanfatta datakvalitetsproblem som identifierats med SemPy
Diagrammet över beroendeöverträdelser visar flera datakvalitetsproblem i den här semantiska modellen:
- Vissa ortnamn är versaler. Åtgärda problemet med hjälp av strängmetoder.
- Vissa stadsnamn har kvalificerare (eller prefix), till exempel "North" och "East". Postnumret "2128" mappar till exempel till "EAST BOSTON" en gång och till "BOSTON" en gång. Ett liknande problem uppstår mellan "NORTH DARTMOUTH" och "DARTMOUTH". Släpp dessa kvalificerare eller mappa postnummer till staden med den vanligaste förekomsten.
- Det finns stavfel i vissa stadsnamn, som "PITTSFIELD" jämfört med "PITTSFILED" och "NEWBURGPORT" jämfört med "NEWBURYPORT". För "NEWBURGPORT" löser du det här stavfelet med hjälp av den vanligaste förekomsten. För "PITTSFIELD", med bara en förekomst vardera, är automatisk tvetydighet mycket svårare utan extern kunskap eller en språkmodell.
- Ibland förkortas prefix som "West" till den enda bokstaven "W". Ersätt "W" med "West" om alla förekomster av "W" står för "West".
- Postnumret "02130" mappar till "BOSTON" en gång och "Jamaica Plain" en gång. Det här problemet är inte lätt att åtgärda. Med mer data mappar du till den vanligaste förekomsten.
Rensa data
Åtgärda versaler genom att ändra värden till rubrikfall.
providers['CITY'] = providers.CITY.str.title()Kör överträdelseidentifiering igen för att bekräfta att det finns färre tvetydigheter.
providers.list_dependency_violations('ZIP', 'CITY')
Förfina data manuellt eller ta bort rader som bryter mot funktionella begränsningar mellan kolumner med hjälp av SemPy-funktionen drop_dependency_violations .
För varje värde för den determinanta variabeln drop_dependency_violations väljer du det vanligaste värdet för den beroende variabeln och släpper alla rader med andra värden. Använd endast den här åtgärden om du är säker på att den här statistiska heuristiken leder till korrekta resultat för dina data. Annars skriver du din egen kod för att hantera de identifierade överträdelserna.
drop_dependency_violationsKör funktionen på kolumnernaZIPochCITY.providers_clean = providers.drop_dependency_violations('ZIP', 'CITY')Lista eventuella beroendeöverträdelser mellan
ZIPochCITY.providers_clean.list_dependency_violations('ZIP', 'CITY')
Koden returnerar en tom lista som anger att det inte finns några fler överträdelser av funktionsbegränsningen ZIP -> CITY.
Relaterat innehåll
Se andra självstudier för semantisk länk eller SemPy:
- Självstudie: Analysera funktionella beroenden i en exempelsemantisk modell
- Självstudie: Extrahera och beräkna Power BI-mått från en Jupyter Notebook-
- Självstudie: Identifiera relationer i en semantisk modell med hjälp av semantisk länk
- Självstudie: Identifiera relationer i Synthea-datauppsättningen med hjälp av semantisk länk
- Självstudie: Verifiera data med SemPy och Great Expectations (GX)