Python 데이터 분석

가설검정 카이제곱 문제 연습(1)

코딩탕탕 2022. 11. 7. 10:21

 

 

import pandas as pd
import scipy.stats as stats

# 카이제곱 문제1) 부모학력 수준이 자녀의 진학여부와 관련이 있는가?를 가설검정하시오
#   예제파일 : cleanDescriptive.csv
#   칼럼 중 level - 부모의 학력수준, pass - 자녀의 대학 진학여부
#   조건 :  level, pass에 대해 NA가 있는 행은 제외한다.

data1 = pd.read_csv("https://raw.githubusercontent.com/pykwon/python/master/testdata_utf8/cleanDescriptive.csv").dropna(subset = ['level','pass'])  # NA 없애기
print(data1.head(3))
# print(data1.describe)
print(data1.isnull().sum())

print(data1['level'].unique()) # [1. 2. 3.]  # 고졸, 대졸, 대학원졸
print(data1['pass'].unique())  # [2. 1.]     # 1 - 합격, 2 - 불합격

#
# 귀무 가설 : 부모학력 수준이 자녀의 진학여부와 관련이 있다.
# 대립 가설 : 부모학력 수준이 자녀의 진학여부와 관련이 없다.

ctab = pd.crosstab(index = data1['level'], columns = data1['pass'])
ctab.columns = ['합격', '불합격']
print(ctab)

chi2, p, ddof, _ = stats.chi2_contingency(ctab)
print('chi2:{}, p:{}, ddof:{}'.format(chi2, p, ddof))
# chi2:2.7669, p:0.2507056, ddof:2
# 해석 : p : 0.2507056 > 0.05 이므로 귀무가설 채택


<console>
   resident  gender  age  level  cost  ...  resident2  gender2  age2  level2 pass2
0       1.0       1   50    1.0   5.1  ...        특별시       남자   장년층      고졸    실패
1       2.0       1   54    2.0   4.2  ...        광역시       남자   장년층      대졸    실패
2       NaN       1   62    2.0   4.7  ...        NaN       남자   노년층      대졸    합격

[3 rows x 14 columns]
resident     17
gender        0
age           0
level         0
cost          0
type         11
survey       77
pass          0
cost2        72
resident2    17
gender2       0
age2          0
level2        0
pass2         0
dtype: int64
[1. 2. 3.]
[2. 1.]
       합격  불합격
level         
1.0    49   40
2.0    55   27
3.0    31   23
chi2:2.7669512025956684, p:0.25070568406521365, ddof:2