0Pricing
Learn AI with Python · บทเรียน

เวิร์กโฟลว์ EDA และการทำโปรไฟล์ข้อมูล

df.info(), df.describe(), การตรวจสอบค่าที่หายไป การตรวจชนิดข้อมูล และการวิเคราะห์จำนวนค่าที่แตกต่าง

เวิร์กโฟลว์ EDA และการทำโปรไฟล์ข้อมูล เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน

การวิเคราะห์ข้อมูลเชิงสำรวจคืออะไร

การวิเคราะห์ข้อมูลเชิงสำรวจ (EDA) คือสิ่งแรกที่ควรทำกับชุดข้อมูลใด ๆ ก่อนสร้างแบบจำลอง จุดประสงค์คือเพื่อทำความเข้าใจโครงสร้าง ค้นหาปัญหา และสร้างความเข้าใจเบื้องต้นเกี่ยวกับข้อมูล

การวิเคราะห์ EDA อย่างเป็นระบบด้วย รายการตรวจสอบเบื้องต้น จะช่วยตอบคำถามว่า ชุดข้อมูลมีขนาดเท่าใด คอลัมน์มีชนิดข้อมูลอะไรบ้าง มีค่าที่หายไปอยู่ที่ใด มีข้อมูลซ้ำหรือไม่ และค่าต่าง ๆ มีการกระจายอย่างไร

  • ค้นหาปัญหาคุณภาพข้อมูลได้ตั้งแต่เนิ่น ๆ
  • ตัดสินใจว่าคุณลักษณะใดต้องทำความสะอาด
  • ตั้งสมมติฐานเพื่อทดสอบในภายหลัง

การโหลดข้อมูล

ทุกอย่างเริ่มต้นด้วยการโหลด DataFrame และตรวจดูข้อมูลอย่างรวดเร็วด้วย head() และ shape

shape จะคืนค่าทูเพิล (rows, columns) ทำให้ทราบขนาดของข้อมูลที่กำลังทำงานอยู่ได้ทันที

import pandas as pd

df = pd.read_csv("customers.csv")
print(df.shape)        # (10000, 8)
print(df.head())       # first 5 rows

df.info() — ชนิดข้อมูลและจำนวนค่าที่ไม่เป็นค่าว่าง

df.info() เป็นคำสั่งแรกที่มีประโยชน์ที่สุด โดยจะแสดงชื่อคอลัมน์แต่ละคอลัมน์ ชนิดข้อมูล และ จำนวนค่าที่ไม่เป็นค่าว่าง

หากคอลัมน์เชิงตัวเลขแสดงเป็น object แสดงว่ามีบางอย่างผิดปกติ เช่น มีข้อความหลงเหลือ เครื่องหมายจุลภาค หรือสัญลักษณ์สกุลเงิน หากจำนวนค่าที่ไม่เป็นค่าว่างแตกต่างกันระหว่างคอลัมน์ แสดงว่ามีข้อมูลที่หายไป

df.info()
# <class pandas.DataFrame>
# RangeIndex: 10000 entries
# age      9800 non-null  float64
# city     10000 non-null object
# income   9500 non-null  float64

df.describe() — สรุปข้อมูลเชิงตัวเลข

df.describe() จะแสดงจำนวน ค่าเฉลี่ย ส่วนเบี่ยงเบนมาตรฐาน ค่าต่ำสุด ควอร์ไทล์ (25/50/75%) และค่าสูงสุดของคอลัมน์เชิงตัวเลขแต่ละคอลัมน์

ตรวจดูสัญญาณเตือน เช่น ค่า min เป็น -1 ในคอลัมน์อายุ ค่า max สูงกว่าควอร์ไทล์ที่ 75 อย่างมาก ซึ่งอาจเป็นค่าผิดปกติ หรือค่าเฉลี่ยอยู่ห่างจากค่ามัธยฐานมาก ซึ่งบ่งบอกถึงความเบ้

print(df.describe())
# Use include="all" to also summarize categorical columns
print(df.describe(include="all"))

df.isnull().sum() — การนับค่าที่หายไป

การเชื่อม isnull() เข้ากับ sum() จะนับค่าที่หายไป ในแต่ละคอลัมน์ หากเพิ่ม .sum() อีกหนึ่งครั้ง จะได้ผลรวมทั้งหมด

แปลงค่าเป็นเปอร์เซ็นต์เพื่อประเมินความรุนแรง คอลัมน์ที่มีค่าว่าง 60% อาจควรตัดทิ้ง ขณะที่ค่าว่าง 2% สามารถเติมค่าแทนได้ง่าย

print(df.isnull().sum())

missing_pct = df.isnull().sum() / len(df) * 100
print(missing_pct.sort_values(ascending=False))

df.duplicated().sum() — การค้นหาแถวซ้ำ

df.duplicated() จะคืนค่า Series แบบบูลีนที่ระบุแถวซึ่งเป็นสำเนาที่ตรงกันทุกประการของแถวก่อนหน้า การรวมค่าดังกล่าวจะทำให้ทราบว่ามีข้อมูลซ้ำกี่รายการ

คุณสามารถจำกัดขอบเขตการค้นหาข้อมูลซ้ำให้เหลือเฉพาะคอลัมน์สำคัญด้วย subset ซึ่งมีประโยชน์เมื่อ id ควรมีค่าไม่ซ้ำกัน

print(df.duplicated().sum())            # exact duplicate rows
print(df.duplicated(subset=["id"]).sum()) # duplicate ids

df = df.drop_duplicates()

value_counts() — ความถี่ของหมวดหมู่

value_counts() จะนับว่าค่าแต่ละค่าที่ไม่ซ้ำกันปรากฏในคอลัมน์บ่อยเพียงใด จึงเป็นเครื่องมือหลักสำหรับตรวจสอบข้อมูลเชิงหมวดหมู่

ใช้ normalize=True เพื่อดูสัดส่วนแทนจำนวนดิบ และใช้ dropna=False เพื่อรวมค่าที่หายไปในการนับ

print(df["city"].value_counts())
print(df["city"].value_counts(normalize=True))
print(df["city"].value_counts(dropna=False))

การตรวจสอบจำนวนค่าที่แตกต่างกัน

จำนวนค่าที่แตกต่างกัน คือจำนวนค่าที่ไม่ซ้ำกันในคอลัมน์ ซึ่งหาได้ด้วย nunique()

  • จำนวนค่าที่แตกต่างกันต่ำ (มีหมวดหมู่เพียงไม่กี่หมวด) → เหมาะสำหรับการเข้ารหัสแบบเลือกค่าเดียว
  • จำนวนค่าที่แตกต่างกันสูง (มีข้อความที่ไม่ซ้ำกันหลายพันค่า เช่น รหัสผู้ใช้) → โดยทั่วไปไม่ใช่คุณลักษณะที่มีประโยชน์หากนำไปใช้โดยตรง
for col in df.select_dtypes("object").columns:
    print(col, "->", df[col].nunique(), "unique")

การค้นหาคอลัมน์ค่าคงที่และคอลัมน์ลักษณะคล้ายรหัส

ระหว่างการทำโปรไฟล์ข้อมูล ควรตรวจสอบค่าปลายสุดสองประเภทต่อไปนี้:

  • คอลัมน์ค่าคงที่ (nunique() == 1) ไม่มีข้อมูลที่เป็นประโยชน์ — ควรตัดทิ้ง
  • คอลัมน์ลักษณะคล้ายรหัส (nunique() == len(df)) มีค่าไม่ซ้ำกันในแต่ละแถว และโดยทั่วไปไม่ให้ข้อมูลที่เป็นประโยชน์แก่แบบจำลองส่วนใหญ่
n = len(df)
for col in df.columns:
    u = df[col].nunique()
    if u == 1:
        print(col, "is constant")
    elif u == n:
        print(col, "is ID-like")

ชนิดข้อมูลและการใช้หน่วยความจำ

ตรวจสอบ df.dtypes เพื่อยืนยันว่าคอลัมน์ถูกจัดเก็บอย่างถูกต้อง และใช้ df.memory_usage(deep=True) เพื่อค้นหาคอลัมน์ที่ใช้หน่วยความจำมาก

การลดขนาดชนิดข้อมูลตัวเลขและการแปลงข้อความที่มีจำนวนค่าต่างกันน้อยเป็น category สามารถลดการใช้หน่วยความจำของชุดข้อมูลขนาดใหญ่ได้อย่างมาก

print(df.dtypes)
print(df.memory_usage(deep=True))

df["city"] = df["city"].astype("category")

ตัวอย่างโค้ดสำหรับสร้างข้อมูลสรุปที่นำกลับมาใช้ได้

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

เรียกใช้ทันทีที่โหลด DataFrame ใด ๆ เพื่อค้นหาขนาด ชนิดข้อมูล ค่าที่หายไป ข้อมูลซ้ำ และจำนวนค่าที่แตกต่างกันได้ทันที

def profile(df):
    print("Shape:", df.shape)
    print(df.info())
    print("Missing:\n", df.isnull().sum())
    print("Dupes:", df.duplicated().sum())
    for c in df.select_dtypes("object"):
        print(c, df[c].nunique(), "unique")

profile(df)

ตรวจสอบอย่างรวดเร็ว: ค่าที่หายไป

คุณต้องการทราบ เปอร์เซ็นต์ ของค่าที่หายไปในแต่ละคอลัมน์

สรุป: รายการตรวจสอบ EDA เบื้องต้น

ขณะนี้คุณมีขั้นตอนเริ่มต้นที่ทำซ้ำได้สำหรับชุดข้อมูลใด ๆ แล้ว:

  • shape และ head() สำหรับดูขนาดและตัวอย่างข้อมูล
  • info() สำหรับดูชนิดข้อมูลและจำนวนค่าที่ไม่เป็นค่าว่าง
  • describe() สำหรับดูสรุปข้อมูลเชิงตัวเลขและสัญญาณของค่าผิดปกติ
  • isnull().sum() สำหรับตรวจสอบค่าที่หายไป
  • duplicated().sum() สำหรับตรวจสอบแถวซ้ำ
  • value_counts() และ nunique() สำหรับดูความถี่ของหมวดหมู่และจำนวนค่าที่แตกต่างกัน

ถัดไป เราจะเจาะลึกคอลัมน์แต่ละคอลัมน์ด้วยการวิเคราะห์ตัวแปรเดียว

คำถามที่พบบ่อย

บทเรียน “เวิร์กโฟลว์ EDA และการทำโปรไฟล์ข้อมูล” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “เวิร์กโฟลว์ EDA และการทำโปรไฟล์ข้อมูล” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “เวิร์กโฟลว์ EDA และการทำโปรไฟล์ข้อมูล”

df.info(), df.describe(), การตรวจสอบค่าที่หายไป การตรวจชนิดข้อมูล และการวิเคราะห์จำนวนค่าที่แตกต่าง คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “เวิร์กโฟลว์ EDA และการทำโปรไฟล์ข้อมูล” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม

ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เวิร์กโฟลว์ EDA และการทำโปรไฟล์ข้อมูล
  2. การวิเคราะห์ตัวแปรเดียว
  3. การวิเคราะห์สองตัวแปรและหลายตัวแปร
  4. การแจกแจงคุณลักษณะและการวิเคราะห์เป้าหมาย
← กลับไปที่ Learn AI with Python