Pandas & NumPy Academy · บทเรียน

รายการตรวจสอบการสำรวจชุดข้อมูล

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

บทเรียน 1 จาก 413 ขั้นตอน

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

ห้านาทีแรกเมื่อพบชุดข้อมูล

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

import pandas as pd

# Simulate loading a new dataset
df = pd.read_csv('https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv')

# Step 1: size
print('Shape:', df.shape)
print('Rows:', len(df))

ขั้นตอนที่ 1: รูปร่าง คอลัมน์ และ dtypes

การตรวจสอบสามอย่างแรกคือ รูปร่าง (แถว × คอลัมน์), ชื่อคอลัมน์ (ตรงตามที่คาดไว้หรือไม่) และ dtypes (คอลัมน์ตัวเลขเป็นตัวเลขจริงหรือไม่) สิ่งที่มักทำให้ประหลาดใจคือคอลัมน์ตัวเลขถูกโหลดเป็นชนิดข้อมูล object เพราะมีข้อความอย่าง 'unknown' หรือตัวเลขที่มีจุลภาคปะปนกัน การตรวจพบปัญหานี้ในขั้นตอนจัดทำประวัติเบื้องต้นช่วยป้องกันการรวมค่าที่คืนผลลัพธ์ผิดโดยไม่แจ้งเตือน

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

print('Shape:', df.shape)
print('\nColumns:', df.columns.tolist())
print('\nData Types:')
print(df.dtypes)

ขั้นตอนที่ 2: ตรวจสอบค่าที่หายไป

เรียกใช้ df.isna().sum() เพื่อนับค่าที่หายไปในแต่ละคอลัมน์ จากนั้นหารด้วย len(df) เพื่อหาคิดเป็นเปอร์เซ็นต์ คอลัมน์ที่มีค่าหายไปมากกว่า 50% มักควรพิจารณาลบออก ส่วนค่าหายไป 1-20% โดยทั่วไปควรแทนค่าทดแทน และคอลัมน์ที่ไม่มีค่าหายไปเลย 0% ก็ควรตรวจสอบความสมเหตุสมผล เพราะความครบถ้วนสมบูรณ์อาจน่าสงสัยได้ หากข้อมูลจริงแทบไม่เคยสะอาดหมดจดเช่นนั้น เรียงผลลัพธ์จากมากไปน้อยเพื่อดูคอลัมน์ที่ได้รับผลกระทบมากที่สุดก่อน

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

# Missing value audit
missing = df.isna().sum()
missing_pct = (missing / len(df) * 100).round(1)
audit = pd.DataFrame({'count': missing, 'pct': missing_pct})
audit = audit[audit['count'] > 0].sort_values('pct', ascending=False)
print(audit)

ขั้นตอนที่ 3: สถิติเชิงพรรณนาพื้นฐาน

df.describe() ส่งกลับ count, mean, std, min, ควอไทล์ และ max สำหรับทุกคอลัมน์ตัวเลขด้วยการเรียกใช้เพียงครั้งเดียว ควรตรวจดู min และ max เสมอเพื่อหาค่าที่เป็นไปไม่ได้ (เช่น age = -3 หรือ age = 999), ตรวจดู mean เทียบกับมัธยฐาน เพื่อประเมินการเบ้ (ช่องว่างขนาดใหญ่บ่งชี้ว่ามีค่าผิดปกติ) และตรวจดู count (หากน้อยกว่าจำนวนแถวทั้งหมด แสดงว่ามีค่าว่าง) เพิ่ม include='all' เพื่อรวมสถิติของคอลัมน์ชนิด object ด้วย (จำนวนค่าที่ไม่ซ้ำกัน ค่าอันดับแรก และความถี่)

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

# Describe numeric columns
print('Numeric statistics:')
print(df.describe().round(2))

print('\nObject column statistics:')
print(df.describe(include='object'))

ขั้นตอนที่ 4: การนับค่าที่ไม่ซ้ำกัน

สำหรับคอลัมน์ประเภทหมวดหมู่ ให้ตรวจสอบจำนวนค่าที่ไม่ซ้ำกันด้วย df[col].nunique() และตรวจดูค่าที่พบบ่อยที่สุดด้วย value_counts() ระวังคอลัมน์ที่ดูเหมือนเป็นประเภทหมวดหมู่แต่มีค่าที่ไม่ซ้ำกันหลายร้อยค่า (อาจเป็นช่องข้อความอิสระหรือ ID) รวมถึงคอลัมน์ที่ควรเป็นค่าบูลีนแต่มีสามค่า (True, False และ NaN) ตรวจสอบการใช้ตัวพิมพ์ใหญ่เล็กที่ไม่สอดคล้องกันด้วย เช่น 'Male' และ 'male' จะถูกจัดเป็นคนละหมวดหมู่

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

categorical = df.select_dtypes(include='object').columns
for col in categorical:
    n = df[col].nunique()
    top_vals = df[col].value_counts().head(3).to_dict()
    print(f'{col}: {n} unique — top3: {top_vals}')

ขั้นตอนที่ 5: สุ่มตรวจแถวด้วย head และ tail

df.head(10) และ df.tail(10) แสดงแถวแรกและแถวสุดท้ายตามลำดับ การตรวจดูทั้งสองส่วนสำคัญ เพราะชุดข้อมูลมักมีแถวส่วนหัวที่สะอาด แต่มีแถวท้ายที่ยุ่งเหยิงจากข้อผิดพลาดในการส่งออก (เช่น มีแถวสรุป 'Total' ต่อท้ายการส่งออก CSV) นอกจากนี้ใช้ df.sample(10) เพื่อดูแถวที่สุ่มเลือก ซึ่งช่วยหลีกเลี่ยงอคติที่เอนเอียงไปทางต้นชุดข้อมูล

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

print('First 3 rows:')
print(df.head(3))

print('\nLast 3 rows:')
print(df.tail(3))

print('\nRandom sample of 3:')
print(df.sample(3, random_state=42))

ขั้นตอนที่ 6: ตรวจหารายการซ้ำ

เรียกใช้ df.duplicated().sum() เพื่อนับแถวที่ซ้ำกันทุกประการ (ทุกคอลัมน์ตรงกัน) ชุดข้อมูลที่อ้างว่ามีระเบียนลูกค้าไม่ซ้ำกัน หากมีรายการซ้ำแม้เพียงรายการเดียวก็เป็นสัญญาณเตือนด้านคุณภาพข้อมูล ใช้ df[df.duplicated(keep=False)] เพื่อตรวจดูแถวที่ซ้ำจริง เมื่อ ตารางควรมีคีย์ที่ไม่ซ้ำกัน (เช่น ID ผู้ใช้) ให้ตรวจสอบความไม่ซ้ำกันในระดับคีย์ด้วย df['id'].duplicated().sum()

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

# Full-row duplicates
full_dups = df.duplicated().sum()
print(f'Fully duplicated rows: {full_dups}')

# Key-level duplicates (e.g. passenger class + name)
key_dups = df.duplicated(subset=['pclass', 'sex', 'age', 'fare']).sum()
print(f'Near-duplicate rows (pclass+sex+age+fare): {key_dups}')

ขั้นตอนที่ 7: คอลัมน์วันที่และเวลา

หากชุดข้อมูลมีคอลัมน์วันที่หรือเวลา ให้ตรวจสอบว่า Pandas โหลดเป็น datetime64 (ไม่ใช่ object) แปลงด้วย pd.to_datetime(df['col']) จากนั้นตรวจดูช่วงวันที่ด้วย df['date'].min() และ df['date'].max() มองหาวันเวลาที่อยู่ไกลในอนาคต (ปี 2099) หรือในอดีต (ยุคศูนย์: 1970-01-01) ซึ่งบ่งชี้ว่าเป็นค่าตัวแทนที่ใช้แทนวันที่หายไป

import pandas as pd

# Synthetic example with a date column
df = pd.DataFrame({
    'order_id': [1, 2, 3, 4],
    'order_date': ['2024-01-10', '2024-02-05', '1970-01-01', '2024-12-31']
})

df['order_date'] = pd.to_datetime(df['order_date'])

print('Date range:', df['order_date'].min(), 'to', df['order_date'].max())
print('\nSuspect dates (before 2020):')
print(df[df['order_date'] < '2020-01-01'])

การทำรายการตรวจสอบให้เป็นฟังก์ชันโดยอัตโนมัติ

การรวมขั้นตอนจัดทำประวัติเบื้องต้นไว้ในฟังก์ชันที่นำกลับมาใช้ใหม่ได้ ช่วยให้การตรวจสอบแบบเดียวกันทำงานอย่างสม่ำเสมอกับทุกชุดข้อมูล ฟังก์ชันควรพิมพ์รายงานที่มีโครงสร้าง ซึ่งแสดงรูปร่าง ค่าที่หายไป dtypes จำนวนรายการซ้ำ และสถิติพื้นฐาน คุณสามารถขยายฟังก์ชันด้วยการแสดงภาพ หรือบันทึกเป็นรายงาน HTML ได้ ฟังก์ชันลักษณะนี้เป็นเครื่องมือพื้นฐานของทีมวิทยาศาสตร์ข้อมูลระดับมืออาชีพ ซึ่งมีนักวิเคราะห์หลายคนทำงานกับ pipeline เดียวกัน

import pandas as pd

def profile(df, name='DataFrame'):
    print(f'=== Profile: {name} ===')
    print(f'Shape: {df.shape[0]} rows x {df.shape[1]} cols')
    print(f'Duplicates: {df.duplicated().sum()}')
    print(f'\nMissing values (top 5):')
    missing = (df.isna().sum() / len(df) * 100).sort_values(ascending=False)
    print(missing[missing > 0].head(5).round(1).to_string())
    print(f'\ndtypes:')
    print(df.dtypes.value_counts().to_string())
    print('=' * 35)

import seaborn as sns
df = sns.load_dataset('titanic')
profile(df, 'Titanic')

ydata-profiling สำหรับ EDA อัตโนมัติ

ไลบรารี ydata-profiling (เดิมชื่อ pandas-profiling) จะสร้างรายงาน HTML ที่ครอบคลุมจาก DataFrame ได้ด้วยโค้ดเพียงบรรทัดเดียว: ProfileReport(df).to_file('report.html') รายงานนี้ประกอบด้วยฮิสโตแกรม เมทริกซ์สหสัมพันธ์ ฮีตแมปค่าที่หายไป การตรวจหารายการซ้ำ และกราฟปฏิสัมพันธ์ วิธีนี้เป็นวิธีที่รวดเร็วที่สุดในการแชร์โพรไฟล์ชุดข้อมูลฉบับเต็มให้ผู้มีส่วนเกี่ยวข้องที่ต้องทำความเข้าใจข้อมูลโดยไม่ต้องเขียนโค้ด

# Install: pip install ydata-profiling
# from ydata_profiling import ProfileReport
# import pandas as pd
# import seaborn as sns

# df = sns.load_dataset('titanic')
# profile = ProfileReport(df, title='Titanic Profiling Report', explorative=True)
# profile.to_file('titanic_profile.html')

# The above generates a full HTML report automatically.
# Alternatively, use minimal mode for faster generation:
# profile = ProfileReport(df, minimal=True)
print('ydata-profiling generates HTML EDA reports automatically.')
print('Run: pip install ydata-profiling')

สรุปเช็กลิสต์การทำโพรไฟล์

เช็กลิสต์การทำโพรไฟล์ฉบับสมบูรณ์สำหรับชุดข้อมูลใหม่ทุกชุดมี 7 ขั้นตอน ได้แก่ 1) รูปร่างและคอลัมน์ 2) ชนิดข้อมูลและการกำหนดชนิดที่น่าสงสัย 3) จำนวนและเปอร์เซ็นต์ค่าที่หายไปในแต่ละคอลัมน์ 4) สถิติเชิงพรรณนา (ค่าต่ำสุด ค่าสูงสุด mean median) 5) ค่าที่ไม่ซ้ำและจำนวนครั้งที่พบค่าสำหรับคอลัมน์ประเภทหมวดหมู่ 6) การตรวจหาแถวซ้ำ และ 7) การตรวจสอบช่วงวันที่ การทำเช็กลิสต์นี้ให้เสร็จก่อนเริ่มการวิเคราะห์ใด ๆ จะช่วยป้องกันข้อผิดพลาดที่เกิดขึ้นโดยไม่แจ้งเตือนและทำให้ผลลัพธ์ในขั้นตอนถัดไปคลาดเคลื่อน

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจของคุณเกี่ยวกับเช็กลิสต์การทำโพรไฟล์ชุดข้อมูลจากบทเรียนนี้

ทบทวนบทเรียน

ในบทเรียนนี้ คุณได้เรียนรู้เกี่ยวกับ เช็กลิสต์การทำโพรไฟล์ 7 ขั้นตอน (รูปร่าง ชนิดข้อมูล ค่าที่หายไป สถิติ จำนวนค่าที่ไม่ซ้ำ รายการซ้ำ และวันที่) การรวมการตรวจสอบต่าง ๆ ไว้ใน ฟังก์ชันโพรไฟล์ที่นำกลับมาใช้ซ้ำได้ และการใช้ ydata-profiling เพื่อสร้างรายงาน HTML โดยอัตโนมัติ บทถัดไป เราจะเจาะลึกการวิเคราะห์ตัวแปรเดียว — การศึกษาแต่ละคอลัมน์อย่างอิสระเพื่อค้นหาค่าผิดปกติ ความเบ้ และการกระจายที่ไม่เป็นปกติ

เริ่มต้นได้ฟรี

เรียนรู้ Python ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

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

บทเรียน “รายการตรวจสอบการสำรวจชุดข้อมูล” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “รายการตรวจสอบการสำรวจชุดข้อมูล”

ตรวจสอบรูปร่าง dtypes จำนวนค่าที่หายไป ค่าที่ไม่ซ้ำ และสถิติพื้นฐานอย่างเป็นระบบเมื่อพบชุดข้อมูลใหม่ คุณปฏิบัติ Pandas & NumPy Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Pandas & NumPy Academy หรือไม่

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

บทเรียน “รายการตรวจสอบการสำรวจชุดข้อมูล” ใช้เวลานานแค่ไหน

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

ฉันเขียนและรันโค้ดในบทเรียน Pandas & NumPy Academy นี้ได้ไหม

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

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

  1. รายการตรวจสอบการสำรวจชุดข้อมูล
  2. การวิเคราะห์ตัวแปรเดียว
  3. การวิเคราะห์สองตัวแปรและสหสัมพันธ์
  4. การสรุปข้อค้นพบในรายงาน
← กลับไปที่ Pandas & NumPy Academy