Freigeben über


Lernprogramm: Bereinigen von Daten mit funktionalen Abhängigkeiten

Verwenden Sie funktionale Abhängigkeiten, um Daten zu bereinigen. Eine funktionale Abhängigkeit ist vorhanden, wenn eine Spalte in einem semantischen Modell (ein Power BI-Dataset) von einer anderen Spalte abhängt. Beispielsweise kann eine ZIP code Spalte den Wert in einer city Spalte bestimmen. Eine funktionale Abhängigkeit wird als 1:n-Beziehung zwischen Werten in zwei oder mehr Spalten in einer DataFrame. In diesem Lernprogramm wird das Synthea-Dataset verwendet, um zu zeigen, wie funktionsbezogene Abhängigkeiten helfen, Probleme mit der Datenqualität zu erkennen.

In diesem Lernprogramm erfahren Sie, wie Sie:

  • Wenden Sie Domänenwissen auf Formhypothes zu funktionalen Abhängigkeiten in einem semantischen Modell an.
  • Machen Sie sich mit Komponenten der Semantic Link Python-Bibliothek (SemPy) vertraut, die die Datenanalyse automatisieren. Zu diesen Komponenten gehören:
    • FabricDataFrame— eine Panda-ähnliche Struktur mit zusätzlichen semantischen Informationen.
    • Funktionen, die die Auswertung von Hypothesen zu funktionsbezogenen Abhängigkeiten automatisieren und Verstöße in Ihren semantischen Modellen identifizieren.

Voraussetzungen

  • Wählen Sie im Navigationsbereich Arbeitsbereiche aus, und wählen Sie dann Ihren Arbeitsbereich aus, um ihn als aktuellen Arbeitsbereich festzulegen.

Durchführung im Notebook

Verwenden Sie das data_cleaning_functional_dependencies_tutorial.ipynb-Notizbuch , um diesem Lernprogramm zu folgen.

Einrichten des Notizbuchs

In diesem Abschnitt richten Sie eine Notizbuchumgebung ein.

  1. Überprüfen Sie Ihre Spark-Version. Wenn Sie Spark 3.4 oder höher in Microsoft Fabric verwenden, ist der semantische Link standardmäßig enthalten, sodass Sie ihn nicht installieren müssen. Wenn Sie Spark 3.3 oder früher verwenden oder auf den neuesten semantischen Link aktualisieren möchten, führen Sie den folgenden Befehl aus.

    %pip install -U semantic-link
    
  2. Importieren Sie die module, die Sie in diesem Notizbuch verwenden.

    import pandas as pd
    import sempy.fabric as fabric
    from sempy.fabric import FabricDataFrame
    from sempy.dependencies import plot_dependency_metadata
    
  3. Laden Sie die Beispieldaten herunter. In diesem Tutorial verwenden Sie das Synthea-Dataset synthetischer medizinischer Daten (kleine Version für die Einfachheit).

    download_synthea(which='small')
    

Erkunden der Daten

  1. Initialisieren Sie ein FabricDataFrame mit dem Inhalt der Datei providers.csv.

    providers = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv"))
    providers.head()
    
  2. Überprüfen Sie auf Datenqualitätsprobleme mit der Funktion von SemPy find_dependencies , indem Sie ein Diagramm von automatisch erkannten Funktionsabhängigkeiten darstellen.

    deps = providers.find_dependencies()
    plot_dependency_metadata(deps)
    

    Screenshot eines Funktionsabhängigkeitsdiagramms, das zeigt, dass die ID den NAME und die ORGANISATION bestimmt.

    Das Diagramm zeigt, dass Id bestimmt NAME und ORGANIZATION. Dieses Ergebnis wird erwartet, da Id einzigartig ist.

  3. Bestätigen Sie, dass Id eindeutig ist.

    providers.Id.is_unique
    

    Der Code gibt True zurück, um zu bestätigen, dass Id eindeutig ist.

Analysieren funktionaler Abhängigkeiten im Detail

Das Diagramm mit funktionalen Abhängigkeiten zeigt auch, dass ORGANIZATIONADDRESS und ZIPwie erwartet bestimmt. Möglicherweise erwarten Sie jedoch, dass ZIP auch CITYbestimmen, aber der gestrichelte Pfeil weist darauf hin, dass die Abhängigkeit nur ungefähr ist und auf ein Problem mit der Datenqualität verweist.

Es gibt weitere Besonderheiten im Diagramm. Beispielsweise bestimmt NAME nicht GENDER, Id, SPECIALITYoder ORGANIZATION. Jede dieser Besonderheiten kann eine Untersuchung wert sein.

  1. Werfen Sie einen tieferen Blick auf die ungefähre Beziehung zwischen ZIP und CITY indem Sie semPys list_dependency_violations Funktion verwenden, um die Verletzungen auflisten zu können:
providers.list_dependency_violations('ZIP', 'CITY')
  1. Zeichnen Sie ein Diagramm mit der plot_dependency_violations Visualisierungsfunktion von SemPy. Dieses Diagramm ist hilfreich, wenn die Anzahl der Verletzungen klein ist:
providers.plot_dependency_violations('ZIP', 'CITY')

Screenshot des Diagramms der Abhängigkeitsverletzungen.

Die Darstellung von Abhängigkeitsverstößen zeigt Werte für ZIP auf der linken Seite und Werte für CITY auf der rechten Seite an. Ein Rand verbindet eine Postleitzahl auf der linken Seite des Grundstücks mit einer Stadt auf der rechten Seite, wenn eine Zeile mit diesen beiden Werten enthält. Die Ränder werden mit der Anzahl solcher Zeilen beschriftet. Beispielsweise gibt es zwei Zeilen mit Postleitzahl 02747-1242, eine Zeile mit der Stadt "NORTH DARTHMOUTH" und die andere mit der Stadt "DARTHMOUTH", wie in der vorherigen Zeichnung und dem folgenden Code gezeigt:

  1. Bestätigen Sie die Beobachtungen aus der Zeichnung, indem Sie den folgenden Code ausführen:
providers[providers.ZIP == '02747-1242'].CITY.value_counts()
  1. Das Diagramm zeigt auch, dass von den Zeilen, die CITY als "DARTHMOUTH" haben, neun Zeilen ein ZIP von 02747-1262 aufweisen. Eine Zeile hat ein ZIP von 02747-1242. Eine Zeile hat einen ZIP von 02747-2537. Bestätigen Sie diese Beobachtungen mit dem folgenden Code:

    providers[providers.CITY == 'DARTHMOUTH'].ZIP.value_counts()
    
  2. Es gibt andere Postleitzahlen, die mit "DARTMOUTH" verknüpft sind, aber diese Postleitzahlen werden nicht im Diagramm der Abhängigkeitsverstöße angezeigt, da sie keine Hinweise auf Probleme mit der Datenqualität geben. Die Postleitzahl "02747-4302" ist beispielsweise eindeutig mit "DARTMOUTH" verknüpft und wird nicht im Diagramm der Abhängigkeitsverstöße angezeigt. Bestätigen Sie, indem Sie den folgenden Code ausführen:

    providers[providers.ZIP == '02747-4302'].CITY.value_counts()
    

Zusammenfassen von Problemen mit der Datenqualität, die mit SemPy erkannt wurden

Das Diagramm "Abhängigkeitsverstöße" zeigt mehrere Probleme mit der Datenqualität in diesem semantischen Modell:

  • Einige Stadtnamen sind Großbuchstaben. Verwenden Sie Zeichenfolgenmethoden, um dieses Problem zu beheben.
  • Einige Stadtnamen haben Zusätze (oder Präfixe), wie beispielsweise "Nord" und "Ost". Beispielsweise wird die POSTLEITZAHL "2128" einmal "EAST BOSTON" und einmal "BOSTON" zugeordnet. Ein ähnliches Problem tritt zwischen "NORTH DARTMOUTH" und "DARTMOUTH" auf. Entfernen Sie diese Qualifizierungen oder ordnen Sie die Postleitzahlen der Stadt mit der häufigsten Häufigkeit zu.
  • Es gibt Tippfehler in einigen Stadtnamen, wie "PITTSFIELD" vs. "PITTSFILED" und "NEWBURGPORT" vs. "NEWBURYPORT". Korrigieren Sie für "NEWBURGPORT" diesen Tippfehler mithilfe des häufigsten Vorkommens. Bei "PITTSFIELD" mit jeweils nur einem Vorkommen ist die automatische Auflösung von Mehrdeutigkeiten ohne externe Kenntnisse oder ein Sprachmodell deutlich schwieriger.
  • Manchmal werden Präfixe wie "West" mit dem einzelnen Buchstaben "W" abgekürzt. Ersetzen Sie "W" durch "West", wenn alle Vorkommen von "W" für "West" stehen.
  • Die Postleitzahl "02130" wird einmal "BOSTON" und einmal "Jamaica Plain" zugeordnet. Dieses Problem ist nicht einfach zu beheben. Mit weiteren Daten ordnen Sie sich dem am häufigsten vorkommenden Vorkommen zu.

Bereinigen der Daten

  1. Korrigieren Sie die Großschreibung, indem Sie Werte in die Titel-Schreibweise ändern.

    providers['CITY'] = providers.CITY.str.title()
    
  2. Führen Sie die Erkennung von Verstößen erneut aus, um zu bestätigen, dass weniger Mehrdeutigkeiten vorhanden sind.

    providers.list_dependency_violations('ZIP', 'CITY')
    

Verfeinern Sie die Daten manuell, oder legen Sie Zeilen ab, die funktionsbedingte Einschränkungen zwischen Spalten verletzen, indem Sie die Funktion SemPy verwenden drop_dependency_violations .

Wählt für jeden Wert der Determinantenvariablen drop_dependency_violations den am häufigsten verwendeten Wert der abhängigen Variablen aus und legt alle Zeilen mit anderen Werten ab. Wenden Sie diesen Vorgang nur an, wenn Sie sicher sind, dass diese statistische Heuristik zu korrekten Ergebnissen für Ihre Daten führt. Schreiben Sie andernfalls Ihren eigenen Code, um die erkannten Verstöße zu behandeln.

  1. Führen Sie die drop_dependency_violations-Funktion auf den ZIP- und CITY-Spalten aus.

    providers_clean = providers.drop_dependency_violations('ZIP', 'CITY')
    
  2. Listet alle Abhängigkeitsverletzungen zwischen ZIP und CITY.

    providers_clean.list_dependency_violations('ZIP', 'CITY')
    

Der Code gibt eine leere Liste zurück, um anzugeben, dass es keine weiteren Verstöße gegen die funktionale Einschränkung ZIP -> CITYgibt.

Weitere Lernprogramme zu semantischen Links oder SemPy finden Sie hier: