วิธีค้นหาค่าเฉลี่ย ค่ามัธยฐาน และโหมดใน Python
เผยแพร่แล้ว: 2021-06-22ค่าเฉลี่ย ค่ามัธยฐาน และโหมด เป็นหัวข้อพื้นฐานของสถิติ คุณสามารถคำนวณได้อย่างง่ายดายใน Python ทั้งแบบมีและไม่ใช้ไลบรารีภายนอก
ทั้งสามนี้เป็นตัวชี้วัดหลักของแนวโน้มจากส่วนกลาง แนวโน้มจากส่วนกลางทำให้เราทราบค่า "ปกติ" หรือ "ค่าเฉลี่ย" ของชุดข้อมูล หากคุณเพิ่งเริ่มต้นกับวิทยาศาสตร์ข้อมูล นี่คือบทช่วยสอนที่เหมาะสำหรับคุณ

ในตอนท้ายของบทช่วยสอนนี้ คุณจะ:
- เข้าใจแนวคิดของค่าเฉลี่ย ค่ามัธยฐาน และโหมด
- สามารถสร้างฟังก์ชันค่ากลาง ค่ามัธยฐาน และโหมดของคุณเองได้ใน Python
- ใช้ประโยชน์จากโมดูล สถิติ ของ Python เพื่อเริ่มต้นการใช้การวัดเหล่านี้อย่างรวดเร็ว
หากคุณต้องการแบบฝึกหัดต่อไปนี้ในเวอร์ชันที่ดาวน์โหลดได้ โปรดตรวจสอบที่เก็บ GitHub
มาดูวิธีการคำนวณค่าเฉลี่ย ค่ามัธยฐาน และโหมดต่างๆ กัน
การคำนวณค่าเฉลี่ยใน Python
ค่าเฉลี่ยหรือค่าเฉลี่ยเลขคณิตเป็นการวัดแนวโน้มศูนย์กลางที่ใช้มากที่สุด
จำไว้ว่าแนวโน้มศูนย์กลางคือค่าปกติของชุดข้อมูล
ชุดข้อมูลคือการรวบรวมข้อมูล ดังนั้นชุดข้อมูลใน Python สามารถเป็นโครงสร้างข้อมูลในตัวต่อไปนี้ได้:
- รายการ ทูเพิล และเซต: คอลเลกชั่นของอ็อบเจกต์
- สตริง: ชุดอักขระ
- พจนานุกรม: ชุดของคู่คีย์-ค่า
หมายเหตุ: เมื่อมีโครงสร้างข้อมูลอื่นๆ ใน Python เช่น คิวหรือสแต็ก เราจะใช้เฉพาะโครงสร้างที่มีอยู่แล้วภายในเท่านั้น
เราสามารถคำนวณค่าเฉลี่ยโดยการเพิ่มค่าทั้งหมดของชุดข้อมูลและหารผลลัพธ์ด้วยจำนวนค่า ตัวอย่างเช่น ถ้าเรามีรายการตัวเลขดังต่อไปนี้:
[1, 2, 3, 4, 5, 6]ค่าเฉลี่ยหรือค่าเฉลี่ยจะเท่ากับ 3.5 เนื่องจากผลรวมของรายการคือ 21 และความยาวเท่ากับ 6 ยี่สิบเอ็ดหารด้วยหกได้ 3.5 คุณสามารถทำการคำนวณนี้ด้วยการคำนวณด้านล่าง:
(1 + 2 + 3 + 4 + 5 + 6) / 6 = 21ในบทช่วยสอนนี้ เราจะใช้ผู้เล่นของทีมบาสเก็ตบอลเป็นข้อมูลตัวอย่าง
การสร้างฟังก์ชันค่าเฉลี่ยแบบกำหนดเอง
เริ่มต้นด้วยการคำนวณอายุเฉลี่ย (เฉลี่ย) ของผู้เล่นในทีมบาสเก็ตบอล ชื่อทีมคือ “Pythonic Machines”
pythonic_machine_ages = [19, 22, 34, 26, 32, 30, 24, 24] def mean(dataset): return sum(dataset) / len(dataset) print(mean(pythonic_machine_ages))แบ่งรหัสนี้:
- “pythonic_machine_ages” คือรายการอายุของผู้เล่นบาสเก็ตบอล
- เรากำหนดฟังก์ชัน mean() ซึ่งจะคืนค่าผลรวมของชุดข้อมูลที่กำหนดหารด้วยความยาว
- ฟังก์ชัน sum() คืนค่าผลรวมทั้งหมด (แดกดัน) ของค่าที่ทำซ้ำได้ ในกรณีนี้คือรายการ ลองส่ง dataset เป็นอาร์กิวเมนต์ มันจะคืนค่า 211
- ฟังก์ชัน len() ส่งคืนค่าความยาวของ iterable หากคุณส่งชุดข้อมูลไปให้ คุณจะได้ 8
- เราส่งต่ออายุของทีมบาสเก็ตบอลไปยังฟังก์ชัน mean() และพิมพ์ผลลัพธ์ออกมา
หากคุณตรวจสอบผลลัพธ์ คุณจะได้รับ:
26.375 # Because 211 / 8 = 26.375ผลลัพธ์นี้แสดงถึงอายุเฉลี่ยของผู้เล่นทีมบาสเก็ตบอล โปรดทราบว่าตัวเลขไม่ปรากฏในชุดข้อมูล แต่อธิบายอายุของผู้เล่นส่วนใหญ่ได้อย่างแม่นยำ
ใช้ค่าเฉลี่ย () จาก Python Statistic Module
การคำนวณหาแนวโน้มจากส่วนกลางเป็นการดำเนินการทั่วไปสำหรับนักพัฒนาส่วนใหญ่ นั่นเป็นเพราะว่าโมดูลสถิติของ Python มีฟังก์ชันที่หลากหลายในการคำนวณ พร้อมด้วยหัวข้อสถิติพื้นฐานอื่นๆ
เนื่องจากเป็นส่วนหนึ่งของไลบรารีมาตรฐาน Python คุณจึงไม่จำเป็นต้องติดตั้งแพ็คเกจภายนอกด้วย PIP
นี่คือวิธีที่คุณใช้โมดูลนี้:
from statistics import mean pythonic_machine_ages = [19, 22, 34, 26, 32, 30, 24, 24] print(mean(pythonic_machine_ages))ในโค้ดด้านบนนี้ คุณเพียงแค่ต้องนำเข้าฟังก์ชัน mean() จากโมดูล สถิติ และส่งชุดข้อมูลไปเป็นอาร์กิวเมนต์ สิ่งนี้จะส่งคืนผลลัพธ์เดียวกันกับฟังก์ชันที่กำหนดเองที่เรากำหนดไว้ในส่วนก่อนหน้า:
26.375ตอนนี้คุณเข้าใจแนวคิดเรื่อง ค่าเฉลี่ยแล้ว มาต่อด้วยการวัด ค่ามัธยฐาน กัน
การหาค่ามัธยฐานใน Python
ค่ามัธยฐานคือ ค่ากลาง ของชุดข้อมูลที่จัดเรียง ใช้ — อีกครั้ง — เพื่อให้ค่า "ทั่วไป" ของประชากรที่กำหนด
ในการเขียนโปรแกรม เราสามารถกำหนดค่ามัธยฐานเป็นค่าที่แยกลำดับออกเป็นสองส่วน — ครึ่งล่างและครึ่งบน —
ในการคำนวณค่ามัธยฐาน อันดับแรก เราต้องเรียงลำดับชุดข้อมูล เราสามารถทำได้โดยใช้อัลกอริธึมการเรียงลำดับหรือใช้ฟังก์ชัน sorted() ใน ตัว ขั้นตอนที่สองคือการพิจารณาว่าความยาวของชุดข้อมูลเป็นเลขคี่หรือคู่ ขึ้นอยู่กับกระบวนการต่อไปนี้:
- คี่: ค่ามัธยฐานคือค่ากลางของชุดข้อมูล
- คู่: ค่ามัธยฐานเป็นผลรวมของค่ากลางสองค่าหารด้วยสอง
ต่อด้วยชุดข้อมูลทีมบาสเก็ตบอล มาคำนวณความสูงมัธยฐานของผู้เล่นเป็นเซนติเมตรกัน:
[181, 187, 196, 196, 198, 203, 207, 211, 215] # Since the dataset is odd, we select the middle value median = 198อย่างที่คุณเห็น เนื่องจากความยาวของชุดข้อมูลเป็นเลขคี่ เราจึงใช้ค่ากลางเป็นค่ามัธยฐานได้ อย่างไรก็ตาม จะเกิดอะไรขึ้นหากผู้เล่นเพิ่งเกษียณอายุ?
เราจะต้องคำนวณค่ามัธยฐานโดยใช้ค่ากลางสองค่าของชุดข้อมูล
[181, 187, 196, 198, 203, 207, 211, 215] # We select the two middle values, and divide them by 2 median = (198 + 203) / 2 median = 200.5การสร้างฟังก์ชันมัธยฐานแบบกำหนดเอง
นำแนวคิดข้างต้นไปใช้ในฟังก์ชัน Python
จำสามขั้นตอนที่เราต้องปฏิบัติตามเพื่อให้ได้ค่ามัธยฐานของชุดข้อมูล:
- จัดเรียงชุดข้อมูล: เราสามารถทำได้ด้วยฟังก์ชัน sorted()
- ตรวจสอบว่าเป็นเลขคี่หรือคู่: เราทำได้โดยหาความยาวของชุดข้อมูลและใช้ตัวดำเนินการโมดูโล (%)
- คืนค่ามัธยฐานตามแต่ละกรณี:
- คี่: ส่งคืนค่ากลาง
- คู่: ส่งกลับค่าเฉลี่ยของค่ากลางสองค่า
ซึ่งจะส่งผลให้ฟังก์ชันต่อไปนี้:
pythonic_machines_heights = [181, 187, 196, 196, 198, 203, 207, 211, 215] after_retirement = [181, 187, 196, 198, 203, 207, 211, 215] def median(dataset): data = sorted(dataset) index = len(data) // 2 # If the dataset is odd if len(dataset) % 2 != 0: return data[index] # If the dataset is even return (data[index - 1] + data[index]) / 2การพิมพ์ผลลัพธ์ของชุดข้อมูลของเรา:
print(median(pythonic_machines_heights)) print(median(after_retirement))เอาท์พุท:
198 200.5สังเกตว่าเราสร้างตัวแปร ข้อมูล ที่ชี้ไปยังฐานข้อมูลที่เรียงลำดับเมื่อเริ่มต้นฟังก์ชันอย่างไร แม้ว่ารายการด้านบนจะถูกจัดเรียง แต่เราต้องการสร้างฟังก์ชันที่ใช้ซ้ำได้ ดังนั้นการเรียงลำดับชุดข้อมูลทุกครั้งที่เรียกใช้ฟังก์ชัน
ดัชนีจะจัด เก็บค่ากลาง — หรือค่ากลางบน — ของชุดข้อมูล โดยใช้ตัวดำเนินการ หารจำนวนเต็ม ตัวอย่างเช่น ถ้าเราส่งรายการ “pythonic_machine_heights” มันจะมีค่าเท่ากับ 4

โปรดจำไว้ว่าในดัชนีลำดับ Python เริ่มต้นที่ศูนย์ นั่นเป็นเพราะเราสามารถส่งคืนดัชนีกลางของรายการด้วยการหารจำนวนเต็ม
จากนั้นเราจะตรวจสอบว่าความยาวของชุดข้อมูลเป็นเลขคี่หรือไม่โดยการเปรียบเทียบผลลัพธ์ของการดำเนินการแบบโมดูโลกับค่าใดๆ ที่ไม่ใช่ศูนย์ หากเงื่อนไขเป็นจริง เราจะคืนค่าองค์ประกอบตรงกลาง เช่น รายการ "pythonic_machine_heights":
>>> pythonic_machine_heights[4] # 198ในทางกลับกัน หากชุดข้อมูลเป็นคู่ เราจะคืนค่าผลรวมของค่ากลางหารด้วยสอง โปรดทราบว่า data[index -1] ให้จุดกึ่งกลางล่างของชุดข้อมูล ในขณะที่ data[index] ให้จุดกึ่งกลางบนแก่เรา
การใช้ค่ามัธยฐาน () จาก Python Statistic Module
วิธีนี้ง่ายกว่ามากเพราะเรากำลังใช้ฟังก์ชันที่มีอยู่แล้วจากโมดูลสถิติ
โดยส่วนตัวแล้ว ถ้ามีบางอย่างที่กำหนดไว้สำหรับฉัน ฉันจะใช้มันเพราะว่า DRY — อย่าพูดซ้ำ — หลักการ (ในกรณีนี้ อย่าใช้รหัสของผู้อื่นซ้ำ)
คุณสามารถคำนวณค่ามัธยฐานของชุดข้อมูลก่อนหน้าด้วยรหัสต่อไปนี้:
from statistics import median pythonic_machines_heights = [181, 187, 196, 196, 198, 203, 207, 211, 215] after_retirement = [181, 187, 196, 198, 203, 207, 211, 215] print(median(pythonic_machines_heights)) print(median(after_retirement))เอาท์พุท:
198 200.5การคำนวณโหมดใน Python
โหมดนี้เป็นค่าที่พบบ่อยที่สุดในชุดข้อมูล เราคิดว่าเป็นกลุ่ม "ยอดนิยม" ของโรงเรียนที่อาจเป็นตัวแทนของมาตรฐานสำหรับนักเรียนทุกคน
ตัวอย่างของโหมดอาจเป็นยอดขายรายวันของร้านค้าเทคโนโลยี โหมดของชุดข้อมูลนั้นจะเป็นผลิตภัณฑ์ที่ขายมากที่สุดในแต่ละวัน
['laptop', 'desktop', 'smartphone', 'laptop', 'laptop', 'headphones']อย่างที่คุณเข้าใจได้ โหมดของชุดข้อมูลข้างต้นคือ "แล็ปท็อป" เนื่องจากเป็นค่าที่ใช้บ่อยที่สุดในรายการ
สิ่งที่ยอดเยี่ยมเกี่ยวกับโหมดคือชุดข้อมูลจะต้องไม่เป็นตัวเลข ตัวอย่างเช่น เราสามารถทำงานกับสตริงได้
มาวิเคราะห์ยอดขายของอีกวันกัน:
['mouse', 'camera', 'headphones', 'usb', 'headphones', 'mouse']ชุดข้อมูลด้านบนมีสองโหมด: "เมาส์" และ "หูฟัง" เนื่องจากทั้งคู่มีความถี่สองโหมด ซึ่งหมายความว่าเป็นชุดข้อมูลหลายรูปแบบ
จะเกิดอะไรขึ้นหากเราไม่พบโหมดในชุดข้อมูลดังที่แสดงด้านล่าง
['usb', 'camera', 'smartphone', 'laptop', 'TV']นี่เรียกว่าการแจกแจงแบบสม่ำเสมอ โดยพื้นฐานแล้ว หมายความว่าไม่มีโหมดในชุดข้อมูล
ตอนนี้คุณเข้าใจแนวคิดของโหมดอย่างรวดเร็วแล้ว มาคำนวณมันใน Python
การสร้างฟังก์ชันโหมดกำหนดเอง
เราสามารถนึกถึงความถี่ของค่าเป็นคู่คีย์-ค่า หรืออีกนัยหนึ่งคือ พจนานุกรม Python
สรุปการเปรียบเทียบบาสเก็ตบอล เราสามารถใช้ชุดข้อมูลสองชุดเพื่อทำงาน: คะแนนต่อเกม และผู้สนับสนุนรองเท้าผ้าใบของผู้เล่นบางคน
ในการค้นหาโหมดก่อนอื่น เราต้องสร้างพจนานุกรมความถี่โดยมีค่าแต่ละค่าในชุดข้อมูล จากนั้นจึงหาความถี่สูงสุด และคืนค่าองค์ประกอบทั้งหมดด้วยความถี่นั้น
มาแปลสิ่งนี้เป็นรหัส:
points_per_game = [3, 15, 23, 42, 30, 10, 10, 12] sponsorship = ['nike', 'adidas', 'nike', 'jordan', 'jordan', 'rebook', 'under-armour', 'adidas'] def mode(dataset): frequency = {} for value in dataset: frequency[value] = frequency.get(value, 0) + 1 most_frequent = max(frequency.values()) modes = [key for key, value in frequency.items() if value == most_frequent] return modesตรวจสอบผลลัพธ์ที่ส่งผ่านสองรายการเป็นอาร์กิวเมนต์:
print(mode(points_per_game)) print(mode(sponsorship))เอาท์พุท:
[10] ['nike', 'adidas', 'jordan']อย่างที่คุณเห็น คำสั่งการพิมพ์ครั้งแรกทำให้เรามีโหมดเดียว ในขณะที่คำสั่งที่สองส่งคืนโหมดหลายโหมด
อธิบายโค้ดด้านบนให้ลึกซึ้งยิ่งขึ้น:
- เราประกาศพจนานุกรม ความถี่
- เราวนซ้ำชุดข้อมูลเพื่อสร้างฮิสโตแกรม — คำทางสถิติสำหรับชุดตัวนับ (หรือความถี่) —
- หากพบคีย์ในพจนานุกรม มันจะเพิ่มคีย์หนึ่งเข้าไปในค่า
- หากไม่พบ เราจะสร้างคู่คีย์-ค่าที่มีค่าหนึ่ง
- ที่เก็บตัวแปร most_frequent — แดกดัน — ค่าที่ใหญ่ที่สุด (ไม่ใช่คีย์) ของพจนานุกรมความถี่
- เราคืนค่าตัวแปร โหมด ซึ่งประกอบด้วยคีย์ทั้งหมดในพจนานุกรม ความถี่ที่ มีความถี่มากที่สุด
สังเกตว่าการตั้งชื่อตัวแปรมีความสำคัญเพียงใดในการเขียนโค้ดที่อ่านได้
การใช้ mode() และ multimode() จาก Python Statistic Module
โมดูลสถิติช่วยให้เราดำเนินการสถิติพื้นฐานได้อย่างรวดเร็วอีกครั้ง
เราสามารถใช้สองฟังก์ชัน: mode() และ multimode()
from statistics import mode, multimode points_per_game = [3, 15, 23, 42, 30, 10, 10, 12] sponsorship = ['nike', 'adidas', 'nike', 'jordan', 'jordan', 'rebook', 'under-armour', 'adidas']โค้ดด้านบนนำเข้าทั้งสองฟังก์ชันและกำหนดชุดข้อมูลที่เราใช้งานอยู่
ข้อแตกต่างเล็กน้อยมีดังต่อไปนี้: ฟังก์ชัน mode() จะคืนค่าโหมดแรกที่พบ ในขณะที่ multimode() จะคืนค่ารายการที่มีค่าความถี่บ่อยที่สุดในชุดข้อมูล
print(mode(points_per_game)) print(mode(sponsorship))เอาท์พุท:
10 nikeหมายเหตุ: ใน Python 3.8 หรือสูงกว่า ฟังก์ชัน mode() จะคืนค่าโหมดแรกที่พบ หากคุณมีเวอร์ชันเก่ากว่า คุณจะได้รับ StatisticsError
การใช้ฟังก์ชัน มัลติโหมด () :
print(multimode(points_per_game)) print(multimode(sponsorship))เอาท์พุท:
[10] ['nike', 'adidas', 'jordan']เพื่อสรุป
ขอแสดงความยินดี ! หากคุณติดตามจนถึงตอนนี้ คุณจะได้เรียนรู้วิธีคำนวณค่าเฉลี่ย ค่ามัธยฐาน และโหมด ซึ่งเป็นการวัดแนวโน้มจากศูนย์กลางหลัก
แม้ว่าคุณสามารถกำหนดฟังก์ชันแบบกำหนดเองของคุณเพื่อค้นหาค่ากลาง ค่ามัธยฐาน และโหมด ขอแนะนำให้ใช้โมดูลสถิติ เนื่องจากเป็นส่วนหนึ่งของไลบรารีมาตรฐาน และคุณไม่จำเป็นต้องติดตั้งอะไรเลยเพื่อเริ่มใช้งาน
ถัดไป อ่านบทนำที่เป็นมิตรต่อการวิเคราะห์ข้อมูลใน Python
