np.median ใน NumPy ผมใช้สำหรับหาค่ามัธยฐาน (median) ของข้อมูลใน array เหมือนฟังก์ชัน MEDIAN ใน Excel เลยครับ จุดเด่นคือทนต่อ outlier ได้ดีกว่า np.mean มาก เพราะค่าสุดขั้วไม่ดึงให้ผลลัพธ์เบี้ยวครับ
np.median(a, axis)
np.median(a, axis)
float64
คืนเป็น np.float64 ครับเมื่อ input เป็น array 1 มิติทั่วไป ถ้าระบุ axis จะได้ ndarray แทน เช่น axis=0 บน matrix 3×3 ได้ array 3 ตัว ข้อสังเกตคือ median จะเป็น float เสมอแม้ข้อมูล input จะเป็น integer เพราะอาจต้องเฉลี่ยสองตัวกลางครับ
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| a | array_like | Yes | array หรือ list ที่ต้องการหาค่ามัธยฐาน เช่น [1, 2, 3] หรือ np.array([[1,2],[3,4]]) | |
| axis | int | None | Optional | None | แกนที่จะคำนวณ None=หา median ทุกตัวรวมกัน, axis=0=คำนวณตามแนวแถว (ได้ค่าต่อคอลัมน์), axis=1=คำนวณตามแนวคอลัมน์ (ได้ค่าต่อแถว) |
| overwrite_input | bool | Optional | False | ถ้า True อนุญาตให้แก้ไข array ต้นฉบับระหว่างคำนวณ ประหยัด memory แต่ array เดิมจะถูกเปลี่ยนครับ ส่วนใหญ่ไม่ต้องแตะ |
| keepdims | bool | Optional | False | ถ้า True จะรักษา dimension เดิมไว้ในผลลัพธ์ ใช้ตอนต้องการ broadcast กลับไปยัง array ต้นฉบับได้เลย |
np.median(arr)np.median(arr)
30.0
np.median(arr_even)np.median(arr_even)
2.5
np.median(sal)np.median(sal)
31000.0
np.median(scores, axis=0)np.median(scores, axis=0)
[75. 85. 70.]
mean คือค่าเฉลี่ย (ผลรวม/จำนวนตัว) ส่วน median คือค่ากลาง (ตัวอยู่กึ่งกลางเมื่อเรียงลำดับ) ครับ ผมเลือกตามลักษณะข้อมูล ถ้าข้อมูลกระจายสมมาตร ไม่มี outlier เช่น ผลการทดลองห้องแล็บ ใช้ mean ดีกว่าเพราะใช้ข้อมูลทุกตัว แต่ถ้าข้อมูลมีโอกาส skewed หรือมีค่าผิดปกติ เช่น เงินเดือน ราคาบ้าน เวลาตอบสนอง ผมเลือก median ก่อนเลยครับ ใน Excel ก็เป็นแบบนี้เหมือนกัน AVERAGE vs MEDIAN
ถ้าข้อมูลกระจายสมมาตร (เช่น normal distribution) mean กับ median จะใกล้เคียงกันมากครับ ลอง np.array([1,2,3,4,5]) ได้ mean=3.0 และ median=3.0 เหมือนกันเลย แต่พอข้อมูล skewed หรือมี outlier ทั้งสองจะแยกห่างกันชัดเจน ผมใช้การเปรียบ mean vs median เป็น quick check ว่าข้อมูลมี outlier หรือ skew ไหมครับ ถ้าต่างกันเยอะน่าสงสัยว่ามีค่าผิดปกติแน่นอน
เพราะเมื่อจำนวนตัวเลขเป็นคู่ NumPy ต้องเฉลี่ยสองตัวกลางครับ เช่น [1,2,3,4] ได้ (2+3)/2 = 2.5 ซึ่งเป็น float จะคืน integer ไม่ได้ NumPy เลยใช้ float64 เป็น default ทุกกรณีเพื่อความสม่ำเสมอครับ เทียบกับ MEDIAN ใน Excel ก็เป็นแบบเดียวกันเลย
np.median คำนวณค่ามัธยฐาน ซึ่งคือค่ากลางเมื่อเรียงข้อมูลจากน้อยไปมากครับ ถ้าจำนวนตัวเลขเป็นคี่จะได้ตัวกลางพอดี แต่ถ้าเป็นคู่จะได้ค่าเฉลี่ยของสองตัวกลาง เช่น [1, 2, 3, 4] ได้ (2+3)/2 = 2.5 ตรงนี้เหมือน MEDIAN ใน Excel ทุกอย่างเลยครับ
ที่เจ๋งคือ median ทนต่อ outlier ได้ดีกว่า mean มาก ลองนึกภาพเงินเดือนพนักงาน 9 คนอยู่ที่ 25,000-35,000 บาท แต่มี CEO คนเดียวเงินเดือน 500,000 บาท ค่า mean จะพุ่งขึ้นไปสูงทันที ทำให้ภาพรวมผิดเพี้ยน แต่ค่า median ยังอยู่แถวๆ 30,000 เหมือนเดิม สะท้อนความเป็นจริงของพนักงานส่วนใหญ่ได้ดีกว่าครับ ✨
ส่วนตัวผมเลือกใช้ median แทน mean ทุกครั้งที่ข้อมูลมีโอกาสมี outlier เช่น ราคา ระยะเวลา หรือข้อมูลที่คนส่วนน้อยอาจมีค่าสูงมากผิดปกติ ถ้าต้องการข้ามค่า NaN ให้ใช้ np.nanmedian แทนครับ 😎