pbj0812의 코딩 일기

[통계학] 변동계수(CV) 구현하기 본문

Science/통계학

[통계학] 변동계수(CV) 구현하기

pbj0812 2020. 8. 13. 01:53

0. 목표

 - python을 통해 변동계수를 구현하고 확인

 - 변동계수 : 데이터가 흩어진 정도를 비교하는 경우 사용(표준편차 / 평균)

1. 실습

 1) 데이터 준비

  - 두 쌍의 10개의 숫자로 이루어진 데이터 셋 생성

data1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
data2 = [2, 8, 9, 5, 5, 9, 3, 8, 12, 13]

 2) 평균 함수 구현 및 확인

  - 결과 : 5.5. 7.4

def mean(inp):
    result = 0
    len_inp = len(inp)    
    for i in inp:
        result += i
    result = result / len_inp
    return result
    
mean_data1 = mean(data1)
mean_data2 = mean(data2)

print(mean_data1)
print(mean_data2)

 3) 분산 함수 구현 및 확인

  - 결과 : 8.25 11.84

def var(inp):
    result = 0
    len_inp = len(inp)
    for i in inp:
        result += (i - mean(inp)) ** 2
    result = result / len_inp
    return result
    
var_data1 = var(data1)
var_data2 = var(data2)

print(var_data1)
print(var_data2)

 4) 제곱근 구현

  - 바빌로니아 법을 적용하여 구현

def sqrt(inp):
    result = inp/2
    for i in range(30):
        result = (result + (inp / result)) / 2
    return result

  - 테스트

 5) 표준편차 구현 및 확인

  - 2.8722813232690143 3.4409301068170506

def std(inp):
    result = sqrt(var(inp))
    return result
    
std_data1 = std(data1)
std_data2 = std(data2)

print(std_data1)
print(std_data2)

 6) 변동계수 구현 및 확인

  - 0.5222329678670935 0.4649905549752771

  - 결과 : data1과 data2를 비교하였을 때, 평균, 분산, 표준편차 등은 data2가 data1보다 크지만 흩어진 정도는 data1이 더 크다는 것을 알 수 있다.

def cv(inp):
    result = std(inp) / mean(inp)
    return result
    
cv_data1 = cv(data1)
cv_data2 = cv(data2)

print(cv_data1)
print(cv_data2)

2. 참고

 - 제곱근(SQRT) 알고리즘 개발 및 구현하기

 - 통계학 도감(쿠리하라 신이치, 마루야마 아츠시)

Comments