Data Analyst › Visualization และ storytelling

เลือกกราฟให้ตรงคำถาม

ประมาณ 25 นาที

เป้าหมายของบท

  • จับคู่คำถามกับชนิดกราฟที่ตอบได้ตรงที่สุด (เทรนด์ตามเวลา → เส้น, เทียบหมวดหมู่ → แท่ง, การกระจายของตัวแปรเดียว → histogram/box plot, ความสัมพันธ์ระหว่างตัวแปรตัวเลขสองตัว → scatter, สัดส่วนของทั้งหมด → แท่งซ้อน/วงกลม)
  • รู้ข้อควรระวังของกราฟวงกลม (pie chart) เมื่อมีหลายส่วน และรู้ทางเลือกที่อ่านง่ายกว่า
  • เตรียมข้อมูล (groupby/sort/pivot) ให้อยู่ในรูปที่พร้อมป้อนให้กราฟแต่ละชนิดวาดได้ทันที

เริ่มต้นโมดูลใหม่: Visualization และ storytelling

ตลอดสองโมดูลที่ผ่านมา (pandas และสถิติ) เราฝึกหาตัวเลขคำตอบจากข้อมูล — ค่าเฉลี่ย, p-value, สหสัมพันธ์ ฯลฯ แต่ในงานจริง ตัวเลขเดี่ยวๆ มักไม่พอสื่อสารกับคนอื่น (ผู้จัดการ, ทีมอื่น, ลูกค้า) — เขาไม่มีเวลาอ่านตาราง 6,000 แถว หรือจำตัวเลขทศนิยม 5 ตำแหน่ง สิ่งที่สื่อสารได้เร็วและจำได้นานกว่าคือกราฟที่เลือกถูกชนิด

โมดูลนี้ (Visualization และ storytelling) เริ่มจากบทที่สำคัญที่สุด: จะรู้ได้ยังไงว่าควรใช้กราฟแบบไหน ก่อนจะไป เรียนวิธีวาดจริงด้วย matplotlib/seaborn ในบทถัดไป

กับดักที่พบบ่อยที่สุด: เลือกกราฟที่ถนัด ไม่ใช่กราฟที่ตอบคำถาม

หลายคนเปิดโปรแกรมทำกราฟแล้วเลือกชนิดกราฟที่ตัวเองคุ้นเคยหรือดูสวยที่สุดก่อน แล้วค่อยยัดข้อมูลเข้าไปให้พอ ใช้ได้ — ลำดับที่ถูกต้องต้องกลับกัน: เริ่มจากคำถามที่อยากตอบก่อนเสมอ แล้วค่อยเลือกชนิดกราฟที่ตอบคำถามนั้น ได้ตรงที่สุด เพราะกราฟแต่ละชนิดถูกออกแบบมาให้สายตาคนอ่าน “เห็น” สิ่งที่ต่างกัน:

  • กราฟเส้น (line) ทำให้สายตาไล่ตามทิศทางได้ง่าย — เหมาะกับข้อมูลที่เรียงตามเวลา
  • กราฟแท่ง (bar) ทำให้สายตาเทียบความยาวได้แม่นยำ — เหมาะกับการเทียบกลุ่มที่ไม่ต่อเนื่องกัน (หมวดหมู่)
  • Histogram/box plot ทำให้เห็นการกระจายของตัวเลขชุดหนึ่ง (ไม่ใช่แค่ค่าเฉลี่ยตัวเดียว)
  • Scatter plot ทำให้เห็นความสัมพันธ์ระหว่างตัวเลขสองชุด
  • แท่งซ้อน/วงกลม (stacked bar / pie) ทำให้เห็นสัดส่วนของทั้งหมด

เลือกผิดชนิด กราฟจะยัง “รันได้” และ “ดูเหมือนกราฟ” แต่จะซ่อนสิ่งที่ควรเห็น หรือทำให้อ่านผิดไปเลย

ตารางตัดสินใจ: คำถามแบบไหน ใช้กราฟแบบไหน

คำถาม กราฟที่เหมาะ เหตุผลสั้นๆ
ค่านี้เปลี่ยนแปลงตามเวลายังไง (เทรนด์) กราฟเส้น (line) สายตาไล่ตามเส้นเพื่อดูทิศทางขึ้น/ลงได้ทันที ต่อเนื่องตามแกนเวลา
กลุ่ม/หมวดหมู่ไหนมากกว่ากัน กราฟแท่ง (bar) เทียบความยาวแท่งแม่นยำกว่าเทียบมุมหรือพื้นที่ ใช้ได้แม้มีหลายหมวดหมู่
ตัวแปรตัวเดียวกระจายตัวยังไง (มีค่าผิดปกติไหม) Histogram แบ่งค่าเป็นช่วง (bin) แล้วนับความถี่ เห็นรูปร่างการกระจายทั้งหมดในภาพเดียว
ตัวแปรตัวเลขสองตัวสัมพันธ์กันไหม Scatter plot จุดแต่ละจุดคือ 1 แถว เห็นรูปแบบความสัมพันธ์ (เชิงเส้น/ไม่เชิงเส้น/ไม่มีเลย) ได้ตรงๆ
การกระจาย + ค่าผิดปกติ ต่างกันข้ามหลายกลุ่ม Box plot เห็น Q1/median/Q3 และ outlier ของแต่ละกลุ่มเทียบกันในภาพเดียว กระชับกว่า histogram แยกกลุ่ม
สัดส่วนของทั้งหมด (รวมกันต้อง 100%) แท่งซ้อนหรือวงกลม (มีข้อควรระวัง) ต้องการสื่อว่าแต่ละส่วนคิดเป็นกี่ % ของทั้งหมด ไม่ใช่แค่เทียบขนาดกันเฉยๆ

ข้อควรระวังเรื่องกราฟวงกลม (pie chart): สายตาคนเปรียบเทียบ “มุม” หรือ “พื้นที่โค้ง” ได้แม่นยำน้อยกว่าเปรียบเทียบ “ความยาวแท่ง” มาก — พอมีมากกว่าประมาณ 5-6 ส่วน วงกลมจะเต็มไปด้วยเสี้ยวเล็กๆ ที่แยกไม่ออกว่าอันไหนใหญ่กว่ากัน ทางที่ปลอดภัยกว่าเกือบทุกกรณีคือใช้กราฟแท่งเรียงจากมากไปน้อยแทน (ยังคงเห็นได้ว่าอันไหนเยอะสุด และยังบวกกัน ดู % ได้ถ้าจำเป็นจริงๆ) — เก็บวงกลมไว้ใช้เฉพาะตอนมีไม่กี่ส่วน (2-4 ส่วน) จริงๆ

เตรียมข้อมูลให้พร้อมก่อนวาดกราฟ

ก่อนจะวาดกราฟ (ซึ่งเป็นเรื่องของบทถัดไป) สิ่งที่ต้องทำให้ถูกต้องก่อนเสมอคือเตรียมข้อมูลให้อยู่ในรูปที่กราฟ ต้องการ — กราฟเส้นต้องการ Series ที่เรียงตามเวลา, กราฟแท่งต้องการ Series ที่ index เป็นหมวดหมู่และมักเรียง จากมากไปน้อย, scatter ต้องการ DataFrame สองคอลัมน์ตัวเลข ฯลฯ ขั้นตอนนี้คือ groupby/sort/pivot ที่เรียนมา จากโมดูล pandas ทั้งหมด — บทนี้จึงเน้นฝึกเตรียมข้อมูลให้ถูกรูปแบบสำหรับกราฟแต่ละชนิด ส่วนไวยากรณ์การวาดจริง ด้วย matplotlib/seaborn จะไปเรียนละเอียดในบทถัดไป

ตัวอย่าง: จากคำถามสู่ข้อมูลที่พร้อมวาด

ลองดูสองตัวอย่างด้านล่าง — สังเกตว่าขั้นแรกเสมอคือ “คำถามนี้เหมาะกับกราฟแบบไหน” ก่อนจะลงมือเตรียมข้อมูล

ตัวอย่างแก้โจทย์

กด "ขั้นต่อไป" ทีละขั้น ลองรันและแก้โค้ดในแต่ละขั้นได้

ยอดขายรายเดือนปี 2025 เปลี่ยนแปลงยังไง (เตรียมข้อมูลสำหรับกราฟเส้น)

ผู้บริหารอยากเห็นว่ายอดขายรวมในปี 2025 มีทิศทางขึ้นหรือลงยังไงในแต่ละเดือน — คำถามแบบนี้เกี่ยวกับ เทรนด์ตามเวลา จึงเหมาะกับกราฟเส้น ซึ่งกราฟเส้นต้องการข้อมูลที่เรียงตามแกนเวลาจากซ้ายไปขวา

  1. หายอดขายต่อออเดอร์ก่อน (เฉพาะออเดอร์ที่ status == 'completed') ด้วยการ merge order_items กับ orders แล้วคำนวณ quantity * unit_price ต่อแถว รวมต่อ order_id

    Python

หมวดสินค้าไหนทำรายได้เยอะที่สุด (เตรียมข้อมูลสำหรับกราฟแท่ง)

ทีมสินค้าอยากเทียบว่าหมวดไหนทำรายได้เยอะที่สุด — คำถามแบบนี้คือเทียบหมวดหมู่ที่ไม่ต่อเนื่องกัน จึง เหมาะกับกราฟแท่งมากกว่าวงกลม (มี 6 หมวด ขนาดต่างกันมาก วงกลมจะแยกเสี้ยวเล็กๆ ได้ยาก)

  1. หายอดขายต่อออเดอร์ (เฉพาะ completed) แล้ว merge กับ products เพื่อดึงคอลัมน์ category มาด้วย

    Python

เติมช่องว่าง

แทน ___ ด้วยโค้ดที่ถูกต้อง แล้วกดตรวจคำตอบ

ยังไม่ได้ทำ

เตรียมข้อมูลรายได้ต่อหมวดสินค้า เรียงจากมากไปน้อย (เหมาะกับกราฟแท่ง) เก็บไว้ในตัวแปร result เติม ___ ให้ครบ

แบบฝึกท้ายบท

บทนี้จะนับว่าเสร็จเมื่อผ่านข้อพื้นฐานและประยุกต์ครบ ข้อท้าทายได้ดาวเพิ่ม

🟢 พื้นฐาน

🟢 พื้นฐานยังไม่ได้ทำ

อยากดูสัดส่วนช่องทางสมัครของลูกค้า (เหมาะกับกราฟแท่งหรือวงกลม) เตรียมจำนวนลูกค้าต่อช่องทางสมัคร (channel) เพื่อจะเอาไปวาดกราฟ เก็บไว้ในตัวแปร result

🟢 พื้นฐานยังไม่ได้ทำ

การกระจายของราคาสินค้าเป็นยังไง (เหมาะกับ histogram) แบ่งราคาสินค้าเป็นช่วง [0,500], (500,1000], (1000,5000], (5000,10000], (10000,30000] แล้วนับจำนวนสินค้าต่อช่วง เพื่อจะเอาไปวาดกราฟ histogram เก็บไว้ในตัวแปร result

🟢 พื้นฐานยังไม่ได้ทำ

ราคากับต้นทุนของสินค้าสัมพันธ์กันยังไง (เหมาะกับ scatter plot) เตรียมสองคอลัมน์ price กับ cost เพื่อจะเอาไปวาดกราฟ scatter เก็บไว้ในตัวแปร result

🟢 พื้นฐานยังไม่ได้ทำ

ยอดขายรายเดือนปี 2025 เปลี่ยนแปลงยังไง (เหมาะกับกราฟเส้น) เตรียม Series ยอดขายรวมต่อเดือน (เฉพาะออเดอร์ที่ status เป็น completed) index เป็น YYYY-MM เพื่อจะเอาไปวาดกราฟเส้น เก็บไว้ในตัวแปร result

🟡 ประยุกต์

🟡 ประยุกต์ยังไม่ได้ทำ

หมวดสินค้าไหนทำรายได้เยอะที่สุด เรียงจากมากไปน้อย (เหมาะกับกราฟแท่ง) เพื่อจะเอาไปวาดกราฟแท่ง เก็บไว้ในตัวแปร result

🟡 ประยุกต์ยังไม่ได้ทำ

ราคาสินค้าแต่ละหมวดกระจายกว้างแค่ไหน (เหมาะกับ box plot) เตรียม Q1/median/Q3 ของราคาต่อหมวดสินค้า เพื่อจะเอาไปวาดกราฟ box plot เก็บไว้ในตัวแปร result (index เป็น category คอลัมน์คือ 25%, 50%, 75%)

🟡 ประยุกต์ยังไม่ได้ทำ

ถ้าอยากรู้ว่าลูกค้าที่สมัครผ่านช่องทางไหนใช้จ่ายเฉลี่ยต่อออเดอร์เยอะที่สุด กราฟชนิดไหนเหมาะที่สุด (เทียบหมวดหมู่ → กราฟแท่ง) เตรียมยอดขายเฉลี่ยต่อออเดอร์ (เฉพาะ completed) ต่อช่องทางสมัคร (channel) เรียงจากมากไปน้อย เพื่อจะเอาไปวาดกราฟแท่ง เก็บไว้ในตัวแปร result

🔴 ท้าทาย

🔴 ท้าทายยังไม่ได้ทำ

เดือนไหนใน 2025 ทำรายได้สูงสุด 3 อันดับแรก (ยอดขายเฉพาะออเดอร์ completed) เพื่อจะเอาไปวาดจุดเน้นบนกราฟ เส้น เก็บไว้ในตัวแปร result เรียงจากมากไปน้อย

Quiz

1. อยากดูเทรนด์ยอดขายตามเวลา ควรใช้กราฟแบบไหน
2. อยากเทียบยอดขายระหว่างหมวดสินค้า ควรใช้กราฟแบบไหน
3. ทำไมกราฟวงกลม (pie chart) ที่มีมากกว่า 5-6 ส่วนถึงมักอ่านยาก
4. อยากดูความสัมพันธ์ระหว่างตัวแปรตัวเลขสองตัว ควรใช้กราฟแบบไหน

สรุป

  • เริ่มจากคำถามที่อยากตอบก่อนเสมอ แล้วค่อยเลือกชนิดกราฟที่ตอบคำถามนั้นได้ตรงที่สุด ไม่ใช่เลือกกราฟที่ถนัดก่อน
  • เทรนด์ตามเวลา → เส้น, เทียบหมวดหมู่ → แท่ง, การกระจายตัวแปรเดียว → histogram/box plot, ความสัมพันธ์ระหว่างตัวเลขสองตัว → scatter, สัดส่วนของทั้งหมด → แท่งซ้อน/วงกลม (ระวังวงกลมเมื่อมีหลายส่วน)
  • ก่อนวาดกราฟต้องเตรียมข้อมูลให้อยู่ในรูปที่กราฟนั้นต้องการก่อนเสมอ (groupby/sort/pivot) — เป็นทักษะที่ตรวจสอบได้จริง ส่วนไวยากรณ์การวาดจะเรียนในบทถัดไป

คำถามสัมภาษณ์

ได้โจทย์ "อยากรู้ว่าลูกค้ากลุ่มไหนน่าสนใจที่สุด" แบบกว้างๆ จะเลือกกราฟและเตรียมข้อมูลยังไง

เริ่มจากถามกลับให้คำถามแคบลงก่อนว่า "น่าสนใจ" หมายถึงอะไร — จำนวนคนเยอะ, ใช้จ่ายเยอะ, หรือแนวโน้ม เติบโตเร็ว เพราะแต่ละแบบตอบด้วยกราฟคนละชนิด

ถ้าหมายถึง "กลุ่มไหนใช้จ่ายรวมเยอะที่สุด" (เทียบหมวดหมู่) จะเตรียมข้อมูลแบบ groupby ตามกลุ่มลูกค้า (เช่น channel หรือ city) แล้วรวมยอดใช้จ่าย เรียงจากมากไปน้อย ใช้กราฟแท่ง

ถ้าหมายถึง "แต่ละกลุ่มใช้จ่ายกระจายกว้างแค่ไหน มีลูกค้า VIP โผล่ในกลุ่มไหนบ้าง" จะเปลี่ยนไปใช้ box plot แทน เพราะต้องการเห็นการกระจายและ outlier ไม่ใช่แค่ผลรวม

สรุปคือต้องตีความคำถามกำกวมให้ชัดเจนก่อนเสมอ แล้วค่อยเลือกกราฟ ไม่ใช่เดาชนิดกราฟจากคำถามที่ยังกว้างอยู่

เจอ dataset ใหม่ ขั้นตอนแรกก่อนเลือกชนิดกราฟควรทำอะไร

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

หลังจากรู้คำถามชัดแล้ว ค่อยดูว่าตัวแปรที่เกี่ยวข้องเป็นชนิดไหน (ตามเวลา, หมวดหมู่, ตัวเลขต่อเนื่อง) แล้วจับคู่กับตารางตัดสินใจ (เทรนด์→เส้น, เทียบหมวด→แท่ง, การกระจาย→histogram/box, ความสัมพันธ์→scatter) สุดท้ายค่อยเตรียมข้อมูลด้วย groupby/sort/pivot ให้อยู่ในรูปที่กราฟชนิดนั้นต้องการ