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 ที่ง่ายและใช้บ่อยที่สุด

  1. เตรียมข้อมูลรายได้รายเดือนของปี 2025 (เฉพาะออเดอร์ที่ status เป็น completed) เหมือนที่เคยทำในบทก่อนๆ

    Python

trend + breakdown ในหน้าเดียว ด้วย plt.subplots

อยากทำ dashboard หนึ่งหน้าที่โชว์ทั้งเทรนด์รายได้รายเดือน (ซ้าย) และรายได้แยกตามหมวดสินค้า (ขวา) พร้อมกัน — นี่คือรูปแบบ "trend + breakdown ข้างกัน" ที่ dashboard จริงใช้บ่อยที่สุด

  1. สร้าง figure แบบ 1 แถว 2 คอลัมน์ด้วย plt.subplots(1, 2) — ช่องซ้ายเป็นกราฟเส้น (เทรนด์) ช่องขวาเป็นกราฟแท่ง (breakdown ตามหมวดสินค้า เรียงมากไปน้อย)

    Python

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

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

ยังไม่ได้ทำ

คำนวณ % เปลี่ยนแปลงยอดขาย (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

1. หลักการสำคัญที่สุดของ dashboard ที่ดีคืออะไร
2. โครงสร้างที่ dashboard งานจริงใช้บ่อยที่สุดประกอบด้วยอะไรบ้าง
3. ทำไมความสม่ำเสมอของสี/หน่วย/การปัดเศษถึงสำคัญทั่วทั้ง dashboard

สรุป

  • dashboard ที่ดีตอบคำถามหลักได้ทันทีที่เปิดดู ไม่ต้อง scroll หรือคลิกกรองเพิ่ม
  • โครงสร้างที่ใช้บ่อย คือ KPI card (ตัวเลข+% เปลี่ยนแปลง) + กราฟเทรนด์ + breakdown ย่อย
  • ความสม่ำเสมอของสี หน่วย และการปัดเศษทั่วทั้ง dashboard ลดภาระการตีความของผู้อ่าน
  • เครื่องมืองานจริง (Power BI, Tableau, Looker Studio) ใช้แนวคิดเดียวกับที่ฝึกด้วย pandas/matplotlib เพียงแค่เปลี่ยนวิธีสร้างจากเขียนโค้ดเป็นลาก-วาง

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

ถ้าต้องออกแบบ dashboard สรุปยอดขายให้ผู้บริหารดูทุกเช้า จะใส่อะไรบ้างและทำไม

เริ่มจาก KPI card ด้านบนสุด: ยอดขายเมื่อวาน/เดือนนี้ พร้อม % เปลี่ยนแปลงเทียบวันก่อน/เดือนก่อน (แสดงทั้งตัวเลขดิบและ % คู่กันเสมอ พร้อมสีเขียว/แดงบอกทิศทาง) เพราะนี่คือคำถามแรกที่ผู้บริหารอยากรู้ เสมอ: "วันนี้ดีขึ้นหรือแย่ลง"

ต่อด้วยกราฟเทรนด์ (เส้น) แสดงยอดขายย้อนหลัง 30-90 วันหรือรายเดือนย้อนหลังทั้งปี เพื่อให้เห็นภาพว่า ตัวเลขล่าสุดอยู่ในบริบทไหน เป็นจุดพีคหรือจุดต่ำผิดปกติหรือเปล่า

แล้วปิดท้ายด้วย breakdown อย่างน้อยหนึ่งมุม เช่น รายได้แยกตามหมวดสินค้าหรือช่องทางขาย (กราฟแท่ง เรียงมากไปน้อย) เพื่อตอบว่าตัวเลขรวมที่เห็นมาจากส่วนไหนเป็นหลัก ถ้ามีที่ว่างอาจเพิ่มอีกหนึ่ง breakdown (เช่น ตามภูมิภาคหรือลูกค้าใหม่/เก่า) แต่จะไม่ยัดเกิน 1 หน้าจอ และรักษาสี/หน่วย/การปัดเศษให้เหมือนกัน ทั้งหน้า เพื่อให้ผู้บริหารกวาดตาดูรอบเดียวแล้วเข้าใจสถานการณ์ได้ทันที ไม่ต้องมาถามเพิ่ม