Udostępnij za pośrednictwem


Samouczek, część 2. Eksplorowanie i wizualizowanie danych przy użyciu notesów usługi Microsoft Fabric

W tym samouczku dowiesz się, jak przeprowadzić eksploracyjne analizy danych (EDA) w celu zbadania i zbadania danych podczas podsumowania kluczowych cech za pomocą technik wizualizacji danych.

Użyjesz seabornbiblioteki wizualizacji danych języka Python, która udostępnia interfejs wysokiego poziomu do tworzenia wizualizacji na ramkach danych i tablicach. Aby uzyskać więcej informacji na temat seabornprogramu , zobacz Seaborn: Statistical Data Visualization (Wizualizacja danych statystycznych).

Użyjesz również narzędzia data Wrangler, opartego na notesach, które zapewnia immersyjne środowisko do przeprowadzania eksploracyjnej analizy i czyszczenia danych.

Główne kroki opisane w tym samouczku to:

  1. Odczytywanie danych przechowywanych z tabeli delty w lakehouse.
  2. Przekonwertuj ramkę danych platformy Spark na ramkę danych biblioteki pandas, która obsługuje biblioteki wizualizacji języka Python.
  3. Użyj narzędzia Data Wrangler, aby wykonać początkowe czyszczenie i przekształcanie danych.
  4. Wykonaj eksploracyjne analizy danych przy użyciu polecenia seaborn.

Wymagania wstępne

  • Uzyskaj subskrypcję usługi Microsoft Fabric. Możesz też utworzyć konto bezpłatnej wersji próbnej usługi Microsoft Fabric.

  • Zaloguj się do usługi Microsoft Fabric.

  • Użyj przełącznika środowiska po lewej stronie głównej, aby przełączyć się na środowisko usługi Synapse Nauka o danych.

    Zrzut ekranu przedstawiający menu przełącznika środowiska pokazujące, gdzie wybrać Nauka o danych.

Jest to część 2 z 5 w serii samouczków. Aby ukończyć ten samouczek, najpierw wykonaj następujące czynności:

Postępuj zgodnie z instrukcjami w notesie

2-explore-cleanse-data.ipynb to notes, który towarzyszy temu samouczkowi.

Aby otworzyć towarzyszący notes na potrzeby tego samouczka, postępuj zgodnie z instrukcjami w temacie Przygotowywanie systemu do celów nauki o danych, aby zaimportować notes do obszaru roboczego.

Jeśli wolisz skopiować i wkleić kod z tej strony, możesz utworzyć nowy notes.

Przed rozpoczęciem uruchamiania kodu pamiętaj, aby dołączyć usługę Lakehouse do notesu .

Ważne

Dołącz ten sam jezioro, którego użyto w części 1.

Odczytywanie danych pierwotnych z lakehouse

Odczytywanie danych pierwotnych z sekcji Pliki w lakehouse. Te dane zostały przekazane w poprzednim notesie. Przed uruchomieniem tego kodu upewnij się, że do tego notesu dołączono ten sam magazyn lakehouse użyty w części 1.

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

Tworzenie ramki danych pandas na podstawie zestawu danych

Przekonwertuj ramkę danych platformy Spark na ramkę danych biblioteki pandas, aby ułatwić przetwarzanie i wizualizację.

df = df.toPandas()

Wyświetlanie danych pierwotnych

Zapoznaj się z danymi nieprzetworzonymi za pomocą polecenia display, wykonaj kilka podstawowych statystyk i wyświetl widoki wykresów. Należy najpierw zaimportować wymagane biblioteki, takie jak Numpy, Pnadas, Seaborni Matplotlib na potrzeby analizy danych i wizualizacji.

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)

Wykonywanie początkowego czyszczenia danych przy użyciu narzędzia Data Wrangler

Aby eksplorować i przekształcać wszystkie ramki danych pandas w notesie, uruchom narzędzie Data Wrangler bezpośrednio z notesu.

Uwaga

Nie można otworzyć narzędzia Wrangler danych, gdy jądro notesu jest zajęte. Wykonanie komórki musi zostać ukończone przed uruchomieniem narzędzia Data Wrangler.

  1. Na karcie Dane wstążki notesu wybierz pozycję Uruchom narzędzie Data Wrangler. Zobaczysz listę aktywowanych ramek danych biblioteki pandas dostępnych do edycji.
  2. Wybierz ramkę danych, którą chcesz otworzyć w narzędziu Data Wrangler. Ponieważ ten notes zawiera tylko jedną ramkę danych, dfwybierz pozycję df.

Zrzut ekranu przedstawia sposób uruchamiania elementu wrangler danych z notesu.

Narzędzie Data Wrangler uruchamia i generuje opisowe omówienie danych. Tabela w środku zawiera każdą kolumnę danych. Panel Podsumowanie obok tabeli zawiera informacje o ramce danych. Po wybraniu kolumny w tabeli podsumowanie zostanie zaktualizowane o informacje o wybranej kolumnie. W niektórych przypadkach wyświetlane i podsumowane dane będą obcinanym widokiem ramki danych. W takim przypadku w okienku podsumowania zostanie wyświetlony obraz ostrzegawczy. Umieść kursor na tym ostrzeżeniu, aby wyświetlić tekst wyjaśniający sytuację.

Zrzut ekranu przedstawia przegląd wrangler danych.

Każda operacja, którą można wykonać, można zastosować w kilku kliknięciach, aktualizując wyświetlanie danych w czasie rzeczywistym i generując kod, który można zapisać z powrotem do notesu jako funkcję wielokrotnego użytku.

W pozostałej części tej sekcji przedstawiono procedurę czyszczenia danych za pomocą narzędzia Data Wrangler.

Usuwanie zduplikowanych wierszy

Na panelu po lewej stronie znajduje się lista operacji (takich jak Znajdź i zamień, Format, Formuły, Numeryczne), które można wykonać na zestawie danych.

  1. Rozwiń węzeł Znajdź i zamień i wybierz pozycję Upuść zduplikowane wiersze.

    Zrzut ekranu przedstawia usuwanie zduplikowanych wierszy w obszarze znajdowania i zastępowania.

  2. Zostanie wyświetlony panel umożliwiający wybranie listy kolumn, które chcesz porównać, aby zdefiniować zduplikowany wiersz. Wybierz pozycję RowNumber i CustomerId.

    W środkowym panelu jest podgląd wyników tej operacji. W wersji zapoznawczej jest kod do wykonania operacji. W tym przypadku dane wydają się być niezmienione. Ale ponieważ patrzysz na obcięty widok, dobrym pomysłem jest nadal stosowanie operacji.

    Zrzut ekranu przedstawia usuwanie zduplikowanych wierszy w narzędziu Data Wrangler.

  3. Wybierz pozycję Zastosuj (po stronie lub u dołu), aby przejść do następnego kroku.

Usuwanie wierszy z brakującymi danymi

Użyj narzędzia Data Wrangler, aby usunąć wiersze z brakującymi danymi we wszystkich kolumnach.

  1. Wybierz pozycję Upuść brakujące wartości z pozycji Znajdź i zastąp.

  2. Wybierz pozycję Wybierz wszystko w kolumnach Target (Cel).

    Zrzut ekranu przedstawia usuwanie brakujących wierszy w narzędziu Data Wrangler.

  3. Wybierz pozycję Zastosuj , aby przejść do następnego kroku.

Usuwanie kolumn

Użyj narzędzia Data Wrangler, aby usunąć kolumny, których nie potrzebujesz.

  1. Rozwiń węzeł Schemat i wybierz pozycję Upuść kolumny.

  2. Wybierz pozycję RowNumber, CustomerId, Nazwisko. Te kolumny są wyświetlane na czerwono w wersji zapoznawczej, aby pokazać, że zostały zmienione przez kod (w tym przypadku porzucony).

    Zrzut ekranu przedstawia usuwanie kolumn w narzędziu Data Wrangler.

  3. Wybierz pozycję Zastosuj , aby przejść do następnego kroku.

Dodawanie kodu do notesu

Za każdym razem, gdy wybierzesz pozycję Zastosuj, w panelu Kroki czyszczenia w lewym dolnym rogu zostanie utworzony nowy krok. W dolnej części panelu wybierz pozycję Podgląd kodu dla wszystkich kroków , aby wyświetlić kombinację wszystkich oddzielnych kroków.

Wybierz pozycję Dodaj kod do notesu w lewym górnym rogu, aby zamknąć narzędzie Data Wrangler i dodać kod automatycznie. Polecenie Dodaj kod do notesu opakowuje kod w funkcji, a następnie wywołuje funkcję.

Zrzut ekranu przedstawia kod podglądu i miejsce dostępu do dodawania do notesu.

Napiwek

Kod wygenerowany przez usługę Data Wrangler nie zostanie zastosowany do momentu ręcznego uruchomienia nowej komórki.

Jeśli nie użyto narzędzia Data Wrangler, możesz zamiast tego użyć następnej komórki kodu.

Ten kod jest podobny do kodu wygenerowanego przez usługę Data Wrangler, ale dodaje argument inplace=True do każdego z wygenerowanych kroków. Ustawienie elementu inplace=Truepandas spowoduje zastąpienie oryginalnej ramki danych zamiast tworzenia nowej ramki danych jako danych wyjściowych.

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

Eksplorowanie danych

Wyświetl niektóre podsumowania i wizualizacje oczyszczonych danych.

Określanie atrybutów kategorii, liczbowych i docelowych

Ten kod służy do określania atrybutów kategorii, liczbowych i docelowych.

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

Podsumowanie z pięcioma liczbami

Pokaż podsumowanie pięciu liczb (minimalny wynik, pierwszy kwartyl, mediana, trzeci kwartyl, maksymalny wynik) dla atrybutów liczbowych przy użyciu wykresów pól.

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

Wykres przedstawia podsumowania z pięcioma liczbami.

Dystrybucja wycofanych i nieistnienych klientów

Pokaż rozkład wycofanych i nieistnienych klientów w atrybutach kategorii.

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)

Wykres przedstawia wykresy słupkowe dla wycofanych i nieistnienych klientów.

Rozkład atrybutów liczbowych

Pokaż rozkład częstotliwości atrybutów liczbowych przy użyciu histogramu.

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

Wykres przedstawia rozkład atrybutów liczbowych.

Wykonywanie inżynierii cech

Wykonaj inżynierię cech, aby wygenerować nowe atrybuty na podstawie bieżących atrybutów:

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

Używanie narzędzia Data Wrangler do wykonywania kodowania jednorazowego

Wrangler danych może również służyć do wykonywania kodowania jednorazowego. W tym celu otwórz ponownie narzędzie Data Wrangler. Tym razem wybierz df_clean dane.

  1. Rozwiń węzeł Formuły i wybierz pozycję Kodowanie jednorazowe.
  2. Zostanie wyświetlony panel umożliwiający wybranie listy kolumn, na których chcesz wykonać kodowanie jednorazowe. Wybierz pozycję Geografia i Płeć.

Możesz skopiować wygenerowany kod, zamknąć narzędzie Data Wrangler, aby powrócić do notesu, a następnie wkleić go do nowej komórki. Możesz też wybrać pozycję Dodaj kod do notesu w lewym górnym rogu, aby zamknąć narzędzie Data Wrangler i dodać kod automatycznie.

Jeśli nie użyto narzędzia Data Wrangler, możesz zamiast tego użyć następnej komórki kodu:

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

Podsumowanie obserwacji z eksploracyjnej analizy danych

  • Większość klientów pochodzi z Francji w porównaniu z Hiszpanią i Niemcami, podczas gdy Hiszpania ma najniższy współczynnik zmian w porównaniu z Francją i Niemcami.
  • Większość klientów ma karty kredytowe.
  • Istnieją klienci, których wiek i ocena kredytowa są powyżej 60 i poniżej 400, ale nie można ich traktować jako wartości odstających.
  • Bardzo niewielu klientów ma więcej niż dwa produkty banku.
  • Klienci, którzy nie są aktywni, mają wyższy współczynnik zmian.
  • Płeć i lata kadencji nie wydają się mieć wpływu na decyzję klienta o zamknięciu konta bankowego.

Tworzenie tabeli różnicowej dla oczyszczonych danych

Te dane będą używane w następnym notesie tej serii.

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

Następny krok

Trenowanie i rejestrowanie modeli uczenia maszynowego przy użyciu tych danych: