การโหลดและตรวจสอบชุดข้อมูลการขาย
นำเข้า 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การโหลดและตรวจสอบชุดข้อมูลการขาย
- การคำนวณรายได้และการสร้างคุณลักษณะ
- การวิเคราะห์ GroupBy ตามภูมิภาคและหมวดหมู่
- การแสดงแนวโน้มรายเดือน