통계분석 프로세스¶
통계적 분석에서는 2kg의 차이가 나타났더라도, 분산에 따라 이 차이는 유의할 수도, 유의하지 않을 수도 있다. 이와 같이 통계적 분석 개념에는 분산을 이용한다!!!!¶
일표본 T-검정(One Sample t-test)¶
In [5]:
#데이터 불러오기
import pandas as pd
cats = pd.read_csv('https://raw.githubusercontent.com/ADPclass/ADP_book_ver01/main/data/cats.csv')
#cats 데이터 정보확인
#Bwt는 고양이 몸무계를 의미
#Hwt는 고양이 길이를 의미
cats.info()
#먼저 정규성 검정부터 수행
#고양이 몸무게가 2.6kg인지를 검정하므로 mu 변수에 2.6을 할당
#그리고 고양이의 몸무게만 추출하여 shapiro test를 통해 데이터의 정규성을 검정한다
# scipy.stats: 통계 분석을 위한 함수와 확률 분포를 제공합니다
import scipy.stats as stats
from scipy.stats import shapiro
mu = 2.6
shapiro(cats['Bwt'])
<class 'pandas.core.frame.DataFrame'> RangeIndex: 144 entries, 0 to 143 Data columns (total 3 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Sex 144 non-null object 1 Bwt 144 non-null float64 2 Hwt 144 non-null float64 dtypes: float64(2), object(1) memory usage: 3.5+ KB
Out[5]:
ShapiroResult(statistic=0.9518786668777466, pvalue=6.730248423991725e-05)
In [6]:
#wilcoxon test로 t-test진행
stats.wilcoxon(cats.Bwt - mu, alternative = 'two-sided')
Out[6]:
WilcoxonResult(statistic=3573.0, pvalue=0.02524520294814093)
wilconxon test 결과 p-value는 유의수준 0.05보다 작으므로 고양이의 몸무게가 2.6kg이다 라는 귀무가설을 기각할 수 있다!!!! 즉, 유의수준 0.05하에 고양이의 평균 몸무게는 2.6kg라고 할 수 없다!!!¶
대응표본 T-검정¶
In [7]:
import pandas as pd
data = {'before':[7,3,4,5,2,1,6,6,5,4],
'after':[8,4,5,6,2,3,6,8,6,5]}
data = pd.DataFrame(data)
data
Out[7]:
| before | after | |
|---|---|---|
| 0 | 7 | 8 |
| 1 | 3 | 4 |
| 2 | 4 | 5 |
| 3 | 5 | 6 |
| 4 | 2 | 2 |
| 5 | 1 | 3 |
| 6 | 6 | 6 |
| 7 | 6 | 8 |
| 8 | 5 | 6 |
| 9 | 4 | 5 |
In [8]:
# 'before' 데이터에 대한 정규성 검정
stat, p_value = shapiro(data['before'])
print("Before: Shapiro-Wilk test statistic =", stat, ", p-value =", p_value)
# 'after' 데이터에 대한 정규성 검정
stat, p_value = shapiro(data['after'])
print("After: Shapiro-Wilk test statistic =", stat, ", p-value =", p_value)
# p-value 값이 유의수준(0.05) 보다 크면 귀무가설 채택(정규성 만족함)
# 작으면 기각(정규성 만족안함)
#여기서는 정규성을 만족함
Before: Shapiro-Wilk test statistic = 0.9644594192504883 , p-value = 0.8352694511413574 After: Shapiro-Wilk test statistic = 0.9456835985183716 , p-value = 0.6177982091903687
In [10]:
stats.ttest_rel(data['after'], data['before'], alternative='greater')
Out[10]:
Ttest_relResult(statistic=4.743416490252569, pvalue=0.0005269356285082764)
독립표본 t-test¶
두 개의 독립된 모집단의 평균을 비교할 떄 사용¶
모집단, 모수,표본이 모두 두개씩 존재(등분산성 가정을 해주어야 함.)¶
두 모집단은 정규성을 만조해야 한다.¶
두 모집단의 분산이 서로 같아야 한다(등분산성 가정)¶
정규성검정¶
1. 정규성 만족(귀무가설 채택) >>> 등분산 검정¶
2. 정규성 불만족(귀무가설 기각) : 윌콕슨의 부호 순위 검정¶
등분산 검정¶
1. 등분산 만족(귀무가설 채택) : stats.ttest_ind(X1, X2, equal_var = True)¶
2. 등분산 불만족(귀무가설 기각) : stats.ttest_ind(X1, X2, equal_var = False)¶
In [12]:
import pandas as pd
cats = pd.read_csv('https://raw.githubusercontent.com/ADPclass/ADP_book_ver01/main/data/cats.csv')
cats
Out[12]:
| Sex | Bwt | Hwt | |
|---|---|---|---|
| 0 | F | 2.0 | 7.0 |
| 1 | F | 2.0 | 7.4 |
| 2 | F | 2.0 | 9.5 |
| 3 | F | 2.1 | 7.2 |
| 4 | F | 2.1 | 7.3 |
| ... | ... | ... | ... |
| 139 | M | 3.7 | 11.0 |
| 140 | M | 3.8 | 14.8 |
| 141 | M | 3.8 | 16.8 |
| 142 | M | 3.9 | 14.4 |
| 143 | M | 3.9 | 20.5 |
144 rows × 3 columns
In [20]:
male = cats.loc[(cats['Sex']=='M'),'Bwt']
female = cats.loc[(cats['Sex']=='F'),'Bwt']
In [21]:
stat, p_value = shapiro(male)
print(stat, p_value)
stat, p_value = shapiro(female)
print(stat, p_value)
0.9788321852684021 0.11895745247602463 0.8909613490104675 0.0003754299250431359
In [23]:
# cats데이터에서 등분상성 검정을 진행한다.
stats.levene(female, male)
Out[23]:
LeveneResult(statistic=19.43101190877999, pvalue=2.0435285255189404e-05)
In [24]:
stats.ttest_ind(female, male, equal_var=False)
Out[24]:
Ttest_indResult(statistic=-8.70948849909559, pvalue=8.831034455859356e-15)
pvalue는 유의수준보다 작음.. 즉, 유의하다고 판단 귀무가설 기각 대립가설 채택, 수컷과 암컷 고양이의 몸무게 차이는 존재한다고 할 수 있다.¶
'빅데이터분석기사 준비' 카테고리의 다른 글
| 빅분기 모의고사 2회차 (0) | 2023.06.16 |
|---|---|
| 빅분기 모의고사 1회차 (0) | 2023.06.14 |
| 빅분기 2유형 문제연습(회귀-2) (0) | 2023.06.08 |
| 빅분기 2유형 문제연습(회귀-1) (0) | 2023.06.05 |
| 빅분기 2유형 문제연습(분류) (0) | 2023.05.30 |