ndarray
ถ้าเรียกแบบพื้นฐาน np.unique(arr) คืน ndarray ของค่า unique เรียงแล้วครับ แต่ถ้าใส่ return_counts=True หรือ return_index=True จะคืน tuple แทน — ต้อง unpack ก่อนใช้งาน เช่น unique_vals, counts = np.unique(arr, return_counts=True)
| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| ar | array_like | array input ที่ต้องการหาค่า unique — ถ้าไม่ใช่ ndarray จะ flatten ให้อัตโนมัติก่อนประมวลผล | |
| [return_index]ไม่บังคับ | bool | False | ถ้า True จะคืน tuple เพิ่ม array ของ index ตำแหน่งที่เจอค่า unique แต่ละตัวครั้งแรกใน ar |
| [return_inverse]ไม่บังคับ | bool | False | ถ้า True จะคืน tuple เพิ่ม array ที่ map ตำแหน่งใน ar กลับไปยัง index ใน unique array ใช้สร้าง ar คืนจาก unique ได้ |
| [return_counts]ไม่บังคับ | bool | False | ถ้า True จะคืน tuple เพิ่ม array นับว่าค่า unique แต่ละตัวปรากฏกี่ครั้งใน ar — เหมือน COUNTIF ของ Excel |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
np.unique คือฟังก์ชันที่ผมเปรียบเทียบกับ UNIQUE ของ Excel 365 ได้เลยครับ — ใส่ array เข้าไป ได้ค่าที่ไม่ซ้ำกลับมาพร้อมเรียงแล้ว
ฟังก์ชันนี้รับ array อะไรก็ได้ (ตัวเลข, string, หลาย dimension) แล้วคืน ndarray ที่มีแต่ค่า unique เรียงจากน้อยไปมาก (สำหรับตัวเลข) หรือ A–Z (สำหรับ string) โดยอัตโนมัติ ไม่ต้อง sort เพิ่มเองครับ
ที่เจ๋งคือมี parameter เสริมสามตัวที่ผมใช้บ่อยมาก — return_counts=True นับความถี่แต่ละค่าให้เลย (เหมือน COUNTIF ใน Excel), return_index=True บอกว่าค่า unique แต่ละตัวเจอครั้งแรกที่ index ไหน, และ return_inverse=True ให้ mapping กลับว่าตัวเดิม index ไหนคือ unique ตัวที่เท่าไหร่ ✨
ส่วนตัวผมใช้ np.unique บ่อยมากตอนทำ data cleaning เช่นดูว่ามี category อะไรบ้างในคอลัมน์ก่อนจะ process ต่อ หรือนับความถี่ด่วนๆ โดยไม่ต้อง import pandas ครับ แต่ถ้าต้องการผลแบบ DataFrame พร้อม sort ตามความถี่ด้วย ผมจะหยิบ .value_counts() ของ pandas แทน
ผมส่ง array ที่มีค่าซ้ำกันหลายตัวเข้าไป ได้ค่า unique กลับมาเรียงจากน้อยไปมากเลยครับ เหมือนพิมพ์ =UNIQUE(A1:A11) ใน Excel 365 — ค่า 1, 3, 5 ที่ซ้ำกันจะเหลือแค่ตัวเดียว และ array ถูกเรียงให้อัตโนมัติ
เมื่อใส่ return_counts=True ฟังก์ชันจะคืน tuple สองตัว ผม unpack เป็น unique_vals กับ counts ครับ counts ที่ได้คือจำนวนครั้งที่ค่า unique แต่ละตัวปรากฏ เช่น 5 ปรากฏ 3 ครั้ง ใช้ทำ frequency table แทน COUNTIF ใน Excel ได้เลย
np.unique ใช้กับ string ได้ด้วยครับ ผมส่งชื่อประเภทสินค้าที่ซ้ำๆ เข้าไป ได้ชื่อไม่ซ้ำเรียง A–Z กลับมา ใช้ดูว่าข้อมูล category มีค่าอะไรบ้างก่อน process ต่อ — ขั้นตอน data exploration ที่ผมทำเป็นประจำครับ
ผมครอบด้วย len() เพื่อนับว่ามีคะแนนกี่ระดับที่แตกต่างกัน ใช้บ่อยตอนอยากรู้ cardinality ของคอลัมน์ก่อนวางแผน visualization ครับ แบบเดียวกับ COUNTA(UNIQUE(range)) ใน Excel
คล้ายกันมากครับ แต่ต่างกันสองเรื่อง — อย่างแรก np.unique เรียง array ให้อัตโนมัติ แต่ UNIQUE ของ Excel รักษาลำดับของค่าที่ปรากฏครั้งแรก อย่างที่สอง np.unique เอาไว้กับ array 1D เป็นหลัก ถ้าต้องการรักษาลำดับแบบ Excel ผมจะใช้ dict.fromkeys() หรือ pandas .unique() แทนครับ
ต้อง unpack tuple ออกมาก่อนครับ เขียนว่า unique_vals, counts = np.unique(arr, return_counts=True) แล้วใช้งานแยกกัน unique_vals[i] คือค่า unique ตัวที่ i และ counts[i] คือจำนวนครั้งที่ค่านั้นปรากฏ ถ้าลืม unpack แล้วเรียก np.unique(arr, return_counts=True)[1] ตรงๆ ก็ได้เหมือนกันครับ
ได้ครับ แต่มีเรื่องต้องระวัง — โดย default จะ flatten array ก่อนแล้วหาค่า unique ของทุก element รวมกัน ถ้าต้องการหา unique แบบรายแถวให้ใส่ axis=0 เช่น np.unique(arr_2d, axis=0) จะคืนแถวที่ไม่ซ้ำกัน ซึ่งใช้ได้ดีกับ structured data ครับ
ฟังก์ชันที่ผู้เขียนโยงไว้กับ numpy unique จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
np.array คือประตูหน้าบ้านของ NumPy ครับ ผมใช้มันแปลง Python list หรือ nested list ให้กลายเป็น ndarray ที่ทำ vectorized operations ได้ทันที โดยไม่ต้องวน loop เองเลยแม้แต่บรรทัดเดียว
np.sort ผมใช้เรียงค่าใน array ของ numpy จากน้อยไปมาก แล้วคืน array ใหม่ที่เรียงแล้วออกมา (ของเดิมไม่ถูกแตะต้อง) ถ้าใครคุ้นกับ SORT หรือเมนู Data > Sort ใน Excel บอกเลยว่าตัวนี้คือสายเดียวกันเลยครับ
numpy.where ผมใช้เลือกค่าจาก array ตามเงื่อนไขที่กำหนดครับ ถ้าให้เทียบง่ายๆ มันคือ IF ใน Excel นั่นแหละ แต่เก่งกว่าตรงที่ทำงานกับข้อมูลทั้ง array พร้อมกันในทีเดียว แถมยังใส่อาร์กิวเมนต์เดียวเพื่อหา index ที่ตรงเงื่อนไขได้อีกด้วย
Series.value_counts() ใน pandas ผมใช้สำหรับนับว่าแต่ละค่าใน column ปรากฏกี่ครั้ง ได้ผลเรียงจากมากไปน้อยอัตโนมัติ ใช้ดูการกระจายของข้อมูลหรือหาค่าที่พบบ่อยสุดได้เร็วมากครับ
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่