Tutorial Bagian 2: Menjelajahi dan memvisualisasikan data menggunakan notebook Microsoft Fabric

Dalam tutorial ini, Anda akan mempelajari cara melakukan analisis data eksploratif (EDA) untuk memeriksa dan menyelidiki data sambil meringkas karakteristik utamanya melalui penggunaan teknik visualisasi data.

Anda akan menggunakan seabornpustaka visualisasi data Python yang menyediakan antarmuka tingkat tinggi untuk membangun visual pada dataframe dan array. Untuk informasi selengkapnya tentang seaborn, lihat Seaborn: Visualisasi Data Statistik.

Anda juga akan menggunakan Data Wrangler, alat berbasis notebook yang memberi Anda pengalaman imersif untuk melakukan analisis dan pembersihan data eksploratif.

Langkah utama dalam tutorial ini adalah:

  1. Baca data yang disimpan dari tabel delta di lakehouse.
  2. Konversikan Spark DataFrame ke Pandas DataFrame, yang didukung pustaka visualisasi python.
  3. Gunakan Data Wrangler untuk melakukan pembersihan dan transformasi data awal.
  4. Lakukan analisis data eksploratif menggunakan seaborn.

Prasyarat

Ini adalah bagian 2 dari 5 dalam seri tutorial. Untuk menyelesaikan tutorial ini, pertama-tama selesai:

Ikuti di buku catatan

2-explore-cleanse-data.ipynb adalah notebook yang menyertai tutorial ini.

Untuk membuka buku catatan yang menyertai tutorial ini, ikuti instruksi dalam Menyiapkan sistem Anda untuk tutorial ilmu data, untuk mengimpor buku catatan ke ruang kerja Anda.

Jika Anda lebih suka menyalin dan menempelkan kode dari halaman ini, Anda bisa membuat buku catatan baru.

Pastikan untuk melampirkan lakehouse ke buku catatan sebelum Anda mulai menjalankan kode.

Penting

Pasang lakehouse yang sama dengan yang Anda gunakan di Bagian 1.

Membaca data mentah dari lakehouse

Baca data mentah dari bagian File di lakehouse. Anda mengunggah data ini di buku catatan sebelumnya. Pastikan Anda telah melampirkan lakehouse yang sama dengan yang Anda gunakan di Bagian 1 ke buku catatan ini sebelum Anda menjalankan kode ini.

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

Membuat DataFrame pandas dari himpunan data

Konversikan Spark DataFrame ke Pandas DataFrame untuk pemrosesan dan visualisasi yang lebih mudah.

df = df.toPandas()

Menampilkan data mentah

Jelajahi data mentah dengan display, lakukan beberapa statistik dasar dan tampilkan tampilan bagan. Perhatikan bahwa Anda harus terlebih dahulu mengimpor pustaka yang diperlukan seperti Numpy, , PnadasSeaborn, dan Matplotlib untuk analisis dan visualisasi data.

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)

Menggunakan Data Wrangler untuk melakukan pembersihan data awal

Untuk menjelajahi dan mengubah data panda apa pun di notebook Anda, luncurkan Data Wrangler langsung dari notebook.

Catatan

Data Wrangler tidak dapat dibuka saat kernel notebook sibuk. Eksekusi sel harus selesai sebelum meluncurkan Data Wrangler.

  1. Di bawah tab Data pita buku catatan, pilih Luncurkan Wrangler Data. Anda akan melihat daftar DataFrames panda yang diaktifkan yang tersedia untuk diedit.
  2. Pilih DataFrame yang ingin Anda buka di Data Wrangler. Karena buku catatan ini hanya berisi satu DataFrame, df, pilih df.

Cuplikan layar memperlihatkan cara meluncurkan pergelangan tangan data dari buku catatan.

Data Wrangler meluncurkan dan menghasilkan gambaran umum deskriptif data Anda. Tabel di tengah memperlihatkan setiap kolom data. Panel Ringkasan di samping tabel memperlihatkan informasi tentang DataFrame. Saat Anda memilih kolom dalam tabel, ringkasan diperbarui dengan informasi tentang kolom yang dipilih. Dalam beberapa kasus, data yang ditampilkan dan dirangkum akan menjadi tampilan terpotong dari DataFrame Anda. Saat ini terjadi, Anda akan melihat gambar peringatan di panel ringkasan. Arahkan mouse ke atas peringatan ini untuk melihat teks yang menjelaskan situasinya.

Cuplikan layar memperlihatkan gambaran umum wrangler data.

Setiap operasi yang Anda lakukan dapat diterapkan dalam hitungan klik, memperbarui tampilan data secara real time dan menghasilkan kode yang dapat Anda simpan kembali ke buku catatan Anda sebagai fungsi yang dapat digunakan kembali.

Bagian lainnya memandikan Anda melalui langkah-langkah untuk melakukan pembersihan data dengan Data Wrangler.

Jatuhkan baris duplikat

Di panel kiri adalah daftar operasi (seperti Temukan dan ganti, Format, Rumus, Numerik) yang dapat Anda lakukan pada himpunan data.

  1. Perluas Temukan dan ganti dan pilih Jatuhkan baris duplikat.

    Cuplikan layar memperlihatkan baris duplikat drop di bawah temukan dan ganti.

  2. Panel muncul bagi Anda untuk memilih daftar kolom yang ingin Anda bandingkan untuk menentukan baris duplikat. Pilih RowNumber dan CustomerId.

    Di panel tengah adalah pratinjau hasil operasi ini. Di bawah pratinjau adalah kode untuk melakukan operasi. Dalam hal ini, data tampaknya tidak berubah. Tetapi karena Anda melihat tampilan terpotong, ada baiknya untuk tetap menerapkan operasi.

    Cuplikan layar memperlihatkan menjatuhkan baris duplikat di Data Wrangler.

  3. Pilih Terapkan (baik di samping atau di bagian bawah) untuk masuk ke langkah berikutnya.

Jatuhkan baris dengan data yang hilang

Gunakan Data Wrangler untuk menghilangkan baris dengan data yang hilang di semua kolom.

  1. Pilih Hilangkan nilai yang hilang dari Temukan dan ganti.

  2. Pilih Pilih semua dari kolom Target.

    Cuplikan layar memperlihatkan menghilangkan baris yang hilang di Data Wrangler.

  3. Pilih Terapkan untuk melanjutkan ke langkah berikutnya.

Hilangkan kolom

Gunakan Data Wrangler untuk menghilangkan kolom yang tidak Anda butuhkan.

  1. Perluas Skema dan pilih Letakkan kolom.

  2. Pilih RowNumber, CustomerId, Surname. Kolom ini muncul dengan warna merah dalam pratinjau, untuk menunjukkan bahwa kolom diubah oleh kode (dalam hal ini, dihilangkan.)

    Cuplikan layar memperlihatkan menghilangkan kolom di Data Wrangler.

  3. Pilih Terapkan untuk melanjutkan ke langkah berikutnya.

Menambahkan kode ke buku catatan

Setiap kali Anda memilih Terapkan, langkah baru dibuat di panel Langkah pembersihan di kiri bawah. Di bagian bawah panel, pilih Kode pratinjau untuk semua langkah untuk melihat kombinasi semua langkah terpisah.

Pilih Tambahkan kode ke buku catatan di kiri atas untuk menutup Data Wrangler dan tambahkan kode secara otomatis. Tambahkan kode ke buku catatan membungkus kode dalam fungsi, lalu memanggil fungsi .

Cuplikan layar memperlihatkan kode pratinjau dan tempat untuk mengakses tambahkan ke buku catatan.

Tip

Kode yang dihasilkan oleh Data Wrangler tidak akan diterapkan sampai Anda menjalankan sel baru secara manual.

Jika Anda tidak menggunakan Data Wrangler, Anda dapat menggunakan sel kode berikutnya ini.

Kode ini mirip dengan kode yang dihasilkan oleh Data Wrangler, tetapi menambahkan dalam argumen inplace=True ke setiap langkah yang dihasilkan. Dengan mengatur inplace=True, panda akan menimpa DataFrame asli alih-alih menghasilkan DataFrame baru sebagai output.

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

Menjelajahi data

Tampilkan beberapa ringkasan dan visualisasi data yang dibersihkan.

Menentukan atribut kategoris, numerik, dan target

Gunakan kode ini untuk menentukan atribut kategoris, numerik, dan target.

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

Ringkasan lima angka

Tampilkan ringkasan lima angka (skor minimum, kuartil pertama, median, kuartil ketiga, skor maksimum) untuk atribut numerik, menggunakan plot kotak.

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

Grafik memperlihatkan ringkasan lima angka.

Distribusi pelanggan yang keluar dan tidak ada

Tampilkan distribusi pelanggan yang keluar versus pelanggan yang tidak ada di seluruh atribut kategoris.

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)

Grafik memperlihatkan bagan batang untuk pelanggan yang keluar dan tidak ada.

Distribusi atribut numerik

Tampilkan distribusi frekuensi atribut numerik menggunakan 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()

Grafik menunjukkan distribusi atribut numerik.

Lakukan rekayasa fitur

Lakukan rekayasa fitur untuk menghasilkan atribut baru berdasarkan atribut saat ini:

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

Menggunakan Data Wrangler untuk melakukan pengodean satu panas

Data Wrangler juga dapat digunakan untuk melakukan pengodean satu panas. Untuk melakukannya, buka kembali Data Wrangler. Kali ini, pilih df_clean data.

  1. Perluas Rumus dan pilih Pengodean satu panas.
  2. Panel muncul bagi Anda untuk memilih daftar kolom yang ingin Anda lakukan pengodean satu panas. Pilih Geografi dan Jenis Kelamin.

Anda dapat menyalin kode yang dihasilkan, menutup Data Wrangler untuk kembali ke buku catatan, lalu menempelkan ke sel baru. Atau, pilih Tambahkan kode ke buku catatan di kiri atas untuk menutup Data Wrangler dan menambahkan kode secara otomatis.

Jika Anda tidak menggunakan Data Wrangler, Anda dapat menggunakan sel kode berikutnya ini:

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

Ringkasan pengamatan dari analisis data eksploratif

  • Sebagian besar pelanggan berasal dari Prancis dibandingkan dengan Spanyol dan Jerman, sementara Spanyol memiliki tingkat churn terendah dibandingkan dengan Prancis dan Jerman.
  • Sebagian besar pelanggan memiliki kartu kredit.
  • Ada pelanggan yang usia dan skor kreditnya masing-masing di atas 60 dan di bawah 400, tetapi mereka tidak dapat dianggap sebagai outlier.
  • Sangat sedikit nasabah yang memiliki lebih dari dua produk bank.
  • Pelanggan yang tidak aktif memiliki tingkat churn yang lebih tinggi.
  • Gender dan masa jabatan tampaknya tidak berdampak pada keputusan nasabah untuk menutup rekening bank.

Membuat tabel delta untuk data yang dibersihkan

Anda akan menggunakan data ini di buku catatan berikutnya dari seri ini.

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

Langkah selanjutnya

Latih dan daftarkan model pembelajaran mesin dengan data ini: