Kurz 2. část: Prozkoumání a vizualizace dat pomocí poznámkových bloků Microsoft Fabric

V tomto kurzu se dozvíte, jak provádět průzkumnou analýzu dat (EDA), abyste prozkoumali a prozkoumali data a současně sumarizuje jejich klíčové charakteristiky pomocí technik vizualizace dat.

Použijete seabornknihovnu vizualizace dat Pythonu, která poskytuje rozhraní vysoké úrovně pro vytváření vizuálů na datových rámcích a polích. Další informace o seabornaplikaci Seaborn: Statistická vizualizace dat.

K provádění průzkumné analýzy a čištění dat také použijete nástroj založený na poznámkovém bloku, který vám poskytne imerzivní prostředí.

Hlavními kroky v tomto kurzu jsou:

  1. Přečtěte si data uložená z tabulky Delta v jezeře.
  2. Převeďte datový rámec Sparku na datový rámec Pandas, který knihovny vizualizací Pythonu podporují.
  3. Pomocí nástroje Data Wrangler proveďte počáteční čištění a transformaci dat.
  4. Provádět průzkumnou analýzu dat pomocí seaborn.

Požadavky

Toto je část 2 z 5 v sérii kurzů. K dokončení tohoto kurzu nejprve dokončete:

Sledování v poznámkovém bloku

2-explore-vyčistit-data.ipynb je poznámkový blok, který doprovází tento kurz.

Pokud chcete otevřít doprovodný poznámkový blok pro tento kurz, postupujte podle pokynů v části Příprava systému na kurzy datových věd a importujte poznámkový blok do pracovního prostoru.

Pokud byste raději zkopírovali a vložili kód z této stránky, můžete vytvořit nový poznámkový blok.

Než začnete spouštět kód, nezapomeňte k poznámkovému bloku připojit lakehouse.

Důležité

Připojte stejný jezerní dům, který jste použili v části 1.

Čtení nezpracovaných dat z jezera

Čtení nezpracovaných dat z oddílu Soubory v jezeře. Tato data jste nahráli v předchozím poznámkovém bloku. Před spuštěním tohoto kódu se ujistěte, že jste k tomuto poznámkovému bloku připojili stejný jezerní dům, který jste použili v části 1.

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

Vytvoření datového rámce pandas z datové sady

Převeďte datový rámec Sparku na datový rámec pandas pro snadnější zpracování a vizualizaci.

df = df.toPandas()

Zobrazení nezpracovaných dat

Prozkoumejte nezpracovaná data pomocí display, proveďte některé základní statistiky a zobrazte zobrazení grafu. Nezapomeňte, že nejprve musíte importovat požadované knihovny, jako Numpyje , PnadasSeaborn, a Matplotlib pro analýzu a vizualizaci dat.

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)

Použití transformace dat k počátečnímu čištění dat

Pokud chcete prozkoumat a transformovat datové rámce pandas v poznámkovém bloku, spusťte přímo z poznámkového bloku službu Data Wrangler.

Poznámka:

Data Wrangler nelze otevřít, když je jádro poznámkového bloku zaneprázdněné. Provedení buňky musí být dokončeno před spuštěním služby Data Wrangler.

  1. Pod kartou Data na pásu karet poznámkového bloku vyberte Spustit transformaci dat. Zobrazí se seznam aktivovaných datových rámců pandas, které jsou k dispozici pro úpravy.
  2. Vyberte datový rámec, který chcete otevřít v objektu Data Wrangler. Vzhledem k tomu, že tento poznámkový blok obsahuje pouze jeden datový rámec, dfvyberte df.

Snímek obrazovky ukazuje, jak spustit transformaci dat z poznámkového bloku.

Data Wrangler se spustí a vygeneruje popisný přehled vašich dat. Tabulka uprostřed zobrazuje každý sloupec dat. Panel Souhrn vedle tabulky zobrazuje informace o datovém rámci. Když vyberete sloupec v tabulce, souhrn se aktualizuje informacemi o vybraném sloupci. V některých případech budou zobrazená a souhrnná data zkráceným zobrazením datového rámce. V takovém případě se v podokně souhrnu zobrazí obrázek upozornění. Najeďte myší na toto upozornění a zobrazte text vysvětlující situaci.

Snímek obrazovky s přehledem transformace dat

Každou operaci, kterou uděláte, můžete použít na kliknutí, aktualizovat zobrazení dat v reálném čase a vygenerovat kód, který můžete uložit zpět do poznámkového bloku jako opakovaně použitelnou funkci.

Zbývající část této části vás provede postupem čištění dat pomocí služby Data Wrangler.

Přetažení duplicitních řádků

Na levém panelu je seznam operací (například Najít a nahradit, Formát, Vzorce, Číselné), které můžete s datovou sadou provádět.

  1. Rozbalte položku Najít a nahraďte a vyberte Vypustit duplicitní řádky.

    Snímek obrazovky s přetažením duplicitních řádků pod položkou Najít a nahradit

  2. Zobrazí se panel pro výběr seznamu sloupců, které chcete porovnat, aby se definoval duplicitní řádek. Vyberte RowNumber a CustomerId.

    Na prostředním panelu je náhled výsledků této operace. Ve verzi Preview je kód k provedení operace. V tomto případě se data jeví jako nezměněná. Ale vzhledem k tomu, že se díváte na zkrácené zobrazení, je vhodné operaci přesto použít.

    Snímek obrazovky znázorňující vyřazení duplicitních řádků ve službě Data Wrangler

  3. Pokud chcete přejít k dalšímu kroku, vyberte Použít (na straně nebo dole).

Odstranění řádků s chybějícími daty

Pomocí služby Data Wrangler můžete vypustit řádky s chybějícími daty napříč všemi sloupci.

  1. V nabídce Najít a nahradit vyberte Vypustit chybějící hodnoty.

  2. Ve sloupcích Cíl zvolte Vybrat vše.

    Snímek obrazovky znázorňující vyřazení chybějících řádků ve službě Data Wrangler

  3. Výběrem možnosti Použít přejdete k dalšímu kroku.

Vyřazení sloupců

Pomocí služby Data Wrangler zahoďte sloupce, které nepotřebujete.

  1. Rozbalte schéma a vyberte Rozevírací sloupce.

  2. Vyberte RowNumber, CustomerId, Příjmení. Tyto sloupce se v náhledu zobrazují červeně, aby se ukázaly, že se změnily kódem (v tomto případě se vynechaly.)

    Snímek obrazovky znázorňující vyřazení sloupců ve službě Data Wrangler

  3. Výběrem možnosti Použít přejdete k dalšímu kroku.

Přidání kódu do poznámkového bloku

Pokaždé, když vyberete Použít, se v levém dolním rohu vytvoří nový krok. V dolní části panelu vyberte Kód náhledu pro všechny kroky , abyste zobrazili kombinaci všech samostatných kroků.

Výběrem možnosti Přidat kód do poznámkového bloku v levém horním rohu zavřete aplikaci Data Wrangler a přidejte kód automaticky. Přidání kódu do poznámkového bloku zabalí kód do funkce a pak zavolá funkci.

Snímek obrazovky s náhledem kódu a umístěním pro přístup k přidání do poznámkového bloku

Tip

Kód vygenerovaný službou Data Wrangler se nepoužije, dokud ručně nespustíte novou buňku.

Pokud jste nepoužíli službu Data Wrangler, můžete místo toho použít tuto další buňku kódu.

Tento kód se podobá kódu vytvořenému rozhraním Data Wrangler, ale přidá do argumentu inplace=True každý z vygenerovaných kroků. inplace=TrueNastavením pandas přepíše původní datový rámec místo vytvoření nového datového rámce jako výstupu.

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

Prozkoumání dat

Zobrazí některé souhrny a vizualizace vyčištěných dat.

Určení kategorických, číselných a cílových atributů

Tento kód slouží k určení kategorických, číselných a cílových atributů.

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

Souhrn pěti čísel

Zobrazte souhrn s pěti čísly (minimální skóre, první kvartil, medián, třetí kvartil, maximální skóre) pro číselné atributy pomocí krabicových grafů.

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

Graf zobrazuje souhrny s pěti čísly.

Distribuce ukončených a neexitovaných zákazníků

Umožňuje zobrazit distribuci ukončených a neexitovaných zákazníků napříč atributy kategorií.

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)

Graf zobrazuje pruhové grafy pro ukončené a nevyexitované zákazníky.

Rozdělení číselných atributů

Pomocí histogramu můžete zobrazit rozdělení četnosti číselných atributů.

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

Graf zobrazuje rozdělení číselných atributů.

Provádění přípravy funkcí

Vytváření funkcí za účelem generování nových atributů na základě aktuálních atributů:

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

Použití služby Data Wrangler k kódování 1:00

Data Wrangler lze také použít k provedení kódování 1.00. Uděláte to tak, že znovu otevřete rozhraní Data Wrangler. Tentokrát vyberte df_clean data.

  1. Rozbalte vzorce a vyberte kódování typu One-hot.
  2. Zobrazí se panel pro výběr seznamu sloupců, na kterých chcete provést kódování 1:horká. Vyberte Zeměpis a Pohlaví.

Vygenerovaný kód můžete zkopírovat, zavřít data Wrangler a vrátit se do poznámkového bloku a pak vložit do nové buňky. Nebo vyberte Přidat kód do poznámkového bloku v levém horním rohu. Tím zavřete transformaci dat a kód přidáte automaticky.

Pokud jste službu Data Wrangler nepoužíli, můžete místo toho použít tuto další buňku kódu:

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

Shrnutí pozorování z průzkumné analýzy dat

  • Většina zákazníků je z Francie porovnání se Španělskem a Německem, zatímco Španělsko má nejnižší četnost změn oproti Francii a Německu.
  • Většina zákazníků má platební karty.
  • Existují zákazníci, jejichž skóre věku a kreditu je vyšší než 60 a nižší než 400, ale nedají se považovat za odlehlé hodnoty.
  • Velmi málo zákazníků má více než dva produkty banky.
  • Zákazníci, kteří nejsou aktivní, mají vyšší četnost změn.
  • Genderové a desetileté roky se zdá, že nemají vliv na rozhodnutí zákazníka uzavřít bankovní účet.

Vytvoření tabulky delta pro vyčištěná data

Tato data použijete v dalším poznámkovém bloku této řady.

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

Další krok

Trénování a registrace modelů strojového učení s využitím těchto dat: