데이터 분석 - 10

CYSSSSSSSSS·2023년 8월 18일
0

데이터분석

목록 보기
14/19

범주 -> 범주

  • 교차표를 만들어야 한다.

  • if 타이타닉호에서 성별 생존 여부를 계산할떄 남자중에 사망수 / 생존수 여자 중에 사망수 / 생존수 를 계산해 교차표를 만들어야 한다.

  • 이러한 교차표를 Confusion Matrix 라고 한다.

  • 교차표를 시각화 해야 한다 (Mosaic Plot) 으로 시각화 한다.

  • 아무런 관련이 없을때 교차표의 차이 비교 (Chi - Squared test)

교차표 함수

pd.crosstab(,, normalize = True)
# 행 : df['column']
# 열 : df['column']
pd.crosstab(df['Survived'] , df['Sex'] )

  • normalize : 정규화 (비율로 바꿔라) ('columns' , 'index' , 'all')
  • 행 기준으로 바꾸는지 열 기준으로 바꾸는지 normalize 로 선택 할수 있다.
  • all 은 전체를 했을떄 비율 이 얼마 인가
pd.crosstab(df['Survived']  , df['Sex'] , normalize = 'columns')

  • 전체 여성에서 생존율/사망률 을 계산 , 전체 남자 중에서 생존율 /사망률

mosaic plot

include

from statsmodels.graphics.mosaicplot import mosaic 
  • 교차표 -> ex) Pclass 별 Survived 의 비율 비교
  • 빨간선은 전체 평균
mosaic(titanic, [ 'Pclass','Survived'])
plt.axhline(1-titanic['Survived'] , color = 'r') # 전체 평균은 1-mean 
plt.show()
  • 생존율을 넣으면 그래프 아래쪽에 선이 생기기 때문에 1-생존률 로 사망률 로 계산해야 한다.

  • 전체 평균선을 수평으로 그린다

  • x축의 비율을 봐야 한다

  • 만약 사망률이 각 범주별로 차이가 없으면 x축 범주가 영향을 주지 않는다!!.
temp = pd.crosstab(titanic['Pclass'], titanic['Survived'], normalize = 'index')
print(temp)
temp.plot.bar(stacked=True)
plt.axhline(1-titanic['Survived'].mean(), color = 'r')
plt.show()

카이제곱 검정

기대빈도

  • 아무런 관련이 없을 떄 나올 수 있는 빈도수
  • 실제 데이터 : 관측 된 값들

공식

  • 오차에 크기를 계산하는 방법은 편차의 제곱 , 편차의 절대값

  • 실제 관측 빈도에서 기대 빈도의 편차의 제곱의 평균 을 구한 통계

  • 차이가 클수록 x->y 영향을 주는것이라고 판단할수 있다 (대립가설이 맞다)

  • 자유도 보다 2배이상 통계량이 나오면 차이가 있다고 본다

자유도 (범주형 변수)

  • 범주형 변수의 자유도는 범주의 수 - 1
  • n -1

카이제곱 검정에서 자유도 계산

  • (x변수의 자유도) x (y변수의 자유도)
  • ex) Pclass -> Survived
  • Pclass 가 범주가 3개 , Survived 가 2개
  • (3-1) * (2-1) = 2개이다
  • 한쪽 범주의 값이 결정되면 나머지 범주의 값이 자동으로 결정됨 (True / False 느낌)

카이제곱 사용법

  • Crosstab 을 만든다 (normalize 금지 , 비율이 아니기 때문에)

  • spst.chi2_contingency(Crosstab)

  • 결과로 카이제곱 통계량 , P-value , 자유도 , 기대 빈도

# 1) 먼저 교차표 집계
table = pd.crosstab(titanic['Survived'], titanic['Pclass'])
print(table)
print('-' * 50)

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

  • 통계량이 클수록 대립가설이 맞다
profile
개발자 되고 싶어요

0개의 댓글