본문 바로가기

Python 파이썬

파이썬 이변량 분석(3) - (숫자/범주->범주형)

 

 

이번 포스팅에서도 타이타닉 데이터로 진행

#타이타닉 데이터 불러오기!
titanic = sns.load_dataset(('titanic'))
titanic.head()

 

범주 → 범주

 

1) 교차표( pd.crosstab() )

# 두 범주별 빈도수를 교차표 생성
pd.crosstab(titanic['survived'], titanic['sex'])

 

  • normalize : 비율로 변환
pd.crosstab(titanic['survived'], titanic['embarked'], normalize = 'all')

 

2) 시각화

# 모자익플롯 라이브러리
from statsmodels.graphics.mosaicplot import mosaic

# 모자익 플롯 그리기
mosaic(titanic,['embarked','survived'])

# 생존평균선
plt.axhline(1-titanic['survived'].mean(), color='r', linestyle='--')
plt.show()

=> 탑승한 비율은 S > C > Q이고, 하얀선이 구분선으로 생존자와 사망자의 비율을 면적으로 나타낸다.

=> 생존평균선과 가까운 embarked는 Q와 S이다. embarked C는 평균과 멀리 떨어져 있다.

=>:C에서 탑승한 생존자 비율이 가장 크다.

 

3) 카이제곱검정

import scipy.stats as spst

# 1) 교차표 생성
table = pd.crosstab(titanic['survived'], titanic['embarked'])
print(table)
print()
print('*'*40)

# 2) 카이제곱검정
spst.chi2_contingency(table)

=> chi2_contingency(교차표)를 사용하여 카이제곱검정통계량, p-value, 자유도, 기대빈도 순서로 출력함

=> p-value는 1.77e-06으로 0.05보다 작기 때문에 유의하다. 즉. survived와 embarked는 상관이 있다고 할 수 있다.

=> 이외에도 카이제곱검정통계량으로 확인할 수 있다. 카이제곱검정통계표를 확인하면 정확하지만, 확인할 수 없을 경우 카이제곱검정통계량이 자유도의 2~3배보다 크면 상관이 있다고 할 수 있다.

==> emakred에 따라 생존은 차이가 난다.

 

 

 

숫자 범주

 

1) 시각화 ( kdeplot() )

# common_norm = True 면 두 그래프 면적합이 1
# common_norm = False 면 두 그래프 각 면적이 1
sns.kdeplot(x='age', data = titanic, hue ='survived', common_norm=False)
plt.show()

=> 각 그래프 면적의 합은 1임.

=> 사망자 중 20~30대에 빈도가 몰려있고, 생존자는 30~40대에 몰려있다고 보여짐

 

  • 하나의 그래프로 보여주기
# multiple = 'fill'
sns.kdeplot(x='age', data = titanic, hue ='survived', multiple = 'fill')
plt.axhline(titanic['survived'].mean(), color = 'r')
plt.show()

=> 연령대별 생존자 비율을 확인할 수 있음.

=> 빨간선은 생존자 평균(비율)

=> 어린이와 80대 이상 노인은 생존 비율이 높음.