Självstudie del 2: Utforska och visualisera data med hjälp av Microsoft Fabric-notebook-filer

I den här självstudien får du lära dig hur du utför undersökande dataanalys (EDA) för att undersöka och undersöka data samtidigt som du sammanfattar dess viktigaste egenskaper med hjälp av datavisualiseringstekniker.

Du använder seaborn, ett Python-datavisualiseringsbibliotek som tillhandahåller ett högnivågränssnitt för att skapa visuella objekt på dataramar och matriser. Mer information om seabornfinns i Seaborn: Statistisk datavisualisering.

Du kommer också att använda Data Wrangler, ett notebook-baserat verktyg som ger dig en uppslukande upplevelse för att utföra undersökande dataanalys och rensning.

De viktigaste stegen i den här självstudien är:

  1. Läs data som lagras från en deltatabell i lakehouse.
  2. Konvertera en Spark DataFrame till Pandas DataFrame, som python-visualiseringsbibliotek stöder.
  3. Använd Data Wrangler för att utföra inledande datarensning och transformering.
  4. Utför undersökande dataanalys med hjälp av seaborn.

Förutsättningar

Det här är del 2 av 5 i självstudieserien. Slutför den här självstudien genom att först slutföra:

Följ med i notebook-filen

2-explore-cleanse-data.ipynb är anteckningsboken som medföljer den här självstudien.

Om du vill öppna den medföljande notebook-filen för den här självstudien följer du anvisningarna i Förbereda systemet för självstudier för datavetenskap för att importera anteckningsboken till din arbetsyta.

Om du hellre vill kopiera och klistra in koden från den här sidan kan du skapa en ny notebook-fil.

Se till att bifoga ett lakehouse i notebook-filen innan du börjar köra kod.

Viktigt!

Fäst samma sjöhus som du använde i del 1.

Läsa rådata från lakehouse

Läs rådata från avsnittet Filer i lakehouse. Du laddade upp dessa data i föregående notebook-fil. Kontrollera att du har kopplat samma lakehouse som du använde i del 1 till den här notebook-filen innan du kör den här koden.

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

Skapa en Pandas DataFrame från datauppsättningen

Konvertera spark DataFrame till Pandas DataFrame för enklare bearbetning och visualisering.

df = df.toPandas()

Visa rådata

Utforska rådata med display, gör lite grundläggande statistik och visa diagramvyer. Observera att du först måste importera de bibliotek som krävs, till exempel Numpy, Pnadas, Seabornoch Matplotlib för dataanalys och visualisering.

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)

Använda Data Wrangler för att utföra inledande datarensning

Om du vill utforska och transformera pandas-dataramar i notebook-filen startar du Data Wrangler direkt från notebook-filen.

Kommentar

Data Wrangler kan inte öppnas när notebook-kerneln är upptagen. Cellkörningen måste slutföras innan Data Wrangler startas.

  1. Under menyfliken Data i anteckningsboken väljer du Starta Data Wrangler. Du ser en lista över aktiverade Pandas DataFrames tillgängliga för redigering.
  2. Välj den dataram som du vill öppna i Data Wrangler. Eftersom den här notebook-filen bara innehåller en DataFrame dfväljer du df.

Skärmbild som visar hur du startar datavridaren från en notebook-fil.

Data Wrangler startar och genererar en beskrivande översikt över dina data. Tabellen i mitten visar varje datakolumn. Panelen Sammanfattning bredvid tabellen visar information om DataFrame. När du väljer en kolumn i tabellen uppdateras sammanfattningen med information om den valda kolumnen. I vissa fall är de data som visas och sammanfattas en trunkerad vy av dataramen. När detta händer visas varningsbilden i sammanfattningsfönstret. Hovra över den här varningen om du vill visa text som förklarar situationen.

Skärmbild som visar översikt över datavridare.

Varje åtgärd som du gör kan användas med klick, uppdatera datavisningen i realtid och generera kod som du kan spara tillbaka till notebook-filen som en återanvändbar funktion.

Resten av det här avsnittet vägleder dig genom stegen för att utföra datarensning med Data Wrangler.

Ta bort dubblettrader

På den vänstra panelen finns en lista över åtgärder (till exempel Sök och ersätt, Format, Formler, Numeriska) som du kan utföra på datauppsättningen.

  1. Expandera Sök och ersätt och välj Släpp dubblettrader.

    Skärmbild som visar hur du släpper dubblettrader under sök och ersätt.

  2. En panel visas där du kan välja den lista med kolumner som du vill jämföra för att definiera en dubblettrad. Välj RowNumber och CustomerId.

    I mittenpanelen finns en förhandsgranskning av resultatet av den här åtgärden. Under förhandsversionen finns koden för att utföra åtgärden. I det här fallet verkar data vara oförändrade. Men eftersom du tittar på en trunkerad vy är det en bra idé att fortfarande tillämpa åtgärden.

    Skärmbild som visar hur du släpper dubbletter av rader i Data Wrangler.

  3. Välj Använd (antingen på sidan eller längst ned) för att gå till nästa steg.

Ta bort rader med data som saknas

Använd Data Wrangler för att släppa rader med data som saknas i alla kolumner.

  1. Välj Släpp saknade värden från Sök och ersätt.

  2. Välj Välj alla från målkolumnerna.

    Skärmbild som visar hur rader som saknas släpps i Data Wrangler.

  3. Välj Använd för att gå vidare till nästa steg.

Ta bort kolumner

Använd Data Wrangler för att släppa kolumner som du inte behöver.

  1. Expandera Schema och välj Släpp kolumner.

  2. Välj RowNumber, CustomerId, Efternamn. Dessa kolumner visas i rött i förhandsversionen för att visa att de har ändrats av koden (i det här fallet borttagna.)

    Skärmbild som visar släppa kolumner i Data Wrangler.

  3. Välj Använd för att gå vidare till nästa steg.

Lägga till kod i notebook-filen

Varje gång du väljer Använd skapas ett nytt steg i panelen Rengöringssteg längst ned till vänster. Längst ned i panelen väljer du Förhandsversionskod för alla steg för att visa en kombination av alla separata steg.

Välj Lägg till kod i notebook-filen längst upp till vänster för att stänga Data Wrangler och lägga till koden automatiskt. Lägg till kod i notebook-filen omsluter koden i en funktion och anropar sedan funktionen.

Skärmbild som visar förhandsgranskningskod och var du kan komma åt lägg till i notebook-filen.

Dricks

Koden som genereras av Data Wrangler tillämpas inte förrän du kör den nya cellen manuellt.

Om du inte använde Data Wrangler kan du i stället använda nästa kodcell.

Den här koden liknar koden som skapas av Data Wrangler, men lägger till i argumentet inplace=True i vart och ett av de genererade stegen. Genom att ange inplace=Trueskriver Pandas över den ursprungliga DataFrame i stället för att skapa en ny DataFrame som utdata.

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

Utforska data

Visa några sammanfattningar och visualiseringar av de rensade data.

Fastställa kategoriska attribut, numeriska attribut och målattribut

Använd den här koden för att fastställa kategoriska attribut, numeriska attribut och målattribut.

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

Sammanfattning med fem nummer

Visa femtalssammanfattningen (minimipoängen, den första kvartilen, medianen, den tredje kvartilen, maxpoängen) för de numeriska attributen med hjälp av rutor.

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

Diagrammet visar femnummersammanfattningarna.

Distribution av kunder som har avslutats och inte har angetts

Visa fördelningen av kunder som inte har avslutats jämfört med icke-kunder över de kategoriska attributen.

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)

Grafen visar stapeldiagrammen för kunder som inte har avslutats eller inte har angetts.

Fördelning av numeriska attribut

Visa frekvensfördelningen för numeriska attribut med histogram.

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

Diagram visar fördelningen av numeriska attribut.

Utföra funktionsframställning

Utför funktionsframställning för att generera nya attribut baserat på aktuella attribut:

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

Använda Data Wrangler för att utföra kodning med en frekvent kodning

Data Wrangler kan också användas för att utföra en frekvent kodning. Om du vill göra det öppnar du Data Wrangler igen. Den här gången väljer du df_clean data.

  1. Expandera Formler och välj En frekvent kodning.
  2. En panel visas där du kan välja den lista med kolumner som du vill utföra en frekvent kodning på. Välj Geografi och Kön.

Du kan kopiera den genererade koden, stänga Data Wrangler för att återgå till notebook-filen och sedan klistra in den i en ny cell. Eller välj Lägg till kod i notebook-filen längst upp till vänster för att stänga Data Wrangler och lägga till koden automatiskt.

Om du inte använde Data Wrangler kan du i stället använda nästa kodcell:

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

Sammanfattning av observationer från den undersökande dataanalysen

  • De flesta kunder kommer från Frankrike och jämför med Spanien och Tyskland, medan Spanien har den lägsta omsättningsgraden jämfört med Frankrike och Tyskland.
  • De flesta kunder har kreditkort.
  • Det finns kunder vars ålder och kreditpoäng är över 60 respektive under 400, men de kan inte betraktas som avvikande värden.
  • Mycket få kunder har mer än två av bankens produkter.
  • Kunder som inte är aktiva har en högre omsättningshastighet.
  • Kön och anställningsår verkar inte påverka kundens beslut att stänga bankkontot.

Skapa en deltatabell för rensade data

Du använder dessa data i nästa notebook-fil i den här serien.

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

Gå vidare

Träna och registrera maskininlärningsmodeller med dessa data: