Tutorial: Bereinigen von Daten mit funktionalen Abhängigkeiten
In diesem Tutorial verwenden Sie funktionale Abhängigkeiten für die Datenbereinigung. Eine funktionale Abhängigkeit ist dann vorhanden, wenn eine Spalte in einem semantischen Modell (einem Power BI-Dataset) eine Funktion einer anderen Spalte ist. Beispielsweise kann eine Spalte Postleitzahl die Werte in einer Spalte Ort bestimmen. Eine funktionale Abhängigkeit manifestiert sich als 1:n-Beziehung zwischen den Werten in zwei oder mehr Spalten in einem DataFrame. In diesem Tutorial wird anhand des Synthea-Datasets gezeigt, wie funktionale Beziehungen helfen können, Probleme mit der Datenqualität zu erkennen.
In diesem Tutorial lernen Sie Folgendes:
- Wenden Sie Fachwissen an, um Hypothesen zu funktionalen Abhängigkeiten in einem semantischen Modell zu formulieren.
- Machen Sie sich mit Komponenten der Python-Bibliothek von Semantic Link (SemPy) vertraut, die bei der Automatisierung der Analyse der Datenqualität helfen. Zu diesen Komponenten gehören:
- FabricDataFrame: eine Pandas-ähnliche Struktur, die um zusätzliche semantische Informationen erweitert wurde.
- Nützliche Funktionen, welche die Auswertung von Hypothesen zu funktionalen Abhängigkeiten automatisieren und Verstöße gegen Beziehungen in Ihren semantischen Modellen identifizieren.
Voraussetzungen
Erwerben Sie ein Microsoft Fabric-Abonnement. Registrieren Sie sich alternativ für eine kostenlose Microsoft Fabric-Testversion.
Melden Sie sich bei Microsoft Fabric an.
Wechseln Sie zur Synapse-Data Science-Benutzeroberfläche, indem Sie den Umschalter für die Benutzeroberfläche auf der linken Seite Ihrer Homepage verwenden.
- Wählen Sie im linken Navigationsbereich Arbeitsbereiche aus, um Ihren Arbeitsbereich zu suchen und auszuwählen. Dieser Arbeitsbereich wird zu Ihrem aktuellen Arbeitsbereich.
Das Notebook für das Tutorial
Das Notebook data_cleaning_functional_dependencies_tutorial.ipynb begleitet dieses Tutorial.
Um das zugehörige Notebook für dieses Tutorial zu öffnen, befolgen Sie die Anweisungen unter Vorbereiten Ihres Systems für Data-Science-Tutorials zum Importieren des Notebooks in Ihren Arbeitsbereich.
Wenn Sie den Code lieber von dieser Seite kopieren und einfügen möchten, können Sie auch ein neues Notebook erstellen.
Fügen Sie unbedingt ein Lakehouse an das Notebook an, bevor Sie mit der Ausführung von Code beginnen.
Einrichten des Notebooks
In diesem Abschnitt richten Sie eine Notebookumgebung mit den erforderlichen Modulen und Daten ein.
- Für Spark 3.4 und höher ist der semantische Link bei Verwendung von Fabric in der Standardlaufzeit verfügbar und muss nicht installiert werden. Wenn Sie Spark 3.3 oder darunter verwenden oder auf die neueste Version von Semantic Link aktualisieren möchten, können Sie den Befehl ausführen:
python %pip install -U semantic-link
Importieren Sie ggf. die Module, die Sie später benötigen:
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
Pullen Sie die Beispieldaten. In diesem Tutorial verwenden Sie das Synthea-Dataset mit synthetischen medizinischen Datensätzen (zur Einfachheit eine Version mit geringem Umfang):
download_synthea(which='small')
Untersuchen der Daten
Initialisieren Sie einen
FabricDataFrame
mit dem Inhalt der Datei providers.csv:providers = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv")) providers.head()
Suchen Sie mit der
find_dependencies
-Funktion von SemPy nach Problemen mit der Datenqualität, indem Sie ein Diagramm der automatisch erkannten funktionsbezogenen Abhängigkeiten zeichnen:deps = providers.find_dependencies() plot_dependency_metadata(deps)
Das Diagramm der funktionalen Abhängigkeiten zeigt, dass
NAME
undORGANIZATION
vonId
bestimmt werden (erkennbar an den durchgezogenen Pfeilen). Dies ist zu erwarten, daId
eindeutig ist:Vergewissern Sie sich, dass
Id
eindeutig ist:providers.Id.is_unique
Der Code gibt
True
zurück, um zu bestätigen, dassId
eindeutig ist.
Detaillierte Analyse funktionaler Abhängigkeiten
Das Diagramm mit funktionalen Abhängigkeiten zeigt auch, dass ORGANIZATION
wie erwartet ADDRESS
und ZIP
bestimmt. Es wäre zu erwarten gewesen, dass ZIP
auch CITY
bestimmt, aber der gestrichelte Pfeil gibt an, dass die Abhängigkeit nur ungefähr ist und auf ein Problem mit der Datenqualität verweist.
Das Diagramm weist noch weitere Besonderheiten auf. Beispielsweise bestimmt NAME
weder GENDER
noch Id
, SPECIALITY
oder ORGANIZATION
. Jede dieser Besonderheiten kann eine Untersuchung wert sein.
Sehen Sie sich die ungefähre Beziehung zwischen
ZIP
undCITY
genauer an, und verwenden Sie die SemPy-Funktionlist_dependency_violations
, um eine tabellarische Liste von Verstößen anzuzeigen:providers.list_dependency_violations('ZIP', 'CITY')
Zeichnen Sie ein Diagramm mit der SemPy-Visualisierungsfunktion
plot_dependency_violations
. Ein solches Diagramm ist hilfreich, wenn nur wenig Verstöße vorliegen:providers.plot_dependency_violations('ZIP', 'CITY')
Der Plot der Abhängigkeitsverstöße zeigt Werte für
ZIP
auf der linken Seite und Werte fürCITY
auf der rechten Seite an. Eine Linie verbindet eine Postleitzahl auf der linken Seite mit einem Ort auf der rechten Seite, wenn eine Zeile mit diesen beiden Werten vorhanden ist. Die Linien enthalten einen Kommentar mit der Anzahl der entsprechenden Zeilen. Beispielsweise gibt es zwei Zeilen mit der Postleitzahl „02747-1242“: eine für den Ort „NORTH DARTMOUTH“, die andere für den Ort „DARTMOUTH“, wie im obigen Plot und im folgenden Code gezeigt:Bestätigen Sie die Beobachtungen, die Sie im Plot der Abhängigkeitsverstöße gemacht haben, indem Sie den folgenden Code ausführen:
providers[providers.ZIP == '02747-1242'].CITY.value_counts()
Der Plot zeigt auch, dass von den Zeilen, für die
CITY
als „DARTMOUTH“ angegeben ist, neun Zeilen denZIP
-Wert „02747-1262“ aufweisen sowie eine Zeile denZIP
-Wert „02747-1242“ und eine Zeile denZIP
-Wert „02747-2537“. Bestätigen Sie diese Beobachtungen mit dem folgenden Code:providers[providers.CITY == 'DARTMOUTH'].ZIP.value_counts()
Es gibt weitere Postleitzahlen, die mit „DARTMOUTH“ verknüpft sind, aber diese werden im Diagramm der Abhängigkeitsverstöße nicht angezeigt, da sie nicht auf Probleme mit der Datenqualität hinweisen. Die Postleitzahl „02747-4302“ ist beispielsweise eindeutig „DARTMOUTH“ zugeordnet und daher im Diagramm der Abhängigkeitsverstöße nicht enthalten. Bestätigen Sie dies, indem Sie den folgenden Code ausführen:
providers[providers.ZIP == '02747-4302'].CITY.value_counts()
Übersicht über die mithilfe von SemPy erkannten Problemen mit der Datenqualität
Im Diagramm der Abhängigkeitsverstöße können Sie sehen, dass dieses semantische Modell verschiedene interessante Probleme mit der Datenqualität enthält:
- Einige Ortsnamen sind vollständig in Großbuchstaben geschrieben. Dieses Problem lässt sich mithilfe von Zeichenfolgenmethoden recht einfach beheben.
- Einige Ortsnamen enthalten Qualifizierer (bzw. Präfixe), z. B. „North“ und „East“. Die Postleitzahl „2128“ beispielsweise lässt sich „EAST BOSTON“ und „BOSTON“ zuordnen. Ein ähnliches Problem tritt bei „NORTH DARTMOUTH“ und „DARTMOUTH“ auf. Sie könnten versuchen, diese Qualifizierer zu verwerfen oder die Postleitzahlen dem Ort mit dem häufigsten Vorkommen zuzuordnen.
- Bei einigen Orten gibt es Tippfehler, z. B. „PITTSFILED“ statt „PITTSFIELD“ und „NEWBURGPORT“ statt „NEWBURYPORT“. Der Tippfehler in „NEWBURGPORT“ könnte mithilfe des häufigsten Vorkommens behoben werden. Da „PITTSFIELD“ und „PITTSFILED“ nur je einmal vorkommen, ist eine automatische Auflösung der Mehrdeutigkeit ohne externes Wissen oder die Verwendung eines Sprachmodells wesentlich schwieriger.
- Manchmal werden Präfixe wie „West“ mit einem einzelnen Buchstaben abgekürzt: W. Dieses Problem könnte möglicherweise durch eine einfache Ersetzung behoben werden, wenn alle Vorkommen von „W“ für „West“ stehen.
- Die Postleitzahl „02130“ ist einmal „BOSTON“ und einmal „Jamaika Plain“ einmal zugeordnet. Dieses Problem ist nicht einfach zu beheben, aber wenn mehr Daten vorhanden wären, könnte die Zuordnung zum häufigsten Vorkommen eine mögliche Lösung sein.
Bereinigen der Daten
Beheben Sie die Probleme mit der Groß-/Kleinschreibung, indem Sie alle Vorkommen so ändern, dass jeweils der Anfangsbuchstabe groß und alle weiteren Buchstaben klein geschrieben werden (auf Englisch „Title Case“):
providers['CITY'] = providers.CITY.str.title()
Führen Sie die Erkennung von Verstößen erneut aus. Sie werden feststellen, dass einige der Mehrdeutigkeiten nicht mehr vorhanden sind (die Anzahl der Verstöße ist geringer):
providers.list_dependency_violations('ZIP', 'CITY')
An diesem Punkt könnten Sie Ihre Daten manuell verfeinern, aber eine potenzielle Aufgabe bei der Datenbereinigung ist es, Zeilen zu verwerfen, die gegen funktionale Constraints zwischen Spalten in den Daten verstoßen. Dafür verwenden Sie die
drop_dependency_violations
-Funktion von SemPy.Für jeden Wert der Determinantenvariable wählt
drop_dependency_violations
den am häufigsten verwendeten Wert der abhängigen Variable aus und verwirft alle Zeilen mit anderen Werten. Sie sollten diesen Vorgang nur ausführen, wenn Sie sicher sind, dass diese statistische heuristische Methode zu den richtigen Ergebnissen für Ihre Daten führt. Andernfalls sollten Sie selbst Code schreiben, um die erkannten Verstöße entsprechend Ihren Anforderungen zu behandeln.Führen Sie die Funktion
drop_dependency_violations
für die SpaltenZIP
undCITY
aus:providers_clean = providers.drop_dependency_violations('ZIP', 'CITY')
Listen Sie alle Abhängigkeitsverstöße zwischen
ZIP
undCITY
auf:providers_clean.list_dependency_violations('ZIP', 'CITY')
Der Code gibt eine leere Liste zurück, was darauf hinweist, dass es keine weiteren Verstöße gegen den funktionalen Constraint CITY -> ZIP gibt.
Zugehöriger Inhalt
Sehen Sie sich weitere Tutorials zu Semantic Link und SemPy an:
- Tutorial: Analysieren von funktionalen Abhängigkeiten in einem semantischen Beispielmodell
- Tutorial: Extrahieren und Berechnen von Power BI-Measures aus einem Jupyter-Notizbuch
- Tutorial: Beziehungen in einem semantischen Modell mithilfe von semantischen Links entdecken
- Tutorial: Entdecken von Beziehungen im Synthea-Dataset mithilfe von Semantic Link
- Tutorial: Überprüfen von Daten mithilfe von SemPy und Great Expectations (GX)