AI 전문가가 되고싶은 사람
분산 분석 ( ANOVA) 및 이변량 분석 복습 본문
● 분산 분석 ( ANOVA )
- 여러 집단 간에 차이 비교 : 기준은 전체 평균
- F 통계량 = 전체 평균 - 각 집단 평균 / 각 집단의 평균 - 개별 값 ( 값이 대략 2~3 이상이면 차이가 있다고 판단 )
ex ) 셋 이상 집단(범주)의 숫자 비교 ( f_oneway(A,B,C) )
- 귀무가설 (H0) : 객실 등급별 나이는 차이가 없다
- 대립가설 (H1) : 객실 등급별 나이에는 차이가 있다
* 분산분석은 전체 평균대비 각 그룹간 차이가 있는 지만 알려주기 때문에 어느 그룹 간에 차이가 있는지는 알 수 없음
* 그래서, 보통 사후분석을 진행
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import scipy.stats as spst
# 타이타닉 데이터
titanic = pd.read_csv('https://raw.githubusercontent.com/DA4BAM/dataset/master/titanic.0.csv')
# Pclass(3 범주) --> Age
sns.barplot(x="Pclass", y="Age", data=titanic)
plt.grid()
plt.show()
# 1) 분산 분석을 위한 데이터 만들기
# NaN 행 제외
temp = titanic.loc[titanic['Age'].notnull()]
# 그룹별 저장
P_1 = temp.loc[temp.Pclass == 1, 'Age']
P_2 = temp.loc[temp.Pclass == 2, 'Age']
P_3 = temp.loc[temp.Pclass == 3, 'Age']
따로 구별해준 뒤에 분산분석 해야함
spst.f_oneway(P_1, P_2, P_3)
● 요약
- 평균 비교 ( 시각화 ) : barplot(sns.barplot)
- 평균 비교 ( 수치화) : 범주 2개 : t-test, 범주 3개 이상 : 분산분석(ANOVA)
● 이변량분석 ( 범주 vs 범주 )
- 교차표(crosstab)를 통해 시각화 및 chi-squared test 사용
# 두 범주별 빈도수를 교차표로 만들어 봅시다.
pd.crosstab(titanic['Survived'], titanic['Embarked'])
- 만든 교차표를 사용하여 mosaic plot을 그려서 비교
# Pclass별 생존여부를 mosaic plot으로 그려 봅시다.
# titanic['Survived'].mean()은 생존자의 평균을 나타낸다.
# 따라서 1 -titanic['Survived'].mean()은 사망자의 평균을 나타낸다
mosaic(titanic, [ 'Embarked','Survived'])
plt.axhline(1- titanic['Survived'].mean(), color = 'r')
plt.show()
- mosaic plot으로 시각화했을 때 Embarked 별로 비율 차이가 있기 때문에 두 범주형 변수는 상관 있어보인다.
- 수치화 : 카이제곱검점 ( 범주형 변수들 사이에 어떤 관계가 있는지, 수치화하는 방법 )
이 글을 보고 나니까 쉽게 이해가 되었다
https://medistat.tistory.com/25
# 1) 먼저 교차표 집계
table = pd.crosstab(titanic['Survived'], titanic['Embarked'])
print(table)
print('-' * 50)
# 2) 카이제곱검정
spst.chi2_contingency(table)
- p-value 값이 0.05보다 작다. -> Survived 변수와 Embarked변수는 서로 상관이 있다! 라고 할 수 있음
● 숫자 -> 범주 : 시각화
- sns.kdeplot() : common_norm = False : 생존자, 사망자 각각 kdeplot 그리기
multiple = 'fill' : 모든 구간에 대한 100% 비율로 kdeplot 그리기
Family 변수 값별로 생존자 사망자 kdeplot 그리기
sns.kdeplot(x='Family', data = titanic, hue ='Survived'
, multiple = 'fill')
plt.axhline(titanic['Survived'].mean(), color = 'r')
plt.show()
- 그래프를 보면 혼자 탑승한 경우(가족 구성원 수가 1) 생존한 승객과 생존하지 못한 승객의 비율이 상대적으로 비슷한 것으로 나타납니다.
- 가족 구성원 수가 2 또는 3인 경우에는 생존한 승객의 비율이 높은 경향이 있습니다.
- 가족 구성원 수가 증가함에 따라 생존하지 못한 승객의 비율이 더 높아지는 경향이 나타납니다.
'기자단 활동' 카테고리의 다른 글
[KT 에이블스쿨 기자단] AI 트랙 합격 후기 (0) | 2024.04.19 |
---|---|
웹 크롤링 - 1일 (1) | 2024.03.07 |
가설 검정, 중심 극한 정리, t-test 정리 및 복습 (2) | 2024.02.28 |
파이썬 시각화와 단변량 분석 복습 ( + 시계열 데이터 처리 ) (1) | 2024.02.28 |
파이썬 프로그래밍 ( 데이터 프레임 변경 및 결합 ) 복습 (1) | 2024.02.26 |