Skip to content

Lab: Clean Messy Phone Numbers

คุณได้รับ list เบอร์โทรนักเรียน 8 คน ที่กรอกมาคนละรูปแบบ — งานของคุณคือทำให้ทุกเบอร์เป็นรูปแบบเดียวกัน: 0812345678 (10 หลัก เริ่มด้วย 0)

เวลาที่ใช้: ~20 นาที

student_idnamephone_raw
001Ploy081-234-5678
002Som+66812345678
003Tong081 234 5678
004Fah0898765432
005Bank+66 89 876 5432
006Mint812345678
007Pim085-678-1234
008Ice+6685 678 1234

ปัญหาที่พบ:

  • มี - (dash) ขั้น
  • มี spaces ขั้น
  • บางเบอร์ใช้ +66 แทน 0 นำหน้า
  • บางเบอร์ไม่มี 0 นำหน้า (Mint: 812345678)

Output ที่ต้องการ: ทุกเบอร์เป็น format 0XXXXXXXXX (10 หลัก)

  1. สร้างข้อมูลในแต่ละเครื่องมือ (ดู tab ด้านล่าง)

  2. เขียน formula/code ที่:

    • ลบ spaces และ dashes ออก
    • แปลง +66 เป็น 0
    • เติม 0 นำหน้าถ้าเบอร์มี 9 หลัก
    • ตรวจสอบว่าผลลัพธ์มี 10 หลักพอดี
  3. ตรวจสอบว่าทุกเครื่องมือให้ผลลัพธ์เดียวกัน

สร้าง sheet ใหม่ ใส่ข้อมูลใน column A-C แล้วเขียนสูตรใน column D:

วิธีคิด (ทำทีละขั้น):

ขั้นที่ 1: ลบ spaces → =SUBSTITUTE(C2," ","")

ขั้นที่ 2: ลบ dashes → =SUBSTITUTE(SUBSTITUTE(C2," ",""),"-","")

ขั้นที่ 3: แปลง +66 → 0 → =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(C2," ",""),"-",""),"+66","0")

ขั้นที่ 4: เติม 0 ถ้ามี 9 หลัก → ใช้ IF + LEN

รวมทุกขั้น:

=IF(LEN(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(C2," ",""),"-",""),"+66","0"))=9,
"0"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(C2," ",""),"-",""),"+66","0"),
SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(C2," ",""),"-",""),"+66","0"))

Hint: ใช้ helper column ทำทีละขั้นจะง่ายกว่าเขียนสูตรเดียวยาวๆ

สำคัญ: format column D เป็น “Plain text” ก่อน ไม่งั้น 0812345678 จะกลายเป็น 812345678!

ดูเฉลย

ผลลัพธ์ที่ถูกต้อง (ทุกเครื่องมือต้องได้เหมือนกัน):

namephone_rawphone_clean
Ploy081-234-56780812345678
Som+668123456780812345678
Tong081 234 56780812345678
Fah08987654320898765432
Bank+66 89 876 54320898765432
Mint8123456780812345678
Pim085-678-12340856781234
Ice+6685 678 12340856781234

ขั้นตอนการทำงาน:

  1. ลบ spaces และ dashes — ทุกเครื่องมือมี REPLACE/substitute
  2. แปลง +66 → 0 — ทุกเครื่องมือมี REPLACE/substitute
  3. เติม 0 ถ้า 9 หลัก — ต้องเช็คความยาวก่อน

จุดที่ต้องระวัง:

  • Sheets: format column เป็น “Plain text” ก่อน ไม่งั้น 0812345678 กลายเป็น 812345678
  • Python: ใช้ regex=False ใน .str.replace() เพราะ + เป็น special character ใน regex
  • SQL: ผลลัพธ์ต้องอยู่ใน VARCHAR column ไม่ใช่ INTEGER

บทเรียนรวม Module 2:

  • เบอร์โทรคือ text ไม่ใช่ตัวเลข (Leading zeros!)
  • ข้อมูลจากโลกจริงไม่เคยสะอาด — ต้อง clean เสมอ
  • ทุกเครื่องมือมี text operations เหมือนกัน — แค่ syntax ต่างกัน