Series.value_counts() ใน pandas ผมใช้สำหรับนับว่าแต่ละค่าใน column ปรากฏกี่ครั้ง ได้ผลเรียงจากมากไปน้อยอัตโนมัติ ใช้ดูการกระจายของข้อมูลหรือหาค่าที่พบบ่อยสุดได้เร็วมากครับ
Series
คืนเป็น Series ที่มี index เป็นค่าที่พบและ values เป็นจำนวนครั้ง (หรือสัดส่วนถ้าใช้ normalize=True) เรียงจากมากไปน้อยครับ เอาไปต่อกับ .plot.bar() ได้เลยเพื่อวาดกราฟ
| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| [normalize]ไม่บังคับ | bool | False | ถ้า True จะคืนสัดส่วน (0.0–1.0) แทนจำนวนครั้ง เช่น 0.5 แทนที่จะเป็น 3 จาก 6 แถว |
| [sort]ไม่บังคับ | bool | True | ถ้า True จะเรียงจากมากไปน้อย ถ้า False จะเรียงตาม index แทน |
| [ascending]ไม่บังคับ | bool | False | ถ้า True จะเรียงจากน้อยไปมากแทน ใช้คู่กับ sort=True |
| [dropna]ไม่บังคับ | bool | True | ถ้า False จะรวมการนับค่า NaN ในผลลัพธ์ด้วย ใช้ตรวจสอบว่ามีข้อมูลหายไปกี่แถว |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
value_counts คือฟังก์ชันที่ผมใช้บ่อยมากตอนสำรวจข้อมูลครั้งแรกครับ 😎
เรียกใช้บน Series (หรือคอลัมน์ใน DataFrame) แล้วได้ Series กลับมาที่มี index เป็นค่าแต่ละประเภท และ values เป็นจำนวนครั้งที่พบ เรียงจากมากไปน้อยโดยอัตโนมัติ ค่า NaN จะถูกข้ามไปเว้นแต่ใส่ dropna=False
ที่เจ๋งคือใส่ normalize=True ได้เลยเพื่อเปลี่ยนจากจำนวนครั้งเป็นสัดส่วน (0.0–1.0) ทำให้เห็น % ของแต่ละกลุ่มทันที ไม่ต้องหารเองครับ ✨
ส่วนตัวผมใช้ value_counts เป็นขั้นตอนแรกเสมอก่อนทำ groupby หรือ filter ครับ เพราะมันบอกได้เร็วว่าข้อมูลมี category อะไรบ้างและสัดส่วนเป็นยังไง ถ้าเจอ category ที่พิมพ์ผิดนิดหน่อยเช่น ‘Bangkok’ กับ ‘bangkok’ ก็จะเห็นทันทีเลย
ผมส่ง Series ของชื่อเมือง 6 ค่าเข้าไปครับ ได้ผลเรียงจากมากไปน้อยทันที Bangkok พบ 3 ครั้ง, Chiang Mai 2 ครั้ง, Phuket 1 ครั้ง เห็นภาพการกระจายได้เลย
ใส่ normalize=True ได้สัดส่วนออกมาแทนครับ Bangkok คิดเป็น 0.5 (50%), Chiang Mai 0.333 (33.3%), Phuket 0.167 (16.7%) ไม่ต้องหารเองเลย
ใส่ ascending=True เพื่อกลับทิศการเรียงครับ ได้ Phuket (1), Chiang Mai (2), Bangkok (3) — ใช้หา category ที่พบน้อยสุดเพื่อดูว่ามีข้อมูลเพียงพอหรือเปล่า
ต้องเลือก column ก่อนครับ เพราะ value_counts เป็น method ของ Series ไม่ใช่ DataFrame เช่น df['city'].value_counts() ถ้า pandas เวอร์ชัน 1.1+ มี df.value_counts() ระดับ DataFrame แต่มันนับ combination ของทุก column แทน ไม่ค่อยได้ใช้เท่าไหร่
ต่อด้วย .head(3) ได้เลยครับ เช่น df['city'].value_counts().head(3) ได้ 3 เมืองที่พบบ่อยสุด ผมใช้แบบนี้ตอนข้อมูลมี category เยอะมากแต่อยากโฟกัสแค่อันดับต้นๆ
ฟังก์ชันที่ผู้เขียนโยงไว้กับ pandas value_counts จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
df.describe() ใน pandas ผมใช้สำหรับดูสถิติพื้นฐานของข้อมูลในทุกคอลัมน์พร้อมกันในคำสั่งเดียว ทั้ง count, mean, std, min, max และ percentile ช่วยให้เข้าใจภาพรวมของชุดข้อมูลได้เร็วมากก่อนเริ่มวิเคราะห์จริงครับ
groupby ใน pandas ผมใช้สำหรับจัดกลุ่มข้อมูลใน DataFrame แล้วคำนวณค่าสรุปในแต่ละกลุ่ม เช่น หาผลรวม ค่าเฉลี่ย หรือค่าสถิติต่างๆ ตามหมวดหมู่ที่กำหนด ถ้าใครเคยใช้ PivotTable ใน Excel มาก่อน บอกเลยว่าตัวนี้คือเครื่องมือสายเดียวกันเลยครับ
nunique ใน pandas ผมใช้นับว่าในแต่ละคอลัมน์มีค่าที่ไม่ซ้ำกันกี่ตัว เหมือนกับการ Remove Duplicates ใน Excel แล้วนับจำนวนที่เหลือ หรือนับ unique ด้วย COUNTA นั่นแหละครับ เหมาะมากตอนอยากรู้ว่าข้อมูลมีกี่ลูกค้า กี่จังหวัด หรือกี่ประเภท
pivot_table ใน pandas ผมใช้สำหรับสร้างตารางสรุปข้อมูลแบบ PivotTable เหมือนใน Excel เลยครับ — กำหนดได้ว่าจะเอาคอลัมน์ไหนเป็น rows, columns และจะรวมค่าด้วยฟังก์ชันอะไร ทั้งหมดจบในคำสั่งเดียว
np.unique ใช้หาค่าที่ไม่ซ้ำกันใน array แล้วเรียงจากน้อยไปมากให้อัตโนมัติ คล้ายกับฟังก์ชัน UNIQUE ใน Excel 365 มากครับ ยังนับความถี่แต่ละค่าได้ด้วยถ้าใส่ return_counts=True
drop_duplicates ใน pandas ผมใช้สำหรับลบแถวข้อมูลที่ซ้ำกันออกจาก DataFrame เหมือนกับปุ่ม Remove Duplicates ใน Excel เลยครับ แต่ยืดหยุ่นกว่าตรงที่เราเลือกได้ว่าจะดูซ้ำจากคอลัมน์ไหน และจะเก็บแถวแรกหรือแถวสุดท้ายไว้
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่