Data Analyst › Visualization และ storytelling
หลักการทำ dashboard
ประมาณ 20 นาที
เป้าหมายของบท
- dashboard ที่ดีตอบคำถามหลักได้ในสายตาเดียว ไม่ต้อง scroll หรือคลิกเพิ่ม
- KPI card + กราฟเทรนด์ + breakdown คือโครงสร้างที่ใช้บ่อยที่สุดในงานจริง
- รักษาความสม่ำเสมอ (สี, หน่วย, การปัดเศษ) ทั่วทั้ง dashboard เพื่อลดภาระการตีความ
- เข้าใจภาพรวมของเครื่องมือในงานจริง (Power BI, Tableau, Looker Studio) เทียบกับ matplotlib/seaborn
Dashboard ที่ดีตอบคำถามได้ในสายตาเดียว
บทที่แล้วเรียนวิธีวาดกราฟทีละใบด้วย matplotlib/seaborn ในบทนี้จะพูดถึงการเอากราฟหลายใบมา “จัดวาง” รวมกันเป็น dashboard — สิ่งที่ผู้บริหารหรือทีมธุรกิจเปิดดูทุกวัน
หลักการข้อแรกและสำคัญที่สุด: dashboard ที่ดีต้องตอบคำถามหลักได้ทันทีที่เปิดขึ้นมา โดยไม่ต้อง scroll ลงไปหา ไม่ต้องคลิกกรองเพิ่ม ไม่ต้อง zoom เข้าไปอ่านตัวเลข — ถ้าผู้บริหารต้อง ถามกลับว่า “ตอนนี้ยอดขายดีขึ้นหรือแย่ลง” แปลว่า dashboard นั้นยังทำหน้าที่ไม่สำเร็จ
โครงสร้างที่ใช้บ่อย: KPI card + เทรนด์ + breakdown
dashboard ส่วนใหญ่ในงานจริง (ยอดขาย, การตลาด, product) ใช้โครงสร้างเดียวกันซ้ำๆ อยู่ 3 ส่วน:
| ส่วน | ตอบคำถามว่า | ตัวอย่าง |
|---|---|---|
| KPI card | ตอนนี้เป็นยังไง เทียบกับก่อนหน้าเปลี่ยนไปแค่ไหน | “รายได้ พ.ย. 2025: 2,059,592 บาท (+60.73% เทียบเดือนก่อน)” |
| เทรนด์ (trend) | แนวโน้มตามเวลาเป็นยังไง กำลังขึ้นหรือลง | กราฟเส้นรายได้รายเดือน |
| breakdown | ตัวเลขรวมมาจากไหนบ้าง ส่วนไหนมีสัดส่วนเยอะ | กราฟแท่งรายได้แยกตามหมวดสินค้า |
ตัวอย่าง KPI card แบบง่ายที่สุดคือการเทียบเดือนนี้กับเดือนก่อนหน้า (month-over-month, MoM):
import pandas as pd
orders = pd.read_csv("data/orders.csv")
order_items = pd.read_csv("data/order_items.csv")
completed = orders[orders['status'] == 'completed'].copy()
order_items = order_items.copy()
order_items['line'] = order_items['quantity'] * order_items['unit_price']
merged = order_items.merge(completed[['order_id', 'order_date']], on='order_id')
merged['month'] = merged['order_date'].str[:7]
monthly = merged[merged['month'].str.startswith('2025')].groupby('month')['line'].sum()
nov_revenue = monthly['2025-11']
oct_revenue = monthly['2025-10']
mom_pct = round((nov_revenue - oct_revenue) / oct_revenue * 100, 2)
ตัวเลข mom_pct ที่ได้ (+60.73) คือสิ่งที่ KPI card ควรโชว์ คู่กับ ตัวเลขดิบ (2,059,592) เสมอ —
ตัวเลขดิบเพียงอย่างเดียวไม่บอกว่าดีขึ้นหรือแย่ลง ส่วน % เปลี่ยนแปลงเพียงอย่างเดียวก็ไม่บอกขนาดจริง
ของธุรกิจ ต้องมีทั้งคู่ และ dashboard จริงมักใส่สีเขียว/แดงกับลูกศรขึ้น/ลงกำกับ % นั้นด้วย เพื่อให้
สายตากวาดผ่านแล้ว “รู้ทันที” โดยไม่ต้องอ่านตัวเลข
เทรนด์กับ breakdown มักวางคู่กันในหน้าเดียว เพราะตอบคำถามคนละมุมของเรื่องเดียวกัน — เทรนด์บอกว่า “ภาพรวมกำลังไปทางไหน” ส่วน breakdown บอกว่า “ที่เห็นนั้นมาจากส่วนไหนบ้าง”
ความสม่ำเสมอทั่วทั้ง dashboard
เมื่อมีกราฟหลายใบอยู่ในหน้าเดียวกัน รายละเอียดเล็กๆ ที่ไม่สม่ำเสมอจะกลายเป็นภาระของผู้อ่านทันที:
- สี — ถ้าสีแดงหมายถึง “ลดลง” ในกราฟหนึ่ง แต่หมายถึงหมวดสินค้าหนึ่งในอีกกราฟ คนอ่านจะเข้าใจผิด ควรกำหนดความหมายของสีให้ตรงกันทั้ง dashboard (เช่น เขียว = ดีขึ้น/บวกเสมอ, แดง = แย่ลง/ลบเสมอ)
- หน่วย — ถ้ากราฟหนึ่งโชว์รายได้เป็นบาท อีกกราฟโชว์เป็นพันบาท (K) โดยไม่บอกไว้ชัดๆ คนอ่านจะเทียบตัวเลข ข้ามกราฟผิดได้ง่าย
- การปัดเศษ — ถ้า KPI card หนึ่งปัด 0 ตำแหน่ง อีกอันปัด 2 ตำแหน่ง ตัวเลขจะดูไม่เป็นระบบเดียวกัน
ความสม่ำเสมอพวกนี้ไม่ใช่เรื่องความสวยงามอย่างเดียว แต่ลดภาระการตีความของผู้อ่านโดยตรง — ยิ่งต้องคิดน้อย ก็ยิ่งอ่านเร็วและตัดสินใจได้เร็ว ซึ่งเป็นเป้าหมายหลักของ dashboard ตั้งแต่แรก
เครื่องมือในงานจริง เทียบกับสิ่งที่เรียนในเว็บนี้
ในงานจริง DA ส่วนใหญ่ไม่ได้สร้าง dashboard ด้วย matplotlib/seaborn ใน notebook แต่ใช้เครื่องมือ แบบ drag-and-drop ที่เชื่อมต่อกับฐานข้อมูลได้โดยตรงและรีเฟรชอัตโนมัติ ที่พบบ่อยที่สุดคือ Power BI, Tableau, และ Looker Studio
ข่าวดีคือแนวคิดเบื้องหลังเหมือนกันทุกประการกับที่เรียนมาทั้งบท — เลือกกราฟให้ตรงคำถาม (บทที่ 1), เตรียมข้อมูลให้พร้อม (groupby/aggregate แบบที่ทำมาตลอด), จัดเป็น KPI card + เทรนด์ + breakdown, รักษาความสม่ำเสมอ สิ่งที่ต่างกันมีแค่ เครื่องมือ: เครื่องมือ drag-and-drop ทำให้สร้างกราฟเร็วขึ้นและ เชื่อมข้อมูลสดได้ง่ายขึ้น แต่การตัดสินใจว่า “จะโชว์อะไร” และ “ทำไมถึงเลือกกราฟแบบนี้” ยังเป็นทักษะเดียวกับ ที่ฝึกมาด้วย pandas/matplotlib ทุกอย่าง — เขียนโค้ดได้คล่องเท่ากับลาก-วางได้คล่อง เพราะพื้นฐานความคิด เหมือนกัน
ตัวอย่างแก้โจทย์
กด "ขั้นต่อไป" ทีละขั้น ลองรันและแก้โค้ดในแต่ละขั้นได้
KPI card: รายได้เดือนนี้เทียบเดือนก่อนหน้า
ผู้บริหารอยากเห็นตัวเลขเดียวทุกเช้า: เดือนนี้ยอดขายดีขึ้นหรือแย่ลงเมื่อเทียบกับเดือนก่อน นี่คือ KPI card ที่ง่ายและใช้บ่อยที่สุด
เตรียมข้อมูลรายได้รายเดือนของปี 2025 (เฉพาะออเดอร์ที่ status เป็น completed) เหมือนที่เคยทำในบทก่อนๆ
trend + breakdown ในหน้าเดียว ด้วย plt.subplots
อยากทำ dashboard หนึ่งหน้าที่โชว์ทั้งเทรนด์รายได้รายเดือน (ซ้าย) และรายได้แยกตามหมวดสินค้า (ขวา) พร้อมกัน — นี่คือรูปแบบ "trend + breakdown ข้างกัน" ที่ dashboard จริงใช้บ่อยที่สุด
สร้าง figure แบบ 1 แถว 2 คอลัมน์ด้วย
plt.subplots(1, 2)— ช่องซ้ายเป็นกราฟเส้น (เทรนด์) ช่องขวาเป็นกราฟแท่ง (breakdown ตามหมวดสินค้า เรียงมากไปน้อย)
เติมช่องว่าง
แทน ___ ด้วยโค้ดที่ถูกต้อง แล้วกดตรวจคำตอบ
คำนวณ % เปลี่ยนแปลงยอดขาย (MoM) ของเดือน พ.ย. เทียบ ต.ค. 2025 เก็บไว้ในตัวแปร mom_pct (ปัด 2 ตำแหน่ง) — สูตร MoM คือ (เดือนนี้ - เดือนก่อน) หารด้วยเดือนก่อน คูณ 100 เติม ___ ให้ครบ
แบบฝึกท้ายบท
บทนี้จะนับว่าเสร็จเมื่อผ่านข้อพื้นฐานและประยุกต์ครบ ข้อท้าทายได้ดาวเพิ่ม
🟢 พื้นฐาน
รายได้รวมของเดือน พ.ย. 2025 (เฉพาะออเดอร์ที่ completed) เก็บไว้ในตัวแปร nov_revenue
รายได้รวมของเดือน ต.ค. 2025 (เฉพาะออเดอร์ที่ completed) เก็บไว้ในตัวแปร oct_revenue
% เปลี่ยนแปลงยอดขาย (MoM) ของเดือน พ.ย. เทียบ ต.ค. 2025 ปัด 2 ตำแหน่ง เก็บไว้ในตัวแปร mom_pct เพื่อจะเอาไปโชว์เป็นตัวเลขคู่กับ nov_revenue บน KPI card
จากค่า mom_pct ที่คำนวณได้ นี่คือการเปลี่ยนแปลงที่เป็นข่าวดี (ควรเน้นบน dashboard) หรือไม่? เก็บผลไว้ในตัวแปร is_improvement (True/False)
🟡 ประยุกต์
รายได้รวมของเดือน ธ.ค. 2025 เก็บไว้ในตัวแปร dec_revenue และ % เปลี่ยนแปลง (MoM) ของเดือน ธ.ค. เทียบ พ.ย. 2025 ปัด 2 ตำแหน่ง เก็บไว้ในตัวแปร mom_pct_dec
รายได้เฉลี่ยต่อเดือนของทั้ง 12 เดือนในปี 2025 (ปัดเป็นจำนวนเต็ม) เก็บไว้ในตัวแปร avg_monthly_2025 เพื่อใช้เป็นเส้นฐาน (baseline) เทียบว่าเดือนไหน "ดีกว่าค่าเฉลี่ย" บ้างบน dashboard
มีกี่เดือนในปี 2025 (จาก 12 เดือน) ที่ทำรายได้สูงกว่าค่าเฉลี่ยรายเดือนของทั้งปี เก็บจำนวนไว้ในตัวแปร n_above_avg (คำนวณค่าเฉลี่ยใหม่ในโจทย์นี้เอง ไม่ต้องอ้างอิงตัวแปรจากข้อก่อนหน้า)
🔴 ท้าทาย
เตรียมตาราง 2 แถวสำหรับ KPI card สรุป: คอลัมน์ metric, value โดยแถวแรกคือ ("Nov revenue", รายได้ เดือน พ.ย. 2025) และแถวสองคือ ("MoM % change", % เปลี่ยนแปลงเดือน พ.ย. เทียบ ต.ค. 2025 ปัด 2 ตำแหน่ง — ต้องตรงกับค่าที่คำนวณใน e1/e3) เก็บไว้ในตัวแปร result
Quiz
สรุป
- dashboard ที่ดีตอบคำถามหลักได้ทันทีที่เปิดดู ไม่ต้อง scroll หรือคลิกกรองเพิ่ม
- โครงสร้างที่ใช้บ่อย คือ KPI card (ตัวเลข+% เปลี่ยนแปลง) + กราฟเทรนด์ + breakdown ย่อย
- ความสม่ำเสมอของสี หน่วย และการปัดเศษทั่วทั้ง dashboard ลดภาระการตีความของผู้อ่าน
- เครื่องมืองานจริง (Power BI, Tableau, Looker Studio) ใช้แนวคิดเดียวกับที่ฝึกด้วย pandas/matplotlib เพียงแค่เปลี่ยนวิธีสร้างจากเขียนโค้ดเป็นลาก-วาง
คำถามสัมภาษณ์
ถ้าต้องออกแบบ dashboard สรุปยอดขายให้ผู้บริหารดูทุกเช้า จะใส่อะไรบ้างและทำไม
เริ่มจาก KPI card ด้านบนสุด: ยอดขายเมื่อวาน/เดือนนี้ พร้อม % เปลี่ยนแปลงเทียบวันก่อน/เดือนก่อน (แสดงทั้งตัวเลขดิบและ % คู่กันเสมอ พร้อมสีเขียว/แดงบอกทิศทาง) เพราะนี่คือคำถามแรกที่ผู้บริหารอยากรู้ เสมอ: "วันนี้ดีขึ้นหรือแย่ลง"
ต่อด้วยกราฟเทรนด์ (เส้น) แสดงยอดขายย้อนหลัง 30-90 วันหรือรายเดือนย้อนหลังทั้งปี เพื่อให้เห็นภาพว่า ตัวเลขล่าสุดอยู่ในบริบทไหน เป็นจุดพีคหรือจุดต่ำผิดปกติหรือเปล่า
แล้วปิดท้ายด้วย breakdown อย่างน้อยหนึ่งมุม เช่น รายได้แยกตามหมวดสินค้าหรือช่องทางขาย (กราฟแท่ง เรียงมากไปน้อย) เพื่อตอบว่าตัวเลขรวมที่เห็นมาจากส่วนไหนเป็นหลัก ถ้ามีที่ว่างอาจเพิ่มอีกหนึ่ง breakdown (เช่น ตามภูมิภาคหรือลูกค้าใหม่/เก่า) แต่จะไม่ยัดเกิน 1 หน้าจอ และรักษาสี/หน่วย/การปัดเศษให้เหมือนกัน ทั้งหน้า เพื่อให้ผู้บริหารกวาดตาดูรอบเดียวแล้วเข้าใจสถานการณ์ได้ทันที ไม่ต้องมาถามเพิ่ม