Tutorial: Analysieren von funktionalen Abhängigkeiten in einem semantischen Modell
In diesem Tutorial bauen Sie auf der vorherigen Arbeit eines Power BI-Analysten auf, die in Form von semantischen Modellen (Power BI-Datensätzen) gespeichert ist. Mithilfe von SemPy (Vorschau) auf der Synapse-Data Science-Benutzeroberfläche in Microsoft Fabric analysieren Sie funktionale Abhängigkeiten, die in Spalten eines Dataframe vorhanden sind. Diese Analyse hilft dabei, nicht triviale Datenqualitätsprobleme zu ermitteln, um genauere Erkenntnisse zu erhalten.
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, welche die Integration in Power BI unterstützen und bei der Automatisierung der Datenanalyse helfen. Zu diesen Komponenten gehören:
- FabricDataFrame: eine Pandas-ähnliche Struktur, die um zusätzliche semantische Informationen erweitert wurde.
- Nützliche Funktionen zum Abrufen von semantischen Modellen aus einem Fabric-Arbeitsbereich in Ihr Notebook.
- 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.
Laden Sie das semantische Modell Customer Profitability Sample.pbix aus dem GitHub-Repository „fabric-samples“ herunter, und laden Sie es in Ihren Arbeitsbereich hoch.
Das Notebook für das Tutorial
Das Notebook powerbi_dependencies_tutorial.ipynb wird in diesem Tutorial verwendet.
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 Notizbuchumgebung mit den erforderlichen Modulen und Daten ein.
Installieren Sie
SemPy
über PyPI mithilfe der%pip
-Inlineinstallationsfunktion innerhalb des Notizbuchs:%pip install semantic-link
Führen Sie die erforderlichen Importvorgänge von Modulen durch, die Sie später benötigen:
import sempy.fabric as fabric from sempy.dependencies import plot_dependency_metadata
Laden und Vorverarbeitung der Daten
In diesem Tutorial wird ein standardmäßiges semantisches Beispielmodell Customer Profitability Sample.pbix verwendet. Eine Beschreibung des semantischen Modells finden Sie unter Customer Profitability-Beispiel für Power BI.
Laden Sie die Power BI-Daten mithilfe der SemPy-Funktion
read_table
in FabricDataFrames:dataset = "Customer Profitability Sample" customer = fabric.read_table(dataset, "Customer") customer.head()
Laden Sie die
State
-Tabelle in FabricDataFrame:state = fabric.read_table(dataset, "State") state.head()
Während die Ausgabe dieses Codes wie ein Pandas-Dataframe aussieht, haben Sie tatsächlich eine Datenstruktur initialisiert, die als
FabricDataFrame
bezeichnet wird und einige nützliche Vorgänge zusätzlich zu Pandas unterstützt.Überprüfen Sie den Datentyp von
customer
:type(customer)
Die Ausgabe bestätigt, dass
customer
dem Typsempy.fabric._dataframe._fabric_dataframe.FabricDataFrame
entspricht.Verknüpfen Sie die Dataframes
customer
undstate
:customer_state_df = customer.merge(state, left_on="State", right_on="StateCode", how='left') customer_state_df.head()
Identifizieren funktionaler Abhängigkeiten
Eine funktionale Abhängigkeit manifestiert sich als 1:n-Beziehung zwischen den Werten in zwei (oder mehr) Spalten in einem Dataframe. Diese Beziehungen können verwendet werden, um Probleme mit der Datenqualität automatisch zu erkennen.
Führen Sie die SemPy-Funktion
find_dependencies
für den zusammengeführten Dataframe aus, um vorhandene funktionale Abhängigkeiten zwischen Werten in den Spalten zu identifizieren:dependencies = customer_state_df.find_dependencies() dependencies
Visualisieren Sie die identifizierten Abhängigkeiten mithilfe der SemPy-Funktion
plot_dependency_metadata
:plot_dependency_metadata(dependencies)
Wie erwartet zeigt das Diagramm mit funktionalen Abhängigkeiten, dass die
Customer
-Spalte einige Spalten wieCity
,Postal Code
undName
bestimmt.Überraschenderweise zeigt das Diagramm keine funktionale Abhängigkeit zwischen
City
undPostal Code
. Dies liegt wahrscheinlich daran, dass es viele Verstöße in den Beziehungen zwischen den Spalten gibt. Sie können die SemPy-Funktionplot_dependency_violations
verwenden, um Verstöße von Abhängigkeiten zwischen bestimmten Spalten zu visualisieren.
Untersuchen der Daten auf Qualitätsprobleme
Zeichnen Sie ein Diagramm mit der SemPy-Visualisierungsfunktion
plot_dependency_violations
.customer_state_df.plot_dependency_violations('Postal Code', 'City')
Der Plot von Abhängigkeitsverstößen zeigt Werte für
Postal Code
auf der linken Seite und Werte fürCity
auf der rechten Seite an. Ein Verbindungselement verbindet einenPostal Code
auf der linken Seite mit einerCity
auf der rechten Seite, wenn eine Zeile mit diesen beiden Werten vorhanden ist. Die Verbindungselemente werden mit der Anzahl solcher Zeilen kommentiert. Beispielsweise gibt es zwei Zeilen mit der Postleitzahl 20004, eine mit der Stadt „North Tower“ und eine andere mit der Stadt „Washington“.Darüber hinaus zeigt der Plot ein paar Verstöße und viele leere Werte.
Überprüfen Sie die Anzahl der leeren Werte für
Postal Code
:customer_state_df['Postal Code'].isna().sum()
50 Zeilen weisen „NA“ für die Postleitzahl auf.
Löschen Sie Zeilen mit leeren Werten. Suchen Sie dann Abhängigkeiten mithilfe der
find_dependencies
-Funktion. Beachten Sie den zusätzlichen Parameterverbose=1
, der einen Einblick in die interne Funktionsweise von SemPy bietet:customer_state_df2=customer_state_df.dropna() customer_state_df2.find_dependencies(verbose=1)
Die bedingte Entropie für
Postal Code
undCity
ist 0,049. Dieser Wert gibt an, dass funktionale Abhängigkeitsverstöße vorliegen. Bevor Sie die Verstöße beheben, erhöhen Sie den Schwellenwert für die bedingte Entropie vom Standardwert0.01
auf0.05
, um nur die Abhängigkeiten anzuzeigen. Niedrigere Schwellenwerte führen zu weniger Abhängigkeiten (oder höherer Selektivität).Erhöhen Sie den Schwellenwert für die bedingte Entropie vom Standardwert
0.01
auf0.05
:plot_dependency_metadata(customer_state_df2.find_dependencies(threshold=0.05))
Wenn Sie Domänenwissen anwenden, welche Entität den Wert anderer Entitäten bestimmt, scheint dieses Abhängigkeitsdiagramm korrekt zu sein.
Untersuchen Sie weitere ermittelte Probleme mit der Datenqualität. Beispielsweise sind
City
undRegion
mit einem gestrichelten Pfeil verbunden, was darauf hinweist, dass nur eine ungefähre Abhängigkeit vorliegt. Diese ungefähre Beziehung könnte bedeuten, dass es sich um eine teilweise funktionale Abhängigkeit handelt.customer_state_df.list_dependency_violations('City', 'Region')
Sehen Sie sich jeden Fall genauer an, in dem ein nicht leerer
Region
-Wert einen Verstoß verursacht:customer_state_df[customer_state_df.City=='Downers Grove']
Das Ergebnis zeigt die Stadt „Downers Grove“ für Illinois und Nebraska an. Downers Grove ist jedoch eine Stadt in Illinois, nicht in Nebraska.
Sehen Sie sich die Stadt Fremont an:
customer_state_df[customer_state_df.City=='Fremont']
Es gibt eine Stadt namens Fremont in Kalifornien. Für Texas gibt die Suchmaschine jedoch Premont zurück, nicht Fremont.
Zudem ist auffällig, dass Verstöße gegen die Abhängigkeit zwischen
Name
undCountry/Region
vorliegen, was durch die gepunktete Linie im ursprünglichen Diagramm von Abhängigkeitsverstößen zu sehen ist (vor dem Löschen der Zeilen mit leeren Werten).customer_state_df.list_dependency_violations('Name', 'Country/Region')
Es scheint, dass der Kunde SDI Design in zwei Regionen (USA und Kanada) präsent ist. Dieses Vorkommen ist möglicherweise kein semantischer Verstoß, sondern nur ein ungewöhnlicher Fall. Dennoch lohnt es sich, einen genauen Blick darauf zu werfen:
Sehen Sie sich den Kunden SDI Design genauer an:
customer_state_df[customer_state_df.Name=='SDI Design']
Eine weitere Prüfung zeigt, dass es sich tatsächlich um zwei unterschiedliche Kunden (aus verschiedenen Branchen) mit demselben Namen handelt.
Die explorative Datenanalyse ist wie auch die Datenbereinigung ein spannender Prozess. Es gibt immer etwas, was die Daten verstecken, je nachdem, wie Sie sie betrachten, was Sie fragen möchten und so weiter. Semantic Link bietet Ihnen neue Tools, mit denen Sie mehr mit Ihren Daten erreichen können.
Zugehöriger Inhalt
Sehen Sie sich weitere Tutorials zu Semantic Link und SemPy an:
- Tutorial: Bereinigung von Daten mit funktionalen Abhängigkeiten
- 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) (Vorschau)