Freigeben über


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

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.

  1. Installieren Sie SemPy über PyPI mithilfe der %pip-Inlineinstallationsfunktion innerhalb des Notizbuchs:

    %pip install semantic-link
    
  2. 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.

  1. 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()
    
  2. 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.

  3. Überprüfen Sie den Datentyp von customer:

    type(customer)
    

    Die Ausgabe bestätigt, dass customer dem Typ sempy.fabric._dataframe._fabric_dataframe.FabricDataFrame entspricht.

  4. Verknüpfen Sie die Dataframes customer und state:

    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.

  1. 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
    
  2. Visualisieren Sie die identifizierten Abhängigkeiten mithilfe der SemPy-Funktion plot_dependency_metadata:

    plot_dependency_metadata(dependencies)
    

    Screenshot der Darstellung von Abhängigkeitsmetadaten.

    Wie erwartet zeigt das Diagramm mit funktionalen Abhängigkeiten, dass die Customer-Spalte einige Spalten wie City, Postal Code und Name bestimmt.

    Überraschenderweise zeigt das Diagramm keine funktionale Abhängigkeit zwischen City und Postal Code. Dies liegt wahrscheinlich daran, dass es viele Verstöße in den Beziehungen zwischen den Spalten gibt. Sie können die SemPy-Funktion plot_dependency_violations verwenden, um Verstöße von Abhängigkeiten zwischen bestimmten Spalten zu visualisieren.

Untersuchen der Daten auf Qualitätsprobleme

  1. Zeichnen Sie ein Diagramm mit der SemPy-Visualisierungsfunktion plot_dependency_violations.

    customer_state_df.plot_dependency_violations('Postal Code', 'City')
    

    Screenshot der Darstellung von Abhängigkeitsverstößen.

    Der Plot von Abhängigkeitsverstößen zeigt Werte für Postal Code auf der linken Seite und Werte für City auf der rechten Seite an. Ein Verbindungselement verbindet einen Postal Code auf der linken Seite mit einer City 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.

  2. Ü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.

  3. Löschen Sie Zeilen mit leeren Werten. Suchen Sie dann Abhängigkeiten mithilfe der find_dependencies-Funktion. Beachten Sie den zusätzlichen Parameter verbose=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 und City 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 Standardwert 0.01 auf 0.05, um nur die Abhängigkeiten anzuzeigen. Niedrigere Schwellenwerte führen zu weniger Abhängigkeiten (oder höherer Selektivität).

  4. Erhöhen Sie den Schwellenwert für die bedingte Entropie vom Standardwert 0.01 auf 0.05:

    plot_dependency_metadata(customer_state_df2.find_dependencies(threshold=0.05))
    

    Darstellung der Metadaten zu den Abhängigkeiten mit einem höheren Schwellenwert für die Entropie.

    Wenn Sie Domänenwissen anwenden, welche Entität den Wert anderer Entitäten bestimmt, scheint dieses Abhängigkeitsdiagramm korrekt zu sein.

  5. Untersuchen Sie weitere ermittelte Probleme mit der Datenqualität. Beispielsweise sind City und Region 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')
    
  6. 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.

  7. 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.

  8. Zudem ist auffällig, dass Verstöße gegen die Abhängigkeit zwischen Name und Country/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:

  9. 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.

Sehen Sie sich weitere Tutorials zu Semantic Link und SemPy an: