본문 바로가기

[Python]

[Python] 빅데이터분석기사 실기 연습(작업형3)

가설 검정

# from scipy import stats

1. 단일표본검정 - 관심 모집단 1개

# Shapiro-Wilk 검정 -> 정규성 검정

stats.shapiro(data)

 

# 단일표본검정

stats.ttest_1samp(data, 기대값)

    # alternative 매개변수

    alternative='two-sided' 기본값

    alternative='less'

    alternative='greater'   

 

# Wilcoxon의 부호 순위 검정(비모수 검정)

stats.wilcoxon(data - 기대값)

 

2. 대응표본검정 - 관심 모집단 2개 (대응 표본)

# 정규성 검정

stats.shapiro(diff) 

* diff = data1 - data2

 

# 대응(쌍체)표본검정

ttest_rel(data1, data2)

 

# Wilcoxon의 부호 순위 검정

wilcoxon(data1, data2)

 

2. 독립표본검정 - 관심 모집단 2개 (독립 표본)

# 정규성 검정

shapiro(data1)

shapiro(data2)

 

# 정규분포를 따르지 않을 때: Mann-whitney U 검정

mannwhitneyu(data1, data2)

 

# 정규분포를 따를 때 등분산 검정(레빈) 실시

levene(data1, data2)

 

# 정규분포, 등분산 만족할 때 독립 표본검정

ttest_ind(data1, data2)

 

# 정규분포는 만족하였지만 등분산은 아닐 때

ttest_ind(data1, data2, equal_var=False

 

범주형 데이터 분석(카이제곱 검정)

# 적합도 검정

import scipy from stats

- stats.chisquare(observed, expected)

    observed: 관찰된 빈도 리스트

    expected: 기대 빈도 리스트

 

# 독립성 검정, 동질성 검정

import scipy from stats

- stats.chi2_contingency(table, correction = True) 

  - table: 교차표

  - correction: 연속성 보정 (기본값 True)

 

회귀 분석

상관계수 

# 피어슨 상관관계, t검정

df.corr() - (기본값= 피어슨)

stats.pearsonr(x,y)

 

# 스피어맨 상관관계 , t검정

df.corr(method = 'spearman')

stats.spearmanr(x,y)

 

# 켄달타우 상관관계 , t검정

df.corr(method = 'kendall')

stats.kendalltau(x,y)

 

단순 선형 회귀 분석

# 최소제곱법: OLS

import statsmodels.formula.api import ols

ols('종속변수 ~ 독립변수', data=df).fit()

 

# 회귀 모델 통계분석

요약- model.summary()

결정계수 -  model.rsquared

회귀계수(변수, 절편) -  model.params[]

유의성- model.pvalues[]

 

# 예측값

model.predict()

 

# 예측값과 예측값에 대한 신뢰구간, 예측구간

pred = model.get_prediction()

pred.summary_frame(alpha=0.05) 

>> 신뢰구간보다 예측구간이 더 길다!

 

# 잔차 구하기

1. model.resid

2. df['잔차'] = df['종속변수'] - model.predict(df)

 

# 잔차제곱합

1. (model.resid**2).sum()

2. (df['잔차'] ** 2).sum()

 

# MSE 잔차제곱평균

1. (df['잔차'] ** 2).mean()

2. from sklearn.metrics import mean_squared_error

    pred = model.predict(df)

    mean_squared_error(df['종속변수'], pred)

 

다중 선형 회귀 분석 (위와 비슷)

ols('종속변수 ~ 독립변수1 + 독립변수2', data=df).fit()

 

범주형 변수

# 원핫 인코딩 처리 >> 001, 010, 100, 001 중 1번째, 4번째 삭제해도 판단 가능 

pd.get_dummies(drop_first=True)

 

분산분석

일원 분산 분석

# scipy를 이용한 일원 분산 분석

import scipy import stats

stats.f_oneway()

 

# 데이터 재구조화 시키기(긴 형태)

df.melt()

 

# 분산분석 테이블 이용

from statsmodels.formula.api import ols

from statsmodels.stats.anova import anova_lm

model = ols().fit()

anova_lm(model)

 

# 사후 검정

from scipy import stats

from statsmodels.stats.multicomp import pairwise_tukeyhsd, MuliComparison

투키: pairwise_tukeyhsd()

본페로니: mc = MultiComparison() 

                mc.allpairtest(stats.ttest_ind, method='bonf')

 

# 크루스칼-왈리스 검정

stats.kruskal()

 

이원 분산 분석

# 분산분석 테이블 이용

from statsmodels.formula.api import ols

from statsmodels.stats.anova import anova_lm

model = ols().fit() -> 상호작용효과: * 사용, 범주형 데이터는 C()

anova_lm(model)

 

오답노트

# 회귀모형에서 변수가 한 단위 증가할 때 오즈비 값(Odds ratio)

import numpy as np

np.exp(model.params['변수'])