แชร์ผ่าน


บทช่วยสอนส่วนที่ 2: สํารวจและแสดงข้อมูลด้วยภาพโดยใช้สมุดบันทึก Microsoft Fabric

ในบทช่วยสอนนี้ คุณจะได้เรียนรู้วิธีการดําเนินการวิเคราะห์ข้อมูลเชิงสํารวจ (EDA) เพื่อตรวจสอบและตรวจสอบข้อมูลในขณะที่สรุปคุณลักษณะที่สําคัญผ่านการใช้เทคนิคการแสดงผลข้อมูลด้วยภาพ

คุณจะใช้ seabornไลบรารีการแสดงภาพข้อมูล Python ที่มีอินเทอร์เฟซระดับสูงสําหรับการสร้างวิชวลบน dataframes และอาร์เรย์ สําหรับข้อมูลเพิ่มเติมเกี่ยวกับ seabornดู ที่ Seaborn: การแสดงข้อมูลทางสถิติ

นอกจากนี้คุณยังจะใช้ Data Wrangler ซึ่งเป็นเครื่องมือที่ใช้สมุดบันทึกที่มอบประสบการณ์อันดื่มด่ําในการดําเนินการวิเคราะห์ข้อมูลและการทําความสะอาดแบบสํารวจ

ขั้นตอนหลักในบทช่วยสอนนี้คือ:

  1. อ่านข้อมูลที่จัดเก็บจากตารางเดลต้าในเลคเฮาส์
  2. แปลง Spark DataFrame เป็น Pandas DataFrame ซึ่งไลบรารีการแสดงภาพข้อมูล python รองรับ
  3. ใช้ Data Wrangler เพื่อดําเนินการทําความสะอาดและแปลงข้อมูลเริ่มต้น
  4. ทําการวิเคราะห์ข้อมูลการสํารวจโดยใช้seaborn

ข้อกำหนดเบื้องต้น

นี่คือส่วนที่ 2 จาก 5 ในชุดบทช่วยสอน เมื่อต้องการทําบทช่วยสอนนี้ให้เสร็จสมบูรณ์ ก่อนอื่นให้ทําให้เสร็จสมบูรณ์:

ติดตามพร้อมกับในสมุดบันทึก

2-explore-cleanse-data.ipynb คือสมุดบันทึกที่มาพร้อมกับบทช่วยสอนนี้

เมื่อต้องการเปิดสมุดบันทึกที่มาพร้อมกับบทช่วยสอนนี้ ให้ทําตามคําแนะนําใน เตรียมระบบของคุณสําหรับบทช่วยสอนวิทยาศาสตร์ข้อมูล เพื่อนําเข้าสมุดบันทึกไปยังพื้นที่ทํางานของคุณ

ถ้าคุณต้องการคัดลอกและวางรหัสจากหน้านี้แทน คุณสามารถสร้าง สมุดบันทึกใหม่ได้

ตรวจสอบให้แน่ใจว่าแนบ lakehouse เข้ากับสมุดบันทึก ก่อนที่คุณจะเริ่มเรียกใช้รหัส

สำคัญ

แนบเลคเฮ้าส์เดียวกับที่คุณใช้ในตอนที่ 1

อ่านข้อมูลดิบจากเลคเฮ้าส์

อ่านข้อมูลดิบจากส่วน ไฟล์ ของเลคเฮ้าส์ คุณได้อัปโหลดข้อมูลนี้ในสมุดบันทึกก่อนหน้าแล้ว ตรวจสอบให้แน่ใจว่าคุณได้แนบ lakehouse เดียวกันกับที่คุณใช้ในตอนที่ 1 กับสมุดบันทึกนี้ก่อนที่คุณจะเรียกใช้โค้ดนี้

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

สร้าง DataFrame ของ pandas จากชุดข้อมูล

แปลง Spark DataFrame เป็น pandas DataFrame เพื่อให้ง่ายต่อการประมวลผลและแสดงภาพ

df = df.toPandas()

แสดงข้อมูลดิบ

สํารวจข้อมูลดิบด้วย displayทําสถิติพื้นฐานบางอย่างและแสดงมุมมองแผนภูมิ โปรดทราบว่าก่อนอื่นคุณต้องนําเข้าไลบรารีที่จําเป็นเช่น Numpy, PnadasSeaborn, และ Matplotlib สําหรับการวิเคราะห์ข้อมูลและการแสดงภาพ

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)

ใช้ Data Wrangler เพื่อดําเนินการทําความสะอาดข้อมูลเริ่มต้น

ในการสํารวจและแปลงดาต้าเฟรมของ pandas ในสมุดบันทึกของคุณ ให้เปิดใช้ Data Wrangler โดยตรงจากสมุดบันทึก

หมายเหตุ

ไม่สามารถเปิด Data Wrangler ได้ในขณะที่เคอร์เนลสมุดบันทึกไม่ว่าง การดําเนินการเซลล์จะต้องเสร็จสมบูรณ์ก่อนที่จะเปิดใช้งาน Data Wrangler

  1. ภายใต้แถบเครื่องมือริบบอนสมุดบันทึก แท็บข้อมูล เลือก เปิดใช้ข้อมูล Wrangler คุณจะเห็นรายการของดาต้าเฟรมของ pandas ที่เปิดใช้งานซึ่งพร้อมสําหรับการแก้ไข
  2. เลือก DataFrame ที่คุณต้องการเปิดใน Data Wrangler เนื่องจากสมุดบันทึกนี้มี DataFrame เดียวเท่านั้น ให้เลือก dfdf

สกรีนช็อตแสดงวิธีการเปิดใช้งาน wrangler ข้อมูลจากสมุดบันทึก

ข้อมูล Wrangler เปิดใช้งานและสร้างภาพรวมเชิงพรรณาของข้อมูลของคุณ ตารางตรงกลางแสดงแต่ละคอลัมน์ข้อมูล แผง สรุป ที่อยู่ถัดจากตารางแสดงข้อมูลเกี่ยวกับ DataFrame เมื่อคุณเลือกคอลัมน์ในตาราง สรุปจะอัปเดตพร้อมข้อมูลเกี่ยวกับคอลัมน์ที่เลือก ในบางอินสแตนซ์ ข้อมูลที่แสดงและสรุปจะเป็นมุมมองที่ตัดทอนของ DataFrame ของคุณ เมื่อเกิดสิ่งนี้ขึ้น คุณจะเห็นรูปคําเตือนในบานหน้าต่างสรุป วางเมาส์เหนือคําเตือนนี้เพื่อดูข้อความอธิบายสถานการณ์

สกรีนช็อตแสดงภาพรวม wrangler ข้อมูล

การดําเนินการแต่ละรายการที่คุณสามารถทําได้ในเรื่องของการคลิก อัปเดตการแสดงผลข้อมูลในแบบเรียลไทม์ และสร้างโค้ดที่คุณสามารถบันทึกลงในสมุดบันทึกของคุณเป็นฟังก์ชันที่นํากลับมาใช้ใหม่ได้

ส่วนที่เหลือของส่วนนี้แนะนําขั้นตอนในการทําความสะอาดข้อมูลด้วย Data Wrangler

ทิ้งแถวที่ซ้ํากัน

บนแผงด้านซ้ายคือรายการของการดําเนินการ (เช่น ค้นหาและแทนที่, รูปแบบ, สูตร, ตัวเลข) ที่คุณสามารถทําได้บนชุดข้อมูล

  1. ขยาย ค้นหาและแทนที่ และเลือก วางแถวที่ซ้ํากัน

    สกรีนช็อตแสดงการวางแถวที่ซ้ํากันภายใต้การค้นหาและแทนที่

  2. แผงจะปรากฏขึ้นเพื่อให้คุณเลือกรายการของคอลัมน์ที่คุณต้องการเปรียบเทียบเพื่อกําหนดแถวที่ซ้ํากัน เลือก RowNumber และ CustomerId

    ในแผงตรงกลางคือตัวอย่างของผลลัพธ์ของการดําเนินการนี้ ภายใต้ตัวอย่างเป็นรหัสที่จะดําเนินการ ในอินสแตนซ์นี้ ข้อมูลดูเหมือนจะไม่เปลี่ยนแปลง แต่เนื่องจากคุณกําลังดูมุมมองที่ถูกตัดทอน คุณควรใช้การดําเนินการนี้ต่อไป

    สกรีนช็อตแสดงการวางแถวที่ซ้ํากันใน Data Wrangler

  3. เลือก นําไปใช้ (ที่ด้านข้างหรือที่ด้านล่าง) เพื่อไปยังขั้นตอนถัดไป

ทิ้งแถวที่มีข้อมูลที่ขาดหายไป

ใช้ Data Wrangler เพื่อปล่อยแถวที่มีข้อมูลที่ขาดหายไปในทุกคอลัมน์

  1. เลือกปล่อยค่าที่หายไปจากค้นหาและแทนที่

  2. เลือก เลือกทั้งหมด จาก คอลัมน์เป้าหมาย

    สกรีนช็อตแสดงการวางแถวที่หายไปใน Data Wrangler

  3. เลือก นําไปใช้ เพื่อไปยังขั้นตอนถัดไป

ปล่อยคอลัมน์

ใช้ Data Wrangler เพื่อวางคอลัมน์ที่คุณไม่ต้องการ

  1. ขยาย Schema และเลือกวางคอลัมน์

  2. เลือก RowNumber, CustomerId, Surname คอลัมน์เหล่านี้จะปรากฏเป็นสีแดงในการแสดงตัวอย่าง เพื่อแสดงว่ามีการเปลี่ยนแปลงโดยโค้ด (ในกรณีนี้จะลดลง)

    สกรีนช็อตแสดงการวางคอลัมน์ใน Data Wrangler

  3. เลือก นําไปใช้ เพื่อไปยังขั้นตอนถัดไป

เพิ่มรหัสลงในสมุดบันทึก

แต่ละครั้งที่คุณเลือกนําไปใช้ขั้นตอนใหม่จะถูกสร้างขึ้นในแผงขั้นตอนการทําความสะอาดที่ด้านล่างซ้าย ที่ด้านล่างของแผง ให้เลือก รหัสตัวอย่างสําหรับขั้นตอน ทั้งหมดเพื่อดูชุดของขั้นตอนที่แยกต่างหากทั้งหมด

เลือก เพิ่มรหัสลงในสมุดบันทึก ที่ด้านบนซ้ายเพื่อปิด Data Wrangler และเพิ่มรหัสโดยอัตโนมัติ เพิ่ม รหัสลงในสมุดบันทึก จะตัดรหัสในฟังก์ชัน แล้วเรียกใช้ฟังก์ชัน

สกรีนช็อตแสดงรหัสตัวอย่างและตําแหน่งที่จะเข้าถึงเพิ่มไปยังสมุดบันทึก

เคล็ดลับ

โค้ดที่สร้างขึ้นโดย Data Wrangler จะไม่ถูกนําไปใช้จนกว่าคุณจะเรียกใช้เซลล์ใหม่ด้วยตนเอง

ถ้าคุณไม่ได้ใช้ Data Wrangler คุณสามารถใช้เซลล์โค้ดถัดไปนี้ได้แทน

รหัสนี้คล้ายกับรหัสที่สร้างโดย Data Wrangler แต่เพิ่มในอาร์กิวเมนต์ inplace=True ไปยังแต่ละขั้นตอนที่สร้างขึ้น โดยการตั้งค่า inplace=Truepandas จะเขียนทับ DataFrame ต้นฉบับแทนที่จะสร้าง DataFrame ใหม่เป็นเอาต์พุต

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

สํารวจข้อมูล

แสดงข้อมูลสรุปและการแสดงภาพของข้อมูลที่ได้รับการทําความสะอาดแล้ว

กําหนดแอตทริบิวต์จัดกลุ่ม ตัวเลข และเป้าหมาย

ใช้รหัสนี้เพื่อกําหนดแอตทริบิวต์จัดกลุ่ม ตัวเลข และเป้าหมาย

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

ข้อมูลสรุปห้าตัวเลข

แสดงข้อมูลสรุปแบบห้าตัวเลข (คะแนนต่ําสุด คะแนนแรก ควอร์ไทล์ ค่ามัธยฐาน ควอร์ไทล์ที่สาม คะแนนสูงสุด) สําหรับแอตทริบิวต์ตัวเลข โดยใช้แผนภูมิกล่อง

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

กราฟจะแสดงข้อมูลสรุปแบบห้าตัวเลข

การกระจายของลูกค้าที่ออกจากงานและไม่มี

แสดงการกระจายของลูกค้าที่ออกจากระบบเทียบกับลูกค้าที่ไม่ได้รับการรับรองทั่วทั้งแอตทริบิวต์ประเภท

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)

Graph จะแสดงแผนภูมิแท่งสําหรับลูกค้าที่ออกจากงานและลูกค้าที่ไม่ได้รับการรับรอง

การกระจายของแอตทริบิวต์ตัวเลข

แสดงการกระจายความถี่ของแอตทริบิวต์ตัวเลขโดยใช้ฮิสโทแกรม

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

กราฟแสดงการกระจายของแอตทริบิวต์ตัวเลข

ดําเนินการวิศวกรรมคุณลักษณะ

ดําเนินการวิศวกรรมคุณลักษณะเพื่อสร้างแอตทริบิวต์ใหม่ตามแอตทริบิวต์ปัจจุบัน:

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

ใช้ Data Wrangler เพื่อดําเนินการเข้ารหัสอย่างหนึ่งร้อน

Data Wrangler ยังสามารถใช้เพื่อดําเนินการเข้ารหัสแบบหนึ่งร้อนได้ เมื่อต้องการทําเช่นนั้น ให้เปิด Data Wrangler อีกครั้ง ในครั้งนี้ ให้เลือก df_clean ข้อมูล

  1. ขยายสูตรและเลือกการเข้ารหัสที่ร้อนแรงหนึ่งรหัส
  2. แผงจะปรากฏขึ้นเพื่อให้คุณเลือกรายการคอลัมน์ที่คุณต้องการทําการเข้ารหัสแบบฮอตหนึ่งครั้ง เลือกภูมิศาสตร์และเพศ

คุณสามารถคัดลอกโค้ดที่สร้างขึ้น ปิด Data Wrangler เพื่อกลับไปยังสมุดบันทึกจากนั้นวางลงในเซลล์ใหม่ได้ หรือเลือก เพิ่มรหัสลงในสมุดบันทึก ที่ด้านบนซ้ายเพื่อปิด Data Wrangler และเพิ่มรหัสโดยอัตโนมัติ

ถ้าคุณไม่ได้ใช้ Data Wrangler คุณสามารถใช้เซลล์โค้ดถัดไปแทนได้:

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

ข้อมูลสรุปของการสังเกตการณ์จากการวิเคราะห์ข้อมูลการสํารวจ

  • ลูกค้าส่วนใหญ่มาจากฝรั่งเศสเปรียบเทียบกับสเปนและเยอรมนี ในขณะที่ประเทศสเปนมีอัตราการเลิกใช้บริการต่ําที่สุดเมื่อเทียบกับประเทศฝรั่งเศสและเยอรมนี
  • ลูกค้าส่วนใหญ่มีบัตรเครดิต
  • มีลูกค้าที่มีอายุและคะแนนเครดิตมากกว่า 60 ปีขึ้นไปต่ํากว่า 400 ตามลําดับ แต่ไม่ถือว่าเป็นค่าผิดปกติ
  • ลูกค้าน้อยมากมีผลิตภัณฑ์ของธนาคารมากกว่าสองรายการ
  • ลูกค้าที่ไม่ได้ใช้งานมีอัตราการเลิกใช้บริการที่สูงกว่า
  • ดูเหมือนว่าเพศและระยะเวลาการครอบครองจะไม่มีผลกระทบต่อการตัดสินใจของลูกค้าในการปิดบัญชีธนาคาร

สร้างตารางส่วนที่แตกต่างสําหรับข้อมูลที่ทําความสะอาดแล้ว

คุณจะใช้ข้อมูลนี้ในสมุดบันทึกถัดไปของชุดข้อมูลนี้

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

ขั้นตอนถัดไป

ฝึกและลงทะเบียนแบบจําลองการเรียนรู้ของเครื่องด้วยข้อมูลนี้:

ส่วนที่ 3: ฝึกและลงทะเบียนแบบจําลองการเรียนรู้ของเครื่อง