Teilen über


Lernprogramm: Analysieren funktionaler Abhängigkeiten in einem semantischen Modell

In diesem Lernprogramm bauen Sie auf vorherigen Arbeiten eines Power BI-Analysten auf, die in Form von semantischen Modellen (Power BI-Datasets) gespeichert sind. Mithilfe von SemPy (Vorschau) in der Synapse Data Science-Erfahrung in Microsoft Fabric analysieren Sie funktionale Abhängigkeiten, die in Spalten eines DataFrame vorhanden sind. Diese Analyse hilft dabei, nichttrivielle Datenqualitätsprobleme 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 den Komponenten der Python-Bibliothek des semantischen Links (SemPy) vertraut, die die Integration mit Power BI unterstützen und die Datenqualitätsanalyse automatisieren. Zu diesen Komponenten gehören:
    • FabricDataFrame – eine pandasähnliche Struktur, die mit zusätzlichen semantischen Informationen erweitert wurde.
    • Nützliche Funktionen zum Abrufen von semantischen Modellen aus einem Fabric-Arbeitsbereich in Ihr Notizbuch.
    • Nützliche Funktionen, die die Auswertung von Hypothesen zu funktionsbezogenen Abhängigkeiten automatisieren und Verstöße gegen Beziehungen in Ihren semantischen Modellen identifizieren.

Voraussetzungen

  • Wählen Sie Arbeitsbereiche im linken Navigationsbereich 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 Fabric-Samples GitHub-Repository herunter.

  • 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

In diesem Abschnitt richten Sie eine Notizbuchumgebung mit den erforderlichen Modulen und Daten ein.

  1. Installieren Sie SemPy von PyPI mithilfe der %pip Inlineinstallationsfunktion im Notizbuch:

    %pip install semantic-link
    
  2. Führen Sie die erforderlichen Importe von Modulen aus, 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 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 die Power BI-Daten mithilfe der read_table-Funktion von SemPy in FabricDataFrames:

    dataset = "Customer Profitability Sample"
    customer = fabric.read_table(dataset, "Customer")
    customer.head()
    
  2. Laden Sie die State Tabelle in einen 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 namens FabricDataFrame initialisiert, wobei diese einige nützliche Vorgänge auf Basis von pandas unterstützt.

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

    type(customer)
    

    Die Ausgabe bestätigt, dass customer vom Typ sempy.fabric._dataframe._fabric_dataframe.FabricDataFrameist.

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

    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 eine Eins-zu-viele-Beziehung zwischen den Werten in zwei (oder mehr) Spalten innerhalb eines DataFrames. Diese Beziehungen können verwendet werden, um Probleme mit der Datenqualität automatisch zu erkennen.

  1. Führen Sie die find_dependencies-Funktion von SemPy im zusammengeführten DataFrame aus, um vorhandene funktionsbezogene 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 plot_dependency_metadata-Funktion von SemPy:

    plot_dependency_metadata(dependencies)
    

    Screenshot mit dem Diagramm der Abhängigkeitsmetadaten.

    Wie erwartet zeigt das Diagramm funktionale Abhängigkeiten, dass die Customer Spalte einige Spalten wie City, Postal Codeund Namebestimmt.

    Überraschenderweise zeigt das Diagramm keine funktionale Abhängigkeit zwischen City und Postal Code, wahrscheinlich weil es viele Verstöße in den Beziehungen zwischen den Spalten gibt. Sie können die plot_dependency_violations-Funktion von SemPy verwenden, um Verletzungen von Abhängigkeiten 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 mit dem Diagramm der Abhängigkeitsverstöße.

    Die Darstellung 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 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".

    Darüber hinaus zeigt das Diagramm ein paar Abweichungen 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 weisen „NA“ für die Postleitzahl auf.

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

    Zeichnen der Abhängigkeitsmetadaten mit einem höheren Schwellenwert für Entropie.

    Wenn Sie Domänenwissen darüber anwenden, welche Entität Werte anderer Entitäten bestimmt, scheint dieses Abhängigkeitsdiagramm korrekt 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, dass die Stadt Downers Grove sowohl in Illinois als auch in Nebraska vorkommt. Downer's Grove ist jedoch eine Stadt in Illinoisund nicht in 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')
    

    Es scheint, dass ein Kunde, SDI Design in zwei Regionen präsent ist - USA und Kanada. Dieses Vorkommen ist möglicherweise kein semantischer Verstoß, sondern kann nur ein ungewöhnlicher Fall sein. 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']
    

    Eine weitere Prüfung zeigt, dass es tatsächlich zwei unterschiedliche Kunden (aus verschiedenen Branchen) mit demselben Namen ist.

Explorative Datenanalyse ist ein spannender Prozess, genauso wie die Datenreinigung. Es gibt immer etwas, was die Daten verbergen, abhängig davon, wie Sie sie betrachten, was Sie fragen möchten und so weiter. Der semantische Link bietet Ihnen neue Tools, mit denen Sie mehr mit Ihren Daten erreichen können.

Schauen Sie sich weitere Lernprogramme für semantischen Link / SemPy an: