Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Tính Mean, Median, Mode trong Python không dùng thư viện

Mean (trung bình), Median (trung vị), Mode (mode) là 3 chỉ số thống kê cơ bản. Bài này triển khai thuần Python không dùng thư viện.

1. Mean (Trung bình cộng)

numbers = [21, 11, 19, 3, 11, 5]

mean = sum(numbers) / len(numbers)
print(f"Mean: {mean:.2f}")  # 11.67

2. Median (Trung vị)

Giá trị giữa khi đã sắp xếp. Nếu số phần tử chẵn → trung bình 2 giá trị giữa.

numbers = [21, 13, 19, 3, 11, 5]
numbers.sort()
n = len(numbers)

if n % 2 == 0:
    median = (numbers[n//2 - 1] + numbers[n//2]) / 2
else:
    median = numbers[n//2]

print(f"Sorted: {numbers}")
print(f"Median: {median}")  # 12.0

Kết quả

Sorted: [3, 5, 11, 13, 19, 21]
Median: 12.0

3. Mode (Mode - Giá trị xuất hiện nhiều nhất)

from collections import Counter

numbers = [21, 13, 19, 13, 19, 13]
freq = Counter(numbers)
max_freq = max(freq.values())
modes = [num for num, count in freq.items() if count == max_freq]

if len(modes) == len(numbers):
    print("Không có mode (tất cả xuất hiện 1 lần)")
else:
    print(f"Mode(s): {modes}")  # [13]

Kết quả

Mode(s): [13]

Hàm tổng hợp

def mean_median_mode(data):
    # Mean
    mean = sum(data) / len(data)
    
    # Median
    sorted_data = sorted(data)
    n = len(sorted_data)
    if n % 2 == 0:
        median = (sorted_data[n//2 - 1] + sorted_data[n//2]) / 2
    else:
        median = sorted_data[n//2]
    
    # Mode
    freq = Counter(sorted_data)
    max_freq = max(freq.values())
    modes = [k for k, v in freq.items() if v == max_freq]
    if len(modes) == len(data):
        modes = "Không có mode"
    
    return mean, median, modes

print(mean_median_mode([21, 13, 19, 13, 19, 13]))
# (16.5, 16.0, [13])

Khi nào dùng thư viện?

Dùng statistics (Python 3.4+) hoặc numpy/pandas cho production: xử lý NaN, tối ưu, nhiều tính năng hơn.

import statistics
statistics.mean(data)
statistics.median(data)
statistics.mode(data)      # 1 mode
statistics.multimode(data) # Tất cả mode