Freigeben über


Lernprogramm: Analysieren funktionaler Abhängigkeiten in einem semantischen Modell

In diesem Lernprogramm bauen Sie auf der Arbeit eines Power BI-Analysten auf, der als semantische Modelle (Power BI-Datasets) gespeichert ist. Mithilfe von SemPy (Vorschau) in der Synapse Data Science-Erfahrung in Microsoft Fabric analysieren Sie funktionale Abhängigkeiten in DataFrame-Spalten. Diese Analyse hilft Ihnen, subtile Probleme mit der Datenqualität zu ermitteln, um genauere Erkenntnisse zu erhalten.

In diesem Lernprogramm erfahren Sie, wie Sie:

  • Wenden Sie Domänenwissen 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 in Power BI integriert sind, und helfen Sie bei der Automatisierung der Datenanalyse. Zu diesen Komponenten gehören:
    • FabricDataFrame – pandasähnliche Struktur mit zusätzlichen semantischen Informationen verbessert
    • Funktionen, die semantische Modelle aus einem Fabric-Arbeitsbereich in Ihr Notizbuch ziehen
    • Funktionen, die funktionsbezogene Abhängigkeitshypothesen auswerten und Beziehungsverstöße in Ihren semantischen Modellen identifizieren

Voraussetzungen

  1. Wählen Sie im Navigationsbereich Arbeitsbereiche aus, um Ihren Arbeitsbereich zu suchen und auszuwählen. Dieser Arbeitsbereich wird zu Ihrem aktuellen Arbeitsbereich.

  2. Laden Sie die Datei "Customer Profitability Sample.pbix " aus dem GitHub-Repository der Fabric-Beispiele herunter.

  3. Wählen Sie in Ihrem Arbeitsbereich Importieren>Bericht oder Paginierter Bericht>Von diesem Computer aus, um die Datei Customer Profitability Sample.pbix in Ihren Arbeitsbereich hochzuladen.

Notebook für das Tutorial

Das Notebook powerbi_dependencies_tutorial.ipynb wird in diesem Tutorial verwendet.

Einrichten des Notizbuchs

Richten Sie eine Notizbuchumgebung mit den benötigten Modulen und Daten ein.

  1. Wird verwendet %pip , um SemPy aus PyPI im Notizbuch zu installieren.

    %pip install semantic-link
    
  2. Importieren Sie die benötigten Module.

    import sempy.fabric as fabric
    from sempy.dependencies import plot_dependency_metadata
    

Laden und Vorverarbeitung der Daten

In diesem Tutorial wird ein standardmäßiges Beispielsemantikmodell Customer Profitability Sample.pbix verwendet. Eine Beschreibung des semantischen Modells finden Sie unter Beispiel für die Kundenrentabilität für Power BI.

  1. Laden Sie Power BI-Daten mithilfe der FabricDataFrame Funktion in einefabric.read_table.

    dataset = "Customer Profitability Sample"
    customer = fabric.read_table(dataset, "Customer")
    customer.head()
    
  2. Laden Sie die State Tabelle in eine FabricDataFrame.

    state = fabric.read_table(dataset, "State")
    state.head()
    

    Obwohl die Ausgabe wie ein Pandas DataFrame aussieht, initialisiert dieser Code eine Datenstruktur, die so genannte FabricDataFrame Vorgänge über Pandas hinzufügt.

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

    type(customer)
    

    Die Ausgabe zeigt, dass customer dies ist sempy.fabric._dataframe._fabric_dataframe.FabricDataFrame.

  4. Verbinden sie die Objekte und customerstate die DataFrame Objekte.

    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 ist eine 1:n-Beziehung zwischen Werten in zwei oder mehr Spalten in einem DataFrame. Verwenden Sie diese Beziehungen, um Probleme mit der Datenqualität automatisch zu erkennen.

  1. Führen Sie die Funktion SemPy für find_dependencies die zusammengeführte DataFrame Funktion aus, um funktionale Abhängigkeiten zwischen Spaltenwerten zu identifizieren.

    dependencies = customer_state_df.find_dependencies()
    dependencies
    
  2. Visualisieren Sie die Abhängigkeiten mithilfe der SemPy-Funktion plot_dependency_metadata .

    plot_dependency_metadata(dependencies)
    

    Screenshot der Zeichnung der Abhängigkeitsmetadaten.

    Das Diagramm mit funktionalen Abhängigkeiten zeigt, dass die Customer Spalte Spalten wie City, Postal Codeund Name.

    Das Diagramm zeigt keine funktionale Abhängigkeit zwischen City und Postal Code, wahrscheinlich, weil es viele Verstöße in der Beziehung zwischen den Spalten gibt. Verwenden Sie die Funktion semPy, plot_dependency_violations um Abhängigkeitsverstöße zwischen bestimmten Spalten zu visualisieren.

Untersuchen Sie die Daten auf Qualitätsprobleme

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

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

    Screenshot eines Plots, das Abhängigkeitsverstöße anzeigt.

    Die Darstellung von Abhängigkeitsverstößen zeigt Werte für Postal Code die linke Seite und Werte für City die rechte Seite an. Ein Rand verbindet eine Postal Code auf der linken Seite mit einem City 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 Postleitzahl 20004, eine mit der Stadt "North Tower" und die andere mit der Stadt "Washington".

    Die Zeichnung zeigt auch einige Verletzungen und viele leere Werte.

  2. Bestätigen Sie die Anzahl leerer Werte für Postal Code:

    customer_state_df['Postal Code'].isna().sum()
    

    50 Zeilen haben NV für Postal Code.

  3. Zeilen mit leeren Werten ablegen. Suchen Sie dann Abhängigkeiten mithilfe der find_dependencies-Funktion. Beachten Sie den zusätzlichen Parameter verbose=1, der einen Einblick in die internen Arbeiten 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 beträgt 0,049. Dieser Wert gibt an, dass funktionsbezogene Abhängigkeitsverletzungen vorliegen. Bevor Sie die Verletzungen 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))
    

    Screenshot des Diagramms der Abhängigkeitsmetadaten mit einem höheren Entropieschwellenwert.

    Wenn Sie Domänenwissen darüber anwenden, welche Entität die Werte anderer Entitäten bestimmt, scheint dieses Abhängigkeitsdiagramm genau zu sein.

  5. Erkunden Sie weitere Probleme mit der Datenqualität, die erkannt wurden. Beispielsweise verbindet ein gestrichelter Pfeil City und Region, was darauf hinweist, dass die Abhängigkeit nur ungefähr ist. Diese ungefähre Beziehung könnte bedeuten, dass es eine teilweise funktionale Abhängigkeit gibt.

    customer_state_df.list_dependency_violations('City', 'Region')
    
  6. Werfen Sie einen genaueren Blick auf die einzelnen Fälle, in denen ein nicht leerer Region Wert eine Verletzung verursacht.

    customer_state_df[customer_state_df.City=='Downers Grove']
    

    Das Ergebnis zeigt die Stadt Downers Grove in Illinois und Nebraska. Downers Grove ist jedoch eine Stadt in Illinois, nicht Nebraska.

  7. Sehen Sie sich die Stadt Fremontan:

    customer_state_df[customer_state_df.City=='Fremont']
    

    Es gibt eine Stadt namens Fremont in Kalifornien. Für Texas gibt die Suchmaschine jedoch Premontzurück, nicht Fremont.

  8. Es ist auch auffällig, dass Verstöße gegen die Abhängigkeit zwischen Name und Country/Regionfestzustellen sind, wie durch die gepunktete Linie im ursprünglichen Diagramm der Abhängigkeitsverletzungen (vor dem Entfernen der Zeilen mit leeren Werten) dargestellt.

    customer_state_df.list_dependency_violations('Name', 'Country/Region')
    

    Ein Kunde, SDI Design, erscheint in zwei Regionen – USA und Kanada. In diesem Fall kann es sich nicht um eine semantische Verletzung handeln, nur ungewöhnlich. Dennoch lohnt es sich, einen genauen Blick zu werfen:

  9. Werfen Sie einen genaueren Blick auf den Kunden SDI Design:

    customer_state_df[customer_state_df.Name=='SDI Design']
    

    Weitere Inspektionen zeigen zwei unterschiedliche Kunden aus verschiedenen Branchen mit demselben Namen.

Explorative Datenanalyse und Datenreinigung sind iterativ. Was Sie finden, hängt von Ihren Fragen und Ihrer Perspektive ab. Der semantische Link bietet Ihnen neue Tools, um mehr von Ihren Daten zu erhalten.

Sehen Sie sich weitere Lernprogramme für semantischen Link und SemPy an: