Bài 24
Đề bài: Nhập n số lieu. Tính day du các chi số thống kê:
Trung binh, Trung vi, Mot, Tu phan vi Q1 Q2 Q3,
Khoang từ phan vi IQR = Q3 - Q1.
Phat hien giá trị ngoai lai (outlier):
Gia tri < Q1 - 1.5*IQR hoặc > Q3 + 1.5*IQR.
Ví dụ: Day so: 2 4 4 4 5 5 7 9 100
Kết quả:
Trung binh = 15.56
Trung vi = 5
Mot = 4
Q1 = 4, Q3 = 7, IQR = 3
Ngoai lai: 100 (> 7 + 1.5*3 = 11.5)
Đăng nhập để giáo viên có thể giao bài và nhận bài nộp của bạn.
Câu trả lời
so_lieu = sorted(map(float, input("Nhap so lieu: ").split()))
n = len(so_lieu)
trung_binh = sum(so_lieu) / n
# Trung vi
if n % 2 == 0:
trung_vi = (so_lieu[n//2-1] + so_lieu[n//2]) / 2
else:
trung_vi = so_lieu[n//2]
# Mot
tu_dien = {}
for x in so_lieu:
tu_dien[x] = tu_dien.get(x, 0) + 1
mot = max(tu_dien, key=tu_dien.get)
# Tu phan vi
def tu_phan_vi(data, phan_tram):
idx = (len(data) - 1) * phan_tram / 100
lo = int(idx)
hi = lo + 1
if hi >= len(data):
return data[lo]
return data[lo] + (data[hi] - data[lo]) * (idx - lo)
Q1 = tu_phan_vi(so_lieu, 25)
Q3 = tu_phan_vi(so_lieu, 75)
IQR = Q3 - Q1
print(f"\nTrung binh = {round(trung_binh, 2)}")
print(f"Trung vi = {trung_vi}")
print(f"Mot = {mot}")
print(f"Q1 = {Q1}, Q3 = {Q3}, IQR = {IQR}")
gioi_han_duoi = Q1 - 1.5 * IQR
gioi_han_tren = Q3 + 1.5 * IQR
ngoai_lai = [x for x in so_lieu if x < gioi_han_duoi or x > gioi_han_tren]
print(f"Khoang hop le: [{round(gioi_han_duoi,2)}, {round(gioi_han_tren,2)}]")
print(f"Gia tri ngoai lai: {ngoai_lai if ngoai_lai else 'Khong co'}")