ในบรรดาวิชาเลขที่เรียนกันตอนคณิตศาสตร์มัธยมปลายเป็นสิ่งที่ตอนเรียน อาจารย์ไม่สามารถบอกได้ว่าเรียนมันไปทำไมนะ เอาไปใช้ทำอะไร เลยไม่สนใจเท่าไหร่ เค้าใให้เรียนสลับ จัดรูปแบบอะไรไป ก็ท่องวิธีจำ วิธีทำไปงั้น ๆ ละ จนเขียนโปรแกรมมาได้ซักพักจึงมารู้ว่ามันคือ Pivot / Unpivot (ในระบบฐานข้อมูลและ Excel) ที่คนเรียนเลขเค้าใช้คำว่า Matrix Reshaping (การปรับรูปร่างเมทริกซ์), Vectorization (แตกให้เป็นแถวเดียวยาว ๆ)
ตารางแนวนอนและตารางแนวตั้ง
ตัวอย่างตาราง permission ที่เก็บแบบแนวนอน ที่มี column id, program_id, create, read, update, delete, {สิทธิ์อื่น ๆ } ต่อไปทางขวาเรื่อย ๆ ถึงเรียกว่าตารางแนวนอน เป็นตารางแนวตั้ง เช่น ตาราง permission ที่เก็บข้อมูลที่มี column id, program_id, permission (เก็บ create, read, update, delete, {สิทธิ์อื่น ๆ }) เป็นอีก rows เพิ่มขึ้นเรื่อย ๆ เรียกว่าตารางแนวตั้ง
ตารางแนวนอน (Wide)
| id | program_id | create | read | update | delete | {สิทธิ์อื่น ๆ } |
| 1 | p1 | / | / | / | ||
| 2 | p2 | / | / | / | ||
| 3 | p3 | / | / | / |
ตารางแนวตั้ง (Long / Tall)
| id | program_id | permission |
|---|---|---|
| 1 | p1 | create |
| 2 | p1 | read |
| 3 | p1 | update |
| 4 | p1 | delete |
| 5 | p2 | create |
| 6 | p2 | read |
| 7 | p2 | delete |
| 8 | p3 | create |
| 9 | p3 | read |
| 10 | p3 | สิทธิ์อื่น ๆ } |
การเปรียบเทียบตารางแนวนอนและตารางแนวตั้ง
| หัวข้อเปรียบเทียบ | ตารางแนวนอน (Wide) | ตารางแนวตั้ง (Long / Tall) |
| ลักษณะโครงสร้าง | ข้อมูลแต่ละประเภทจะแยกเป็นคอลัมน์ชัดเจน (เช่น เลข 1-8 อยู่คนละช่องในแถวเดียว) | ข้อมูลจะถูก “กอง” ลงมาในคอลัมน์เดียวกัน แต่ระบุตำแหน่งด้วย Index (เช่น k) |
| การอ่านของมนุษย์ | อ่านง่ายมาก มองแวบเดียวเห็นภาพรวมทั้งหมดเหมือนในรูปภาพที่คุณส่งมา | อ่านยากกว่า เพราะต้องเลื่อนลงไปดูข้อมูลที่ยาวขึ้น |
| การประมวลผล (Machine) | ยากต่อการทำ Aggregation หรือ Filter เมื่อข้อมูลมีจำนวนคอลัมน์มากเกินไป | ดีเยี่ยม สำหรับการทำ Data Analysis, SQL Queries และการทำ Machine Learning |
| การเพิ่มข้อมูล | ต้องเพิ่มคอลัมน์ใหม่ (Alter Table) ซึ่งทำได้ยากในระบบฐานข้อมูลใหญ่ๆ | เพิ่มแค่แถวใหม่ (Append Row) ซึ่งทำได้ง่ายและไม่กระทบโครงสร้างตาราง |
| พื้นที่จัดเก็บ | อาจมีช่องว่าง (Null) เยอะถ้าข้อมูลไม่ครบในทุกคอลัมน์ | ประหยัดพื้นที่กว่าในกรณีข้อมูลแบบ Sparse เพราะจะเก็บเฉพาะแถวที่มีค่าจริง |
Matrix Reshaping (การปรับรูปร่างเมทริกซ์)
ในทางคณิตศาสตร์เชิงคำนวณหรือการเขียนโปรแกรม (เช่น NumPy หรือ R) การเปลี่ยนมิติของ Array จาก 2×8 (2 แถว 8 คอลัมน์) ไปเป็น 8×2 (8 แถว 2 คอลัมน์) โดยที่ลำดับของตัวเลขยังเรียง 1, 2, 3… เหมือนเดิม เรียกว่าการ Reshape ครับ
Transposition (การสลับเปลี่ยน) – แบบมีเงื่อนไข
ปกติการ Transpose (AT) คือการเปลี่ยนแถวเป็นคอลัมน์ ซึ่งจะทำให้ตัวเลขเปลี่ยนตำแหน่งไป เช่น แถวแรก (1-8) จะกลายเป็นคอลัมน์แรกทั้งหมด
- แต่ในรูปของ database: ไม่ใช่การ Transpose แบบมาตรฐาน เพราะคุณต้องการให้มัน “ไหล” ต่อกัน (Row-major order)
- แต่ในรูปของคุณ: ไม่ใช่การ Transpose แบบมาตรฐาน เพราะคุณต้องการให้มัน “ไหล” ต่อกัน (Row-major order)
Pivot / Unpivot (ในระบบฐานข้อมูลและ Excel)
การเปลี่ยนจากแนวขวาง (Wide Format) มาเป็นแนวตั้ง (Long Format) เรียกว่าการ Unpivot หรือ Melting ครับ
เมื่อไหร่ควรใช้แบบไหน?
- ตารางแนวนอน (Wide Format)
- การนำเสนอ (Reporting): ใช้สำหรับทำ Dashboard หรือ Report ให้คนดู เพราะเห็นความสัมพันธ์ของข้อมูลในบรรทัดเดียว
- Data Entry: เหมาะสำหรับฟอร์มกรอกข้อมูลที่ผู้ใช้ต้องกรอกข้อมูลหลายหัวข้อพร้อมกัน
- ตารางแนวตั้ง (Long Format)
- Database Design: เหมาะสำหรับการออกแบบตารางใน SQL Server หรือ MySQL โดยเฉพาะตารางประเภท Transaction หรือ Permissions (RBAC)
- Data Visualization: โปรแกรมอย่าง Tableau, Power BI หรือ Library อย่าง Matplotlib จะทำงานได้เร็วและยืดหยุ่นกว่าเมื่อข้อมูลอยู่ในรูปแบบแนวตั้ง
- การทำ Reshaping: เหมือนใน Algorithm ที่เราคุยกัน การเปลี่ยนเป็นแนวตั้งช่วยให้เราจัดการลำดับ (Index k) ได้แม่นยำกว่า
อ่านเพิ่มเติม
