오답노트
[데이터 분석] 이변량 분석 - 범주 데이터와 범주 데이터 본문
범주 데이터와 범주 데이터
범주 데이터와 범주 데이터를 비교하는 방법은 교차표를 만들어 각 범주마다 비율을 비교해보면 된다.
만약 비율의 차가 거의 없으면 상관관계가 적고, 차가 클수록 상관관계가 크다고 할 수 있다.
교차표 만들기
pandas의 crosstab함수를 사용해서 쉽게 만들 수 있다.
하지만 이때 normalize 옵션을 'index'로 지정해야한다.
normalize 옵션이 'index'이면 행의 합이 1이다.
pd.crosstab(titanic['Survived'], titanic['Embarked'], normalize = 'index')
시각화
boxplot 과 mosaic으로 표현할 수 있다.
여기서는 mosaic으로 표현하는 법을 알아보겠다.
mosaic은 두 범주 데이터의 비율 뿐만 아니라 양도 같이 비교할 수 있다.
from statsmodels.graphics.mosaicplot import mosaic
mosaic(데이터프레임, [변수,타겟], gap = 0.01)
데이터프레임 변수와 변수, 타겟 순서로 이루어진 리스트를 인자로 받는다.
gap 옵션은 도형간의 간격을 지정할 수 있다.
mosaic(titanic, [ 'Pclass','Survived'])
plt.show()
비율의 차가 크므로 두 범주 데이터 간에 상관관계는 강하다고 볼 수 있다.
수치화
카이 제곱 검정을 통해서 수치화할 수 있다.
카이 제곱 통계량은 클 수록 상관관계가 강하다는 의미다.
범주의 개수가 많아질 수록 카이 제곱 통계량은 커지게 되어있다.
범주형 변수의 자유도는 범주의 개수 - 1이다.
그 이유는 True, False를 시리즈로 나타낼때 1개의 시리즈로 나타낼 수 있는것과 원리가 같다.
카이 제곱 통계량은 (x 변수의 자유도) * (y 변수의 자유도) 보다 2~3배 크면, 상관관계가 크다고 볼 수 있다.
import scipy.stats as spst
spst.chi2_contingency(table)
chi2_contingency 는 crosstab 함수에서 반환된 데이터프레임을 인자로 받는다.
반환되는 값은
카이 제곱 통계량, p 값, 자유도, 기대빈도 순의 튜플로 반환된다.
table = pd.crosstab(titanic['Survived'], titanic['Pclass'])
result = spst.chi2_contingency(table)
print('카이제곱통계량', result[0])
print('p-value', result[1])
print('자유도',result[2])
print('기대빈도\n',result[3])
'''
카이제곱통계량 102.88898875696056
p-value 4.549251711298793e-23
자유도 2
기대빈도
[[133.09090909 113.37373737 302.53535354]
[ 82.90909091 70.62626263 188.46464646]]
'''
카이 제곱 통계량은 102로 자유도의 3배인 6보다 크므로 두 범주 데이터 간 상관관계는 강하다 볼 수 있다.
'Python > 데이터 분석' 카테고리의 다른 글
[데이터 분석] 이변량 분석 - 총 정리 (0) | 2022.08.12 |
---|---|
[데이터 분석] 이변량 분석 - 수치 데이터와 범주 데이터 (0) | 2022.08.12 |
[데이터 분석] 이변량 분석 - 범주 데이터와 수치 데이터 (0) | 2022.08.12 |
[데이터 분석] 이변량 분석 - 수치 데이터와 수치 데이터 2 (0) | 2022.08.11 |
[데이터 분석] 이변량 분석 - 수치 데이터와 수치 데이터 1 (0) | 2022.08.11 |