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