본문 바로가기

Programming/Data mining

9. 통계적 분석(분포, 가설 검정)_ python 데이터마이닝

Coursera.org 에서 Michigan University의 Applied Data Science with Python의 강의를 토대로 정리한 내용입니다.

이제 어느정도 Python에서 pandas나 numpy를 이용해서 데이터를 어떻게 다루는 지 익숙해지셨다면 한번 통계적 분석을 해보도록 하죠.
이제부터는 pandas와 numpy는 어느정도 다 이해한다는 전제하에 설명을 이어가볼게요.
혹시 이항분포나 정규분포 등 확률적인 개념이 이해가 안 가시는 분들은 구글링을 통해서 학습 후 보시면 좋을 것 같네요.
먼저 파이썬에서 데이터들의 분포에 대해서 어떻게 분석하고 다루는 지 알아볼까요?

#numpy 라이브러리는 아래처럼 다양한 분포에 대한 함수를 제공하기도 한답니다

np.random.binomial(1000, 0.5)/1000
np.random.uniform(0, 1)
np.random.normal(0.75)

distribution = np.random.normal(0.75,size=1000)
np.sqrt(np.sum((np.mean(distribution)-distribution)**2)/len(distribution))
#위와 같은 식으로 distribution에 대해서 표준편차도 구할 수 있겠지만,

np.std(distribution) 
#이렇게 더욱 간단한 식으로도 알 수 있답니다.

 

이제부터는 조금 새로운 라이브러리를 다뤄볼게요. 바로 scify.stats라는 녀석인데요.
먼저 이 함수를 통해서 우리는 분포도의 왜도나 첨도와 같은 분포의 특성을 알 수 있어요.

import scipy.stats as stats #이런 형식으로 import해서

stats.kurtosis(distribution) #분포의 뾰족한 정도를 본다던지,
stats.skew(distribution) #분포의 치우침 정도를 볼 수도 있어요.

chi_squared_df2 = np.random.chisquare(2, size=10000)
stats.skew(chi_squared_df2)
>>> 1.948570233276739
chi_squared_df10 = np.random.chisquare(10, size=10000)
stats.skew(chi_squared_df10)
>>> 0.923283832861345

#두 skewness를 비교해보면, n이 커질수록 줄어드는 걸 알 수 있죠. 0에 가까워질수록 치우침이 없다는 뜻입니다.

뿐만 아니라 scipy 라이브러리는 가설검정 method도 지원한답니다.

df = pd.read_csv('grades.csv')

early = df[df['assignment1_submission'] <= '2015-12-31']
late = df[df['assignment1_submission'] > '2015-12-31']

from scipy import stats

stats.ttest_ind(early['assignment1_grade'], late['assignment1_grade'])
>>>
Ttest_indResult(statistic=1.400549944897566, pvalue=0.16148283016060577)

stats.ttest_ind(early['assignment2_grade'], late['assignment2_grade'])
>>>
Ttest_indResult(statistic=1.3239868220912567, pvalue=0.18563824610067967)

위의 코드가 무엇을 말하는 지 아시겠나요?

2015년 이전 과제제출자와 이후 과제제출자들의 성적에 대해서 T-test를 진행하여, 과제의 성적차이가 얼마나 유의미한가를 알아보는 거랍니다. 
그리고 ttest_ind()에서 ind는 독립표본 t 검정을 위한 method랍니다.
단일표본 t 검정의 경우 ind()대신 1samp(), 대응표본 t 검정의 경우 ttest_rel()을 쓰면 됩니다.
위의 예제 코드의 경우, pvalue가 모두 0.1보다도 크기에 두 평균이 같을 것이라는 귀무가설을 기각하지 않습니다.