통계 - 평균, 중앙값, 최빈값
02 Aug 2025 | Statistics개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.
평균(Mean)
모든 값의 합을 전체 개수로 나눈 값
\[\bar{x} = \frac{1}{n} \sum_{i=1}^{n} x_i\]- $\bar{x}$: 평균 (x-bar라고 읽음)
- $n$: 데이터의 개수 (전체 항목 수)
- $x_i$: i번째 데이터 값
- $\sum$: 시그마 기호, 모든 데이터를 더하라는 뜻
#A반 점수 모음
A_score = [60, 70, 90, 85, 100, 75, 65, 80, 95, 55 ]
#A반 합
a_sum = sum(A_score)
#A반 평균
a_sum/len(A_score) # 77.5
평균은 계산이 쉽고 직관적이어서 데이터를 대표할 수 있는 값으로 많이 사용되지만, 어떤 특정한 극단적인 값에 영향을 받이 받는다는 단점도 존재한다.
중앙값(Median)
데이터를 크기순으로 정렬할때, 중앙에 위치한 값
# 원본 데이터
data1 = [30, 10, 20]
# 정렬
sorted_data1 = sorted(data1) # [10, 20, 30]
# 중앙값 (홀수 개수)
n1 = len(sorted_data1)
median1 = sorted_data1[n1 // 2]
print("정렬된 데이터:", sorted_data1)
print("중앙값:", median1)
# [10, 20, 30]
# 20
그러나 데이터가 홀수개인 경우는 어떻게 할까?
# 원본 데이터
data2 = [40, 20, 10, 30]
# 정렬
sorted_data2 = sorted(data2) # [10, 20, 30, 40]
# 중앙값 (짝수 개수 → 가운데 두 수의 평균)
n2 = len(sorted_data2)
middle_left = sorted_data2[n2 // 2 - 1]
middle_right = sorted_data2[n2 // 2]
median2 = (middle_left + middle_right) / 2
print("정렬된 데이터:", sorted_data2)
print("중앙값 계산:", middle_left, "+", middle_right, "/ 2 =", median2)
# [10, 20, 30, 40]
# 25.0
이러한 중앙값은 극단값(이상치)의 영향을 거의 받지 않고, 데이터가 한쪽으로 너무 치우쳐 있거나 이상치가 있을 경우 평균보다 더 현실적인 대표값을 가질 수 있다는 장점이 있다. 그러나 계산에 정렬이 반드시 필요하기 때문에 평균보다 더 많은 연산을 사용하게 되고, 모든 데이터 값을 반영하지 않고 단순히 위치만 고려한다는 단점 또한 존재한다.
따라서 데이터에 이상치가 존재하거나 분포가 비대칭인 경우 평균보다 중앙값을 대표값으로 사용하는 것이 적절하다.
최빈값(Mode)
데이터 중 가장 자주 나타나는 값 > 가장 많이 나온 값
fruits = ["사과", "바나나", "사과", "포도", "사과", "딸기", "바나나"]
freq = {} # 빈 딕셔너리
for fruit in fruits:
if fruit in freq:
# freq안에 과일 이미 존재하면 +1
freq[fruit] += 1
else:
# freq안에 과일 없으면 1
freq[fruit] = 1
# 결과 > freq = {'사과': 3, '바나나': 2, '포도': 1, '딸기': 1}
max_count = 0
mode_fruit = None
for key in freq:
# 1. 사과(3)가 0보다 크면
if freq[key] > max_count:
# max_count = 3
max_count = freq[key]
# mode_fruit = 사과
mode_fruit = key
# 사과(3) -> max_count 보다 큰 값은 안나올테니
print("최빈값:", mode_fruit)
# 사과
라이브러리를 통해서도 최빈값을 찾아보자
from collections import Counter
fruits = ["사과", "바나나", "사과", "포도", "사과", "딸기", "바나나"]
counter = Counter(fruits)
most_common = counter.most_common(1)[0][0] # 가장 많이 등장한 값
print("최빈값:", most_common)
# 사과
이러한 최빈값은 데이터에서 가장 흔하게 나타나는 값을 파악하기가 쉽다. 하지만 최빈값이 존재하지 않는 경우가 있을수도 있고(모든값이 한번만 나오는 경우), 여러개의 최빈값이 존재할 수도 있다는 것을 알고 있어야한다.
대표값 정리 비교
| 항목 | 의미 | 이상치 영향 | 적합한 데이터 |
|---|---|---|---|
| 평균 | 전체 합 ÷ 개수 | 있음 | 수치형 데이터 |
| 중앙값 | 정렬 후 가운데 위치 | 적음 | 비대칭 분포 |
| 최빈값 | 가장 자주 나타나는 값 | 없음 | 범주형 또는 수치형 |
지혜의 개발공부로그