ใช้ AI draft และ debug pandas อย่างเป็นระบบ
AI เป็นคู่หูช่วยเขียนโค้ด ไม่ใช่ผู้รู้แจ้งที่เชื่อได้ทุกคำ
🎯 สิ่งที่คุณจะทำได้หลังเรียนโมดูลนี้
- ใช้ AI ช่วยร่างโค้ด (draft), ช่วยแก้จุดที่พัง (debug) และช่วยอธิบายโค้ด pandas ที่เราไม่คุ้น
- อ่านและตรวจโค้ดที่ AI เขียนให้ก่อนกดรัน
- จับจุดที่ชนิดข้อมูลถูกแอบเปลี่ยนแบบเงียบ ๆ (silent coercion) และแถวข้อมูลหายไป (dropped rows) ในโค้ดที่ AI เขียน
เนื้อหา
วิธีทำงานของนักวิเคราะห์ข้อมูล (analyst) คือให้ AI ช่วยร่างโค้ด (draft) และช่วยหาจุดที่โค้ดพัง (debug) ทั้ง pandas กับ SQL รวมถึงช่วยอธิบายโค้ดที่เราอ่านไม่ออก แต่คนที่ต้องตรวจและตีความผลว่าถูกไหมยังเป็นตัวเราเองอยู่ดี บทนี้จะสอนใช้ AI เขียน pandas สำหรับงานจริง เช่น จัดกลุ่มสรุปยอด (groupby), ต่อรวมสองตาราง (merge), สลับแถวเป็นคอลัมน์ (pivot) และคำนวณแบบเลื่อนหน้าต่าง (window) แล้วตรวจโค้ดก่อนกดรัน โดยเฉพาะจุดที่ AI ชอบแอบเปลี่ยนชนิดข้อมูลให้เองแบบเงียบ ๆ หรือทำแถวข้อมูลหายตอน merge เพราะคีย์ที่ใช้จับคู่ไม่ตรงกัน และย้ำเรื่องการทำซ้ำแล้วได้ผลเดิม (reproducibility) ก็คือ ต้องเก็บโค้ดไว้ ระบุเวอร์ชันให้ชัด แล้วรันซ้ำเพื่อยืนยัน เพราะถึงพิมพ์คำสั่งเดิม (prompt) AI ก็อาจให้โค้ดหรือคำตอบไม่เหมือนเดิมได้
🧪 ตัวอย่างจริง + ผลลัพธ์ที่ได้
AI เขียน pd.merge(orders, customers, on='customer_id', how='left') แสดงขนาดตาราง (shape) ก่อน-หลัง แล้วนับค่าว่าง (null) ในคอลัมน์ที่มาจาก customers เช่นเจอ 1,204 ออเดอร์ที่หาลูกค้าตรงไม่เจอ และอธิบายว่าถ้าใช้ inner join แถวพวกนี้จะโดนทิ้ง
merge เป็นจุดที่แถวข้อมูลชอบหายแบบเงียบ ๆ ให้นับจำนวนแถวก่อน-หลัง และเช็กชนิดของ join ทุกครั้ง
AI อธิบายว่าโค้ดนี้จัดอันดับยอดขายภายในแต่ละภูมิภาค (region) แบบ dense rank จากมากไปน้อย และเตือนกรณีขอบ ๆ ไว้ เช่น ค่าว่าง (NaN) จะไม่ถูกจัดอันดับ และค่าที่เท่ากันจะได้อันดับเดียวกัน
การให้ AI อธิบายโค้ดช่วยให้เราเรียนรู้และจับกรณีขอบ ๆ (edge case) ได้ แต่ก็ยังต้องเอาไปทดสอบกับข้อมูลจริงอยู่ดี
แบบฝึกหัดท้ายโมดูล
- ให้ AI เขียน pandas สำหรับงานจริงของคุณที่ต้อง pivot บวกกับ window function แล้วอ่านตรวจโค้ด (review) หาจุดเสี่ยง 2 จุด (ชนิดข้อมูลถูกเปลี่ยนเอง หรือแถวหาย) ก่อนกดรัน
- ลองพิมพ์คำสั่งเดิม (prompt) แล้วขอโค้ดจาก AI 2 ครั้ง เทียบดูว่าออกมาต่างกันไหม แล้วสรุปว่าทำไมถ้าอยากให้ทำซ้ำได้ผลเดิม (reproducibility) เราต้องล็อกตัวโค้ดไว้ ไม่ใช่ล็อกแค่คำสั่งที่พิมพ์