Opplæring del 2: Utforske og visualisere data ved hjelp av Microsoft Fabric-notatblokker

I denne opplæringen lærer du hvordan du utfører utforskende dataanalyse (EDA) for å undersøke og undersøke dataene mens du oppsummerer de viktigste egenskapene ved bruk av datavisualiseringsteknikker.

Du bruker seabornet Python-datavisualiseringsbibliotek som gir et grensesnitt på høyt nivå for å bygge visualobjekter på datarammer og matriser. Hvis du vil ha mer informasjon, seabornkan du se Seaborn: Visualisering av statistiske data.

Du vil også bruke Data Wrangler, et notatblokkbasert verktøy som gir deg en engasjerende opplevelse for å utføre utforskende dataanalyse og rengjøring.

Hovedtrinnene i denne opplæringen er:

  1. Les dataene som er lagret fra en deltatabell i lakehouse.
  2. Konverter en Spark DataFrame til Pandas DataFrame, som python-visualiseringsbiblioteker støtter.
  3. Bruk Data Wrangler til å utføre første datarengjøring og transformasjon.
  4. Utfør utforskende dataanalyse ved hjelp av seaborn.

Forutsetning

  • Få et Microsoft Fabric-abonnement. Eller registrer deg for en gratis prøveversjon av Microsoft Fabric.

  • Logg på Microsoft Fabric.

  • Bruk opplevelsesbryteren til venstre på hjemmesiden for å bytte til Synapse Data Science-opplevelsen.

    Skjermbilde av menyen for opplevelsesbryteren, som viser hvor du velger Datavitenskap.

Dette er del 2 av 5 i opplæringsserien. Hvis du vil fullføre denne opplæringen, må du først fullføre:

Følg med i notatblokken

2-explore-cleanse-data.ipynb er notatblokken som følger med denne opplæringen.

Hvis du vil åpne den medfølgende notatblokken for denne opplæringen, følger du instruksjonene i Klargjør systemet for opplæring for datavitenskap, for å importere notatblokken til arbeidsområdet.

Hvis du heller vil kopiere og lime inn koden fra denne siden, kan du opprette en ny notatblokk.

Pass på at du fester et lakehouse til notatblokken før du begynner å kjøre kode.

Viktig

Fest det samme lakehouse du brukte i del 1.

Les rådata fra lakehouse

Les rådata fra Filer-delen av lakehouse. Du lastet opp disse dataene i den forrige notatblokken. Kontroller at du har festet det samme lakehouse du brukte i del 1 til denne notatblokken før du kjører denne koden.

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

Opprette en pandas DataFrame fra datasettet

Konverter spark DataFrame til pandas DataFrame for enklere behandling og visualisering.

df = df.toPandas()

Vis rådata

Utforsk rådataene med display, gjør noen grunnleggende statistikker og vis diagramvisninger. Vær oppmerksom på at du først må importere de nødvendige bibliotekene, for eksempel Numpy, Pnadas, Seabornog Matplotlib for dataanalyse og 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)

Bruk Data Wrangler til å utføre første datarengjøring

Hvis du vil utforske og transformere eventuelle pandaer datarammer i notatblokken, starter du Data Wrangler direkte fra notatblokken.

Merk

Data-Wrangler kan ikke åpnes mens notatblokkkjernen er opptatt. Kjøringen av cellen må fullføres før du starter Data Wrangler.

  1. Velg Start data-Wrangler under Data-fanen på notatblokkbåndet. Du vil se en liste over aktiverte pandaer DataFrames tilgjengelig for redigering.
  2. Velg datarammen du vil åpne i Data Wrangler. Siden denne notatblokken bare inneholder én DataFrame, dfvelger du df.

Skjermbilde som viser hvordan du starter data-wrangler fra en notatblokk.

Data Wrangler starter og genererer en beskrivende oversikt over dataene. Tabellen i midten viser hver datakolonne. Sammendrag-panelet ved siden av tabellen viser informasjon om DataFrame. Når du velger en kolonne i tabellen, oppdateres sammendraget med informasjon om den valgte kolonnen. I noen tilfeller vil dataene som vises og oppsummeres, være en avkortet visning av DataFrame. Når dette skjer, ser du et advarselsbilde i sammendragsruten. Hold pekeren over denne advarselen for å vise tekst som forklarer situasjonen.

Skjermbilde som viser oversikt over data wrangler.

Hver operasjon du gjør kan brukes i et spørsmål om klikk, oppdatere datavisningen i sanntid og generere kode som du kan lagre tilbake til notatblokken som en gjenbrukbar funksjon.

Resten av denne delen veileder deg gjennom trinnene for å utføre datarengjøring med Data Wrangler.

Slipp dupliserte rader

På venstre panel er en liste over operasjoner (for eksempel Søk og erstatt, Format, Formler, Numerisk) du kan utføre på datasettet.

  1. Utvid Søk og erstatt , og velg Slipp dupliserte rader.

    Skjermbilde som viser slipp duplikatrader under søk og erstatt.

  2. Det vises et panel der du kan velge listen over kolonner du vil sammenligne for å definere en duplisert rad. Velg RowNumber og CustomerId.

    I det midterste panelet er en forhåndsvisning av resultatene av denne operasjonen. Under forhåndsvisningen er koden for å utføre operasjonen. I dette tilfellet ser dataene ut til å være uendret. Men siden du ser på en avkortet visning, er det lurt å fortsatt bruke operasjonen.

    Skjermbilde som viser å slippe dupliserte rader i Data Wrangler.

  3. Velg Bruk (enten på siden eller nederst) for å gå til neste trinn.

Slipp rader med manglende data

Bruk Data Wrangler til å slippe rader med manglende data på tvers av alle kolonner.

  1. Velg Slipp manglende verdier fra Søk og erstatt.

  2. Velg Velg alt fra målkolonnene.

    Skjermbilde som viser å slippe manglende rader i Data Wrangler.

  3. Velg Bruk for å gå videre til neste trinn.

Slipp kolonner

Bruk Data Wrangler til å slippe kolonner du ikke trenger.

  1. Utvid skjema , og velg Slipp kolonner.

  2. Velg RowNumber, CustomerId, Surname. Disse kolonnene vises i rødt i forhåndsvisningen for å vise at de er endret av koden (i dette tilfellet droppet.)

    Skjermbilde som viser hvordan du slipper kolonner i Data Wrangler.

  3. Velg Bruk for å gå videre til neste trinn.

Legge til kode i notatblokken

Hver gang du velger Bruk, opprettes et nytt trinn i panelet For rengjøringstrinn nederst til venstre. Velg Forhåndsvisningskode nederst i panelet for å vise en kombinasjon av alle de separate trinnene.

Velg Legg til kode i notatblokken øverst til venstre for å lukke Data Wrangler og legge til koden automatisk. Legg til kode i notatblokken bryter koden i en funksjon, og kaller deretter funksjonen.

Skjermbilde som viser forhåndsvisningskode og hvor du får tilgang til legg til i notatblokken.

Tips

Koden som genereres av Data Wrangler, brukes ikke før du kjører den nye cellen manuelt.

Hvis du ikke brukte Data Wrangler, kan du i stedet bruke denne neste kodecellen.

Denne koden ligner koden som produseres av Data Wrangler, men legger til i argumentet inplace=True i hver av de genererte trinnene. Ved å angi inplace=Truevil pandaer overskrive den opprinnelige DataFrame i stedet for å produsere 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()

Utforsk dataene

Vis noen sammendrag og visualiseringer av de rensede dataene.

Bestemme kategoriske, numeriske attributter og målattributter

Bruk denne koden til å bestemme kategoriske, numeriske attributter og målattributter.

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

Sammendrag med fem tall

Vis sammendraget med fem tall (minimumspoengsum, første kvartil, median, tredje kvartil, maksimal poengsum) for de numeriske attributtene ved hjelp av bokstegn.

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

Grafen viser sammendrag med fem tall.

Distribusjon av avsluttede og ikke-skadelige kunder

Vis fordelingen av avsluttede eller ikke-skadelige kunder på tvers av de kategoriske attributtene.

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 viser stolpediagrammene for avsluttede og ikke-skadelige kunder.

Distribusjon av numeriske attributter

Vis frekvensfordelingen av numeriske attributter ved hjelp av 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()

Graph viser fordelingen av numeriske attributter.

Utfør funksjonsteknikk

Utfør funksjonsteknikk for å generere nye attributter basert på gjeldende attributter:

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

Bruk Data Wrangler til å utføre en varm koding

Data-Wrangler kan også brukes til å utføre en-varm koding. Hvis du vil gjøre dette, åpner du Data Wrangler på nytt. Denne gangen velger du df_clean dataene.

  1. Utvid formler , og velg One-hot-kode.
  2. Det vises et panel der du kan velge listen over kolonner du vil utføre en varm koding på. Velg Geografi og Kjønn.

Du kan kopiere den genererte koden, lukke Data Wrangler for å gå tilbake til notatblokken, og deretter lime inn i en ny celle. Du kan også velge Legg til kode i notatblokken øverst til venstre for å lukke Data Wrangler og legge til koden automatisk.

Hvis du ikke brukte Data Wrangler, kan du i stedet bruke denne neste kodecellen:

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

Sammendrag av observasjoner fra den utforskende dataanalysen

  • De fleste av kundene er fra Frankrike sammenlignet med Spania og Tyskland, mens Spania har den laveste churn rate sammenlignet med Frankrike og Tyskland.
  • De fleste av kundene har kredittkort.
  • Det finnes kunder som har en alders- og kredittvurdering på henholdsvis over 60 og under 400, men de kan ikke betraktes som ytterpunkter.
  • Svært få kunder har mer enn to av bankens produkter.
  • Kunder som ikke er aktive, har høyere frafallsrate.
  • Kjønns- og ansettelsesår ser ikke ut til å ha noen innvirkning på kundens beslutning om å stenge bankkontoen.

Opprette en deltatabell for de rensede dataene

Du bruker disse dataene i den neste notatblokken i denne 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}")

Neste trinn

Lær opp og registrer maskinlæringsmodeller med disse dataene: