วิธีค้นหาค่าเฉลี่ย ค่ามัธยฐาน และโหมดใน Python

เผยแพร่แล้ว: 2021-06-22

ค่าเฉลี่ย ค่ามัธยฐาน และโหมด เป็นหัวข้อพื้นฐานของสถิติ คุณสามารถคำนวณได้อย่างง่ายดายใน Python ทั้งแบบมีและไม่ใช้ไลบรารีภายนอก

ทั้งสามนี้เป็นตัวชี้วัดหลักของแนวโน้มจากส่วนกลาง แนวโน้มจากส่วนกลางทำให้เราทราบค่า "ปกติ" หรือ "ค่าเฉลี่ย" ของชุดข้อมูล หากคุณเพิ่งเริ่มต้นกับวิทยาศาสตร์ข้อมูล นี่คือบทช่วยสอนที่เหมาะสำหรับคุณ

ค่าเฉลี่ย ค่ามัธยฐาน โหมดการวัดแนวโน้มส่วนกลาง 3 แบบ

ในตอนท้ายของบทช่วยสอนนี้ คุณจะ:

  • เข้าใจแนวคิดของค่าเฉลี่ย ค่ามัธยฐาน และโหมด
  • สามารถสร้างฟังก์ชันค่ากลาง ค่ามัธยฐาน และโหมดของคุณเองได้ใน 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() จะคืนค่ารายการที่มีค่าความถี่บ่อยที่สุดในชุดข้อมูล

ดังนั้น เราสามารถพูดได้ว่าฟังก์ชันแบบกำหนดเองที่เรากำหนดไว้จริง ๆ แล้วเป็นฟังก์ชัน 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