[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


끝.

댓글

이 블로그의 인기 게시물

[PLC] PLC 아날로그 입출력 기본

전력(kW) 계산하기 (직류, 교류 단상, 교류 삼상)

공압 속도 제어: 미터인 vs 미터아웃

[PLC] 채터링 현상과 입력 필터

제너 다이오드에 저항을 연결하는 이유

[python] 파이썬 pyplot 2차원 그래프 샘플 코드

[PLC] 래더 다이어그램과 PLC

공압회로 기호

[PLC] PLC 입출력 타입 - 싱크 & 소스 (Sink & Source)

3선 결선식 센서의 타입 PNP, NPN