Freigeben über


Lernprogramm Teil 2: Erkunden und Visualisieren von Daten mithilfe von Microsoft Fabric-Notizbüchern

In diesem Lernprogramm erfahren Sie, wie Sie explorative Datenanalysen (EDA) durchführen, um die Daten zu prüfen und zu analysieren, während Sie deren wichtigste Merkmale mithilfe von Datenvisualisierungstechniken zusammenfassen.

Sie verwenden seaborn, eine Python-Datenvisualisierungsbibliothek, die eine allgemeine Schnittstelle zum Erstellen visueller Elemente in Datenframes und Arrays bereitstellt. Weitere Informationen zu seabornfinden Sie unter Seaborn: Statistische Datenvisualisierung.

Sie verwenden auch Data Wrangler, ein notizbuchbasiertes Tool, das Ihnen eine eintauchende Erfahrung bietet, um explorative Datenanalyse und Datenbereinigung durchzuführen.

Die wichtigsten Schritte in diesem Lernprogramm sind:

  1. Lesen Sie die in einer Deltatabelle im Lakehouse gespeicherten Daten.
  2. Konvertieren Sie einen Spark DataFrame in Pandas DataFrame, den Python-Visualisierungsbibliotheken unterstützen.
  3. Verwenden Sie Data Wrangler, um die anfängliche Datenreinigung und -transformation durchzuführen.
  4. Führen Sie eine explorative Datenanalyse mit seaborndurch.

Voraussetzungen

Dies ist Teil 2 von 5 in der Lernprogrammreihe. Um dieses Lernprogramm abzuschließen, führen Sie zuerst Folgendes durch:

Durchführung im Notebook

2-explore-cleanse-data.ipynb ist das Notebook, das dieses Tutorial begleitet.

Wichtig

Fügen Sie dasselbe Seehaus an, das Sie in Teil 1 verwendet haben.

Rohdaten aus dem Lakehouse lesen

Dieser Code liest Rohdaten aus dem Abschnitt Dateien des Lakehouses. Sie haben diese Daten im vorherigen Notizbuch hochgeladen. Stellen Sie sicher, dass Sie dasselbe Lakehouse, das Sie in Teil 1 verwendet haben, an dieses Notizbuch angefügt haben, bevor Sie diesen Code ausführen.

df = (
    spark.read.option("header", True)
    .option("inferSchema", True)
    .csv("Files/churn/raw/churn.csv")
    .cache()
)

Erstellen Sie ein Pandas DataFrame aus dem Datensatz.

Konvertieren Sie den Spark DataFrame in Pandas DataFrame, um die Verarbeitung und Visualisierung zu vereinfachen.

df = df.toPandas()

Unformatierte Daten anzeigen

Erkunden Sie die Rohdaten mit display, führen Sie einige grundlegende Statistiken aus, und zeigen Sie Diagrammansichten an. Beachten Sie, dass Sie zuerst die erforderlichen Bibliotheken wie Numpy, Pnadas, Seabornund Matplotlib für Datenanalyse und Visualisierung importieren müssen.

import seaborn as sns
sns.set_theme(style="whitegrid", palette="tab10", rc = {'figure.figsize':(9,6)})
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
from matplotlib import rc, rcParams
import numpy as np
import pandas as pd
import itertools
display(df, summary=True)

Verwenden von Data Wrangler zum Durchführen der anfänglichen Datenreinigung

Um beliebige pandas Dataframes in Ihrem Notizbuch zu erkunden und zu transformieren, starten Sie Data Wrangler direkt aus dem Notizbuch.

Anmerkung

Data Wrangler kann nicht geöffnet werden, während der Notebookkernel ausgelastet ist. Die Zellausführung muss vor dem Starten von Data Wrangler abgeschlossen werden.

  1. Wählen Sie auf dem Notebookmenüband Daten die Option Data Wrangler starten aus. Es wird eine Liste der aktivierten Pandas DataFrames angezeigt, die zur Bearbeitung verfügbar sind.
  2. Wählen Sie den DataFrame aus, den Sie in Data Wrangler öffnen möchten. Da dieses Notizbuch nur einen DataFrame enthält, df, wählen Sie dfaus.

Screenshot: Starten von Data Wrangler aus einem Notebook

Data Wrangler startet und generiert einen beschreibenden Überblick über Ihre Daten. Die Tabelle in der Mitte zeigt jede Datenspalte an. Im Bereich Zusammenfassung neben der Tabelle werden Informationen zum DataFrame angezeigt. Wenn Sie eine Spalte in der Tabelle auswählen, wird die Zusammenfassung mit Informationen zur ausgewählten Spalte aktualisiert. In einigen Fällen sind die angezeigten und zusammengefassten Daten eine abgeschnittene Ansicht Ihres DataFrames. In diesem Fall wird im Zusammenfassungsbereich das Warnbild angezeigt. Zeigen Sie mit der Maus auf diese Warnung, um Text anzuzeigen, der die Situation erklärt.

Screenshot: Übersicht über Data Wrangler

Jeder Vorgang, den Sie ausführen, kann in einer Frage von Klicks angewendet werden, die Datenanzeige in Echtzeit aktualisieren und Code generieren, den Sie als wiederverwendbare Funktion wieder in Ihrem Notizbuch speichern können.

Der Rest dieses Abschnitts führt Sie durch die Schritte zum Durchführen der Datenreinigung mit Data Wrangler.

Doppelte Zeilen ablegen

Im linken Bereich befindet sich eine Liste der Vorgänge (z. B. Suchen und Ersetzen, Format, Formeln, numerische), die Sie für das Dataset ausführen können.

  1. Erweitern Sie Suchen und ersetzen, und wählen Sie Doppelte Zeilen löschen aus.

    Screenshot: Doppelte Zeilen unter „Suchen und ersetzen“

  2. Es wird ein Bereich angezeigt, in dem Sie die Liste der Spalten auswählen möchten, die Sie vergleichen möchten, um eine doppelte Zeile zu definieren. Wählen Sie RowNumber und CustomerId aus.

    Im mittleren Bereich befindet sich eine Vorschau der Ergebnisse dieses Vorgangs. Unter der Vorschau befindet sich der Code zum Ausführen des Vorgangs. In diesem Fall scheinen die Daten unverändert zu sein. Da Sie jedoch eine abgeschnittene Ansicht betrachten, ist es ratsam, den Vorgang weiterhin anzuwenden.

    Screenshot zeigt das Entfernen doppelter Zeilen in Data Wrangler.

  3. Wählen Sie an der Seite oder unten Übernehmen aus, um zum nächsten Schritt zu wechseln.

Zeilen mit fehlenden Daten ablegen

Verwenden Sie Data Wrangler, um Zeilen mit fehlenden Daten in allen Spalten abzulegen.

  1. Wählen Sie aus Suchen und ersetzen die Option Fehlende Werte löschen aus.

  2. Wählen Sie aus Zielspalten die Option Alle auswählen.

    Screenshot zeigt das Löschen fehlender Zeilen in Data Wrangler.

  3. Wählen Sie Übernehmen aus, um mit dem nächsten Schritt fortzufahren.

Spalten entfernen

Verwenden Sie Data Wrangler zum Ablegen von Spalten, die Sie nicht benötigen.

  1. Erweitern Sie das Schema, und wählen Sie Spalten löschen aus.

  2. Wählen Sie RowNumber, CustomerId, Nachnameaus. Diese Spalten werden in der Vorschau rot angezeigt, um anzuzeigen, dass sie vom Code geändert werden (in diesem Fall gelöscht.)

    Screenshot: Löschen von Spalten in Data Wrangler

  3. Wählen Sie Übernehmen aus, um mit dem nächsten Schritt fortzufahren.

Code zum Notizbuch hinzufügen

Jedes Mal, wenn Sie Übernehmen auswählen, wird unten links im Panel Bereinigungsschritte ein neuer Schritt erstellt. Wählen Sie unten im Panel Vorschau für Code für alle Schritte anzeigen aus, um eine Kombination aller separaten Schritte anzuzeigen.

Wählen Sie oben links Code zum Notebook hinzufügen aus, um Data Wrangler zu schließen und den Code automatisch hinzuzufügen. Die Option Code zu Notebook hinzufügen umschließt den Code in einer Funktion und ruft die Funktion anschließend auf.

Screenshot: Optionen „Vorschau für Code für alle Schritte anzeigen“ und „Code zu Notebook hinzufügen“

Tipp

Der von Data Wrangler generierte Code wird erst angewendet, wenn Sie die neue Zelle manuell ausführen.

Wenn Sie Data Wrangler nicht verwendet haben, können Sie stattdessen diese nächste Codezelle verwenden.

Dieser Code ähnelt dem Code, der von Data Wrangler erstellt wird, fügt jedoch das Argument inplace=True zu jedem der generierten Schritte hinzu. Durch das Festlegen von inplace=True wird das ursprüngliche DataFrame durch Pandas überschreiben, anstatt ein neues DataFrame als Ausgabe zu erzeugen.

# Modified version of code generated by Data Wrangler 
# Modification is to add in-place=True to each step

# Define a new function that include all above Data Wrangler operations
def clean_data(df):
    # Drop rows with missing data across all columns
    df.dropna(inplace=True)
    # Drop duplicate rows in columns: 'RowNumber', 'CustomerId'
    df.drop_duplicates(subset=['RowNumber', 'CustomerId'], inplace=True)
    # Drop columns: 'RowNumber', 'CustomerId', 'Surname'
    df.drop(columns=['RowNumber', 'CustomerId', 'Surname'], inplace=True)
    return df

df_clean = clean_data(df.copy())
df_clean.head()

Erkunden der Daten

Zeigen Sie einige Zusammenfassungen und Visualisierungen der bereinigten Daten an.

Bestimmen von kategorisierten, numerischen und Zielattributen

Verwenden Sie diesen Code, um kategorisierte, numerische und Zielattribute zu ermitteln.

# Determine the dependent (target) attribute
dependent_variable_name = "Exited"
print(dependent_variable_name)
# Determine the categorical attributes
categorical_variables = [col for col in df_clean.columns if col in "O"
                        or df_clean[col].nunique() <=5
                        and col not in "Exited"]
print(categorical_variables)
# Determine the numerical attributes
numeric_variables = [col for col in df_clean.columns if df_clean[col].dtype != "object"
                        and df_clean[col].nunique() >5]
print(numeric_variables)

Zusammenfassung mit fünf Zahlen

Zeigen Sie die fünfzahlige Zusammenfassung (das Mindestergebnis, das erste Quartil, den Median, das dritte Quartil, die maximale Punktzahl) für die numerischen Attribute mithilfe von Boxplots an.

df_num_cols = df_clean[numeric_variables]
sns.set(font_scale = 0.7) 
fig, axes = plt.subplots(nrows = 2, ncols = 3, gridspec_kw =  dict(hspace=0.3), figsize = (17,8))
fig.tight_layout()
for ax,col in zip(axes.flatten(), df_num_cols.columns):
    sns.boxplot(x = df_num_cols[col], color='green', ax = ax)
fig.delaxes(axes[1,2])

Graph zeigt die fünfzahligen Zusammenfassungen an.

Verteilung ausgeschiedener und nicht ausgeschiedener Kunden

Zeigen Sie die Verteilung von ausgeschiedenen und nicht ausgeschiedenen Kunden über die kategorialen Attribute an.

attr_list = ['Geography', 'Gender', 'HasCrCard', 'IsActiveMember', 'NumOfProducts', 'Tenure']
fig, axarr = plt.subplots(2, 3, figsize=(15, 4))
for ind, item in enumerate (attr_list):
    sns.countplot(x = item, hue = 'Exited', data = df_clean, ax = axarr[ind%2][ind//2])
fig.subplots_adjust(hspace=0.7)

Diagramm mit Balkendiagrammen für ausgeschiedene und nicht ausgeschiedene Kunden

Verteilung numerischer Attribute

Zeigen Sie die Häufigkeitsverteilung numerischer Attribute mithilfe des Histogramms an.

columns = df_num_cols.columns[: len(df_num_cols.columns)]
fig = plt.figure()
fig.set_size_inches(18, 8)
length = len(columns)
for i,j in itertools.zip_longest(columns, range(length)):
    plt.subplot((length // 2), 3, j+1)
    plt.subplots_adjust(wspace = 0.2, hspace = 0.5)
    df_num_cols[i].hist(bins = 20, edgecolor = 'black')
    plt.title(i)
plt.show()

Graph zeigt die Verteilung numerischer Attribute an.

Durchführung von Feature Engineering

Führen Sie Feature engineering aus, um neue Attribute basierend auf aktuellen Attributen zu generieren:

df_clean["NewTenure"] = df_clean["Tenure"]/df_clean["Age"]
df_clean["NewCreditsScore"] = pd.qcut(df_clean['CreditScore'], 6, labels = [1, 2, 3, 4, 5, 6])
df_clean["NewAgeScore"] = pd.qcut(df_clean['Age'], 8, labels = [1, 2, 3, 4, 5, 6, 7, 8])
df_clean["NewBalanceScore"] = pd.qcut(df_clean['Balance'].rank(method="first"), 5, labels = [1, 2, 3, 4, 5])
df_clean["NewEstSalaryScore"] = pd.qcut(df_clean['EstimatedSalary'], 10, labels = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

Verwenden von Data Wrangler zum Ausführen einer einseitigen Codierung

Daten Wrangler kann ebenfalls verwendet werden, um eine einseitige Codierung durchzuführen. Öffnen Sie dazu data Wrangler erneut. Wählen Sie dieses Mal die df_clean-Daten aus.

  1. Erweitern Sie Formeln, und wählen Sie One-Hot-Encode aus.
  2. Ein Panel wird angezeigt, in dem Sie die Liste der Spalten auswählen können, für die Sie eine einseitige Codierung ausführen möchten. Wählen Sie Geografie und Genderaus.

Sie könnten den generierten Code kopieren, data Wrangler schließen, um zum Notizbuch zurückzukehren, und dann in eine neue Zelle einfügen. Wählen Sie alternativ oben links Code zu Notebook hinzufügen aus, um Data Wrangler zu schließen und den Code automatisch hinzuzufügen.

Wenn Sie Data Wrangler nicht verwendet haben, können Sie stattdessen diese nächste Codezelle verwenden:

# This is the same code that Data Wrangler will generate
 
import pandas as pd
 
def clean_data(df_clean):
    # One-hot encode columns: 'Geography', 'Gender'
    df_clean = pd.get_dummies(df_clean, columns=['Geography', 'Gender'])
    return df_clean
 
df_clean_1 = clean_data(df_clean.copy())
df_clean_1.head()

Zusammenfassung der Beobachtungen aus der explorativen Datenanalyse

  • Die meisten Kunden stammen aus Frankreich im Vergleich zu Spanien und Deutschland, während Spanien die niedrigste Abwanderungsrate gegenüber Frankreich und Deutschland aufweist.
  • Die meisten Kunden haben Kreditkarten.
  • Es gibt Kunden, deren Alter und Kreditwürdigkeit über 60 bzw. unter 400 liegen, aber sie können nicht als Ausreißer betrachtet werden.
  • Sehr wenige Kunden verfügen über mehr als zwei produkte der Bank.
  • Kunden, die nicht aktiv sind, haben eine höhere Abwanderungsrate.
  • Geschlecht und Dienstjahre haben keinen Einfluss auf die Entscheidung des Kunden, das Bankkonto zu schließen.

Erstellen einer Delta-Tabelle für die bereinigten Daten

Sie verwenden diese Daten im nächsten Notizbuch dieser Reihe.

table_name = "df_clean"
# Create Spark DataFrame from pandas
sparkDF=spark.createDataFrame(df_clean_1) 
sparkDF.write.mode("overwrite").format("delta").save(f"Tables/{table_name}")
print(f"Spark dataframe saved to delta table: {table_name}")

Nächster Schritt

Trainieren und Registrieren von Machine Learning-Modellen mit diesen Daten: