[python] 파이썬 통계 - 분산(Dispersion)
파이썬으로 통계에서 분산(Dispersion)을 다루는 코드를 공유합니다. 분산(Dispersion)은 수치 데이터 세트의 각 항목이 평균값에서 얼마나 떨어져 있는지 나타내는 지표입니다. 여기서는 범위(range), 분산(variance), 표준편차(standard deviation)을 계산하게 됩니다.
분산 계산은 아래 수식을 활용합니다.
분산값이 높다는 것은 데이터 세트의 각 항목들이 평균에서 멀리 떨어져 있다는 것을 의미합니다. 위 분산값에 루트를 취한 것이 표준편차입니다. 데이터 세트의 각 항목이 평균에서 떨어진 정도가 표준편차값 이내라면 보편적인 데이터 항목으로 취급하며, 표준편차값 이상이라면 보편적이지 않은 값으로 취급할 수 있으며 통계용어로 이상치 또는 극단치(outliers)라 합니다.
분산에 단순히 루트를 취한 것이 표준편차라면 표준편차의 정의가 왜 필요할까요? 분산은 계산이나 수식표현의 편의를 위해 주로 사용되며, 표준편차는 분산을 데이터 세트와 같은 단위로 보기 위해서 사용합니다. 분산은 정의에 의해, 데이터 세트의 각 항목의 단위값의 제곱이 되기 때문에 원래 단위로 맞춰주기 위하여 루트를 취한 표준편차를 사용하는 것입니다.
'''
최소값, 최대값, 범위(range)를 반환
'''
def find_range(numbers):
lowest = min(numbers)
highest = max(numbers)
# 범위(range) 찾기
r = highest - lowest
return lowest, highest, r
'''
평균값을 반환
'''
def calculate_mean(numbers):
s = sum(numbers)
N = len(numbers)
return s/N
'''
편차 (평균값 - 각 항목값) 리스트 반환
'''
def find_differences(numbers):
mean = calculate_mean(numbers)
diff = []
for num in numbers:
diff.append(num - mean)
return diff
'''
분산 리스트 반환
'''
def calculate_variance(numbers):
diff = find_differences(numbers)
squared_diff = []
for d in diff:
squared_diff.append(d ** 2)
sum_squared_diff = sum(squared_diff)
variance = sum_squared_diff / len(numbers)
return variance
if __name__ == '__main__':
data_set = [100, 60, 70, 900, 100, 200, 500, 500, 503, 600, 1000, 1200]
lowest, highest, r = find_range(data_set)
print('Lowest: {0} Highest: {1} Range: {2}'.format(lowest, highest, r))
variance = calculate_variance(data_set)
print('Variance: {0}'.format(variance))
std = variance ** 0.5
print('Standard deviation: {0}'.format(std))
아래는 실행결과입니다.
Lowest: 60 Highest: 1200 Range: 1140
Variance: 141047.35416666666
Standard deviation: 375.5627166887931
끝.
댓글
댓글 쓰기