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
Erhalten Sie ein Microsoft Fabric-Abonnement. Oder registrieren Sie sich für eine kostenlose Microsoft Fabric-Testversion.
Melden Sie sich bei Microsoft Fabrican.
Verwenden Sie den Erfahrungsschalter auf der unteren linken Seite Ihrer Startseite, um zu Fabric zu wechseln.
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.
Zum Öffnen des zugehörigen Notizbuchs für dieses Lernprogramm folgen Sie den Anweisungen in Vorbereiten Ihres Systems für Data Science-Lernprogramme, um das Notizbuch in Ihren Arbeitsbereich zu importieren.
Wenn Sie den Code lieber von dieser Seite kopieren und einfügen möchten, können Sie ein neues Notizbucherstellen.
Fügen Sie unbedingt ein Lakehouse an das Notebook an, bevor Sie mit der Ausführung von Code beginnen.
Einrichten des Notizbuchs
In diesem Abschnitt richten Sie eine Notizbuchumgebung mit den erforderlichen Modulen und Daten ein.
Installieren Sie
SemPy
von PyPI mithilfe der%pip
Inlineinstallationsfunktion im Notizbuch:%pip install semantic-link
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.
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()
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.Überprüfen Sie den Datentyp von
customer
:type(customer)
Die Ausgabe bestätigt, dass
customer
vom Typsempy.fabric._dataframe._fabric_dataframe.FabricDataFrame
ist.Verknüpfen Sie die
customer
undstate
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.
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
Visualisieren Sie die identifizierten Abhängigkeiten mithilfe der
plot_dependency_metadata
-Funktion von SemPy:plot_dependency_metadata(dependencies)
Wie erwartet zeigt das Diagramm funktionale 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
, wahrscheinlich weil es viele Verstöße in den Beziehungen zwischen den Spalten gibt. Sie können dieplot_dependency_violations
-Funktion von SemPy verwenden, um Verletzungen von Abhängigkeiten zwischen bestimmten Spalten zu visualisieren.
Untersuchen Sie die Daten auf Qualitätsprobleme
Zeichnen Sie ein Diagramm mit der
plot_dependency_violations
Visualisierungsfunktion von SemPy.customer_state_df.plot_dependency_violations('Postal Code', 'City')
Die Darstellung von Abhängigkeitsverstößen zeigt Werte für
Postal Code
auf der linken Seite und Werte fürCity
auf der rechten Seite an. Ein Rand verbindet einePostal Code
auf der linken Seite mit einemCity
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.
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.
Zeilen mit leeren Werten ablegen. Suchen Sie dann Abhängigkeiten mithilfe der
find_dependencies
-Funktion. Beachten Sie den zusätzlichen Parameterverbose=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
undCity
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 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 darüber anwenden, welche Entität Werte anderer Entitäten bestimmt, scheint dieses Abhängigkeitsdiagramm korrekt zu sein.
Erkunden Sie weitere Probleme mit der Datenqualität, die erkannt wurden. Beispielsweise verbindet ein gestrichelter Pfeil
City
undRegion
, 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')
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.
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.
Es ist auch auffällig, dass Verstöße gegen die Abhängigkeit zwischen
Name
undCountry/Region
festzustellen 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:
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.
Verwandte Inhalte
Schauen Sie sich weitere Lernprogramme für semantischen Link / SemPy an:
- Lernprogramm: Bereinigen von Daten mit funktionalen Abhängigkeiten
- Lernprogramm: Extrahieren und Berechnen von Power BI-Measures aus einem Jupyter-Notizbuch
- Lernprogramm: Entdecken von Beziehungen in einem Semantikmodell mithilfe von semantischen Verknüpfungen
- Lernprogramm: Entdecken von Beziehungen im Synthea--Dataset mit semantischer Verknüpfung
- Lernprogramm: Überprüfen von Daten mithilfe von SemPy and Great Expectations (GX)