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

การโหลดและตรวจสอบชุดข้อมูลการขาย

นำเข้า CSV ของระเบียนคำสั่งซื้อ ตรวจสอบ dtypes และค่าที่หายไป พร้อมแก้ไขการแยกวิเคราะห์วันที่และความผิดปกติของปริมาณติดลบ

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

แนะนำชุดข้อมูลการขาย

ชุดข้อมูลการขายทั่วไปประกอบด้วยคอลัมน์ต่าง ๆ เช่น order_id, order_date, customer_id, product, category, quantity, unit_price และ region ก่อนเริ่มการวิเคราะห์ คุณต้องโหลดไฟล์นี้และตรวจดูโครงสร้างเบื้องต้น เป้าหมายของขั้นตอนแรกคือทำความเข้าใจว่าคุณมีข้อมูลใดอยู่บ้าง ก่อนเขียนสูตรแม้แต่สูตรเดียว

import pandas as pd

df = pd.read_csv('sales.csv')
print(df.shape)       # (rows, columns)
print(df.head())

ตรวจสอบรูปร่างและชื่อคอลัมน์

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

print('Rows, Cols:', df.shape)
print('Columns:', df.columns.tolist())
print('Index:', df.index[:5].tolist())

ตรวจสอบชนิดข้อมูลด้วย dtypes

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

print(df.dtypes)

# More detail including non-null counts
df.info()

การนับค่าที่หายไป

เรียกใช้ df.isna().sum() เพื่อนับค่า NaN ในแต่ละคอลัมน์ แปลงเป็นเปอร์เซ็นต์ด้วย df.isna().mean() * 100 เพื่อดูสัดส่วนของข้อมูลในแต่ละคอลัมน์ที่หายไป คอลัมน์ที่มีข้อมูลหายไปมากกว่า 30–40% มักต้องตัดสินใจว่าจะลบคอลัมน์ เติมค่าทดแทน หรือทำเครื่องหมายเป็นตัวแปรบ่งชี้แยกต่างหาก

missing = df.isna().sum()
missing_pct = df.isna().mean() * 100

print(pd.DataFrame({'count': missing, 'pct': missing_pct}))

การตรวจหาแถวซ้ำ

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

print('Exact duplicates:', df.duplicated().sum())
print('Duplicate order_ids:', df.duplicated(subset=['order_id']).sum())

# Preview the duplicated rows
print(df[df.duplicated(subset=['order_id'], keep=False)].head())

การแก้ไขการแยกวิเคราะห์คอลัมน์วันที่

คอลัมน์วันที่ที่โหลดเป็น object ต้องแปลงด้วย pd.to_datetime() เพื่อให้สามารถคำนวณเกี่ยวกับวันที่ได้ ส่ง format='%Y-%m-%d' หากทราบรูปแบบที่แน่นอน หรือใช้ infer_datetime_format=True สำหรับรูปแบบที่หลากหลาย หลังการแปลง ให้แยกปีและเดือนด้วยตัวเข้าถึง .dt เพื่อจัดกลุ่มตามเวลา

df['order_date'] = pd.to_datetime(df['order_date'], format='%Y-%m-%d')

df['year'] = df['order_date'].dt.year
df['month'] = df['order_date'].dt.month

print(df[['order_date', 'year', 'month']].head())

การตรวจหาปริมาณติดลบ

ค่า quantity ที่ติดลบมักหมายถึงการคืนสินค้าหรือข้อผิดพลาดในการป้อนข้อมูล ใช้การจัดทำดัชนีแบบบูลีนเพื่อค้นหา: df[df['quantity'] < 0] จากนั้นตัดสินใจว่าจะถือว่าเป็นการคืนสินค้าที่ถูกต้อง (เก็บไว้พร้อมทำเครื่องหมาย) หรือเป็นข้อผิดพลาด (ลบหรือแก้ไข) ควรบันทึกการตัดสินใจไว้เสมอ เพื่อให้สามารถทำกระบวนการประมวลผลซ้ำได้อย่างถูกต้อง

negatives = df[df['quantity'] < 0]
print(f'Negative quantity rows: {len(negatives)}')
print(negatives.head())

# Flag returns separately
df['is_return'] = df['quantity'] < 0

การตรวจสอบช่วงค่าของคอลัมน์ตัวเลข

ใช้ df.describe() เพื่อดูค่าต่ำสุด ค่าสูงสุด ค่าเฉลี่ย และควอร์ไทล์ของคอลัมน์ตัวเลขทุกคอลัมน์ ค่า unit_price ที่มีค่าต่ำสุดเป็นศูนย์หรือติดลบเป็นสิ่งที่น่าสงสัย ค่าสูงสุดของ quantity ที่สูงเกินกว่าขนาดคำสั่งซื้อที่สมเหตุสมผลอาจเป็นข้อผิดพลาดในการป้อนข้อมูล การตรวจสอบความสมเหตุสมผลของช่วงค่าเป็นวิธีที่รวดเร็วในการค้นหาความผิดปกติ

print(df[['quantity', 'unit_price']].describe())

# Any price exactly 0?
print('Zero price rows:', (df['unit_price'] == 0).sum())

การตรวจสอบคอลัมน์เชิงหมวดหมู่

สำหรับคอลัมน์อย่าง region และ category ให้ใช้ df['region'].value_counts() เพื่อดูค่าที่ไม่ซ้ำกันทั้งหมดและความถี่ของแต่ละค่า ตรวจหาการพิมพ์ผิด การใช้ตัวพิมพ์ใหญ่เล็กไม่สอดคล้องกัน (เช่น 'north' กับ 'North') หรือค่าที่ไม่คาดคิดซึ่งบ่งชี้ปัญหาของข้อมูลต้นทาง ให้ปรับค่าเหล่านี้ให้เป็นมาตรฐานก่อนดำเนินการ groupby ใด ๆ

print(df['region'].value_counts())
print(df['category'].value_counts())

# Normalise capitalisation
df['region'] = df['region'].str.strip().str.title()

การสร้างสรุปการตรวจสอบข้อมูล

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

audit = {
    'rows': len(df),
    'columns': len(df.columns),
    'missing_cells': df.isna().sum().sum(),
    'duplicate_rows': df.duplicated().sum(),
    'date_range_start': df['order_date'].min(),
    'date_range_end': df['order_date'].max()
}

for k, v in audit.items():
    print(f'{k}: {v}')

การบันทึกข้อมูลชุดสะอาด

หลังจากตรวจสอบเบื้องต้นและแก้ไขพื้นฐานแล้ว (การแก้ชนิดข้อมูล การลบข้อมูลซ้ำ และคอลัมน์ตัวบ่งชี้) ให้บันทึกข้อมูลชุดสะอาดไว้ เพื่อให้ขั้นตอนถัดไปเริ่มจากพื้นฐานเดียวกันเสมอ ใช้ df.to_csv('sales_clean.csv', index=False) หรือใช้ df.to_parquet('sales_clean.parquet') หากต้องการโหลดกลับได้เร็วขึ้น Parquet จะรักษาชนิดข้อมูลไว้ รวมถึงข้อมูลวันเวลา ซึ่ง CSV ไม่สามารถทำได้

# Drop exact duplicates before saving
df = df.drop_duplicates(subset=['order_id'], keep='first')

# Save clean snapshot
df.to_parquet('sales_clean.parquet', index=False)
print('Saved', len(df), 'rows to sales_clean.parquet')

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจแนวคิดการวิเคราะห์ข้อมูลจากบทเรียนนี้

สรุปบทเรียน

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

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

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

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

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

นำเข้า CSV ของระเบียนคำสั่งซื้อ ตรวจสอบ 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. การวิเคราะห์ GroupBy ตามภูมิภาคและหมวดหมู่
  4. การแสดงแนวโน้มรายเดือน
← กลับไปที่ Pandas & NumPy Academy