소품집

[빅분기] 빅데이터분석기사 작업형 3유형 문제 풀어보기 본문

자격증/빅데이터분석기사

[빅분기] 빅데이터분석기사 작업형 3유형 문제 풀어보기

sodayeong 2023. 11. 22. 12:20

t-test

  1. 단일표본 t-검정
from scipy.stats import ttest_1samp

# 귀무가설 : 평균키는 165이다
# 대립가설 : 평균키는 165가 아니다

# 1. 정규성을 만족하는가? 
# 2. ttest_1samp
shapiros, p = shapiro(df) 
print(p) # 정규성을 갖지 않음!

s, p, _ = ttest_1samp(df['height'], 165) 
print(p)

# p-value는 0.0001로 대립가설을 채택한다. 
#따라서 평균키는 165가 아니다.

 

2. 대응(쌍체) 표본 t-검정

from scipy.stats import ttest_rel

# 귀무가설: 혈류량의 변화가 있다
# 대립가설 : 혈류량의 변화가 없다

# 1. 정규성을 만족하는가? shapiro
# 2. ttest_rel

df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/scipy/rel2.csv')
df.head()

print(shapiro(df['before'])) # 정규성을 갖지 않는다 
print(shapiro(df['after'])) # 정규성을 갖지 않는다

# 양측검정
ttest_rel(df['before'], df['after'])

# 유의수준 0.05에서 p-value는 0.011로 귀무가설을 기각한다. 
# 따라서 혈류량의 변화가 없다.
# 우측검정? 좌측검정? -> 후, 전, alternative

# sample data
bef = np.array([51.4, 52.0, 45.5, 54.5, 52.3, 50.9, 52.7, 50.3, 53.8, 53.1])
aft = np.array([50.1, 51.5, 45.9, 53.1, 51.8, 50.3, 52.0, 49.9, 52.5, 53.0])

# 귀무가설 : 신약 효과가 있다
# 대립가설 : 신약을 먹기 전보다 신약을 먹은 후에 혈당이 떨어진다. 


ttest_rel(aft, bef, alternative='less')

 

3. 독립표본 t-검정

from scipy.stats import shapiro, ttest_ind

# 귀무가설 : 두 집단의 시험 평균은 동일하다
# 대립가설 : 두 집단의 시험 평균은 동일하지 않다.

# 1. 정규성을 만족하는가? shapiro
# 2. ttest_ind

df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/scipy/scipy5.csv')
df.head()

print(shapiro(df['A'])) # 정규성 만족
print(shapiro(df['B'].dropna())) # 정규성 만족

ttest_ind(df['A'], df['B'].dropna()) 

# 유의수준 0.05에서 p-value는 0.947로 귀무가설을 기각할 수 없다. 
# 따라서 두 학습의 시험 평균은 동일하다.
# 귀무가설 : 두 그룹의 평균은 동일하다
# 대립가설 : 두 그룹의 평균은 동일하지 않다. 

df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/scipy/ind3.csv')
df.head()

a = df[df['group']=='a']['data']
b = df[df['group']=='b']['data']

print(shapiro(a)) # 정규성을 만족하지 않음
print(shapiro(b)) # 정규성을 만족하지 않음

ttest_ind(a, b) 

# 유의수준 0.05에서 p-value는 0.04로 귀무가설을 기각한다. 
# 따라서 두 그룹의 평균을 동일하지 않다.

 

정규성 검정

from scipy.stats import shapiro
shapiro(case1, case2)

 

등분산 검정

from scipy.stats import levene

# 두 개 학습의 시험성적에 대한 데이터이다. 그룹간 등분산 검정을 시행하라

df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/scipy/scipy2.csv')

A = df[df['class]=='A']['score']
B = df[df['class]=='B']['score']

s, p = levene(A, B)
print(p) # 유의수준 0.05에서 p-value는 0.5로 귀무가설을 채택한다.
# 두 개 학습의 시험성적에 대한 데이터이다. 그룹간 등분산 검정을 시행하라

A = df[df['class']=='A']['score']
B = df[df['class']=='B']['score']

s, p = levene(A, B)
print(p) # 유의수준 0.05에서 p-value는 0.03으로 귀무가설을 기각한다.

 

ANOVA

  1. One-Way ANOVA
  2. Two-Way ANOVA
from scipy.stats import f_oneway

# 귀무가설 : 세 집단의 평균은 같다. 
# 대립가설 : 세 집단의 평균은 같지 않다. (적어도 한 개 집단의 평균은 같지 않다.)

import numpy as np
import pandas as pd
from scipy.stats import f_oneway
np.random.seed(1004)

data1 = np.random.normal(0, 1, 50)
data2 = np.random.normal(0, 1, 40)
data3 = np.random.normal(5, 1, 30) # different mean

data123 = [data1, data2, data3]


s, p = f_oneway(data1, data2, data3)
print(s, p)

 

카이제곱 검정 (교차 분석)

  1. Chisquare : 한 개의 요인에 의해 k개의 범주를 가질 때 이론적 분포를 따르는지 검정 (class-int)
  2. Chi2_contigency : 모집단이 두 개의 변수에 의해 범주화 되었을 때, 두 변수들 사이의 관계가 독립인지 아닌지 검정 (class-class)
# 주사위를 144번 던졌을 때, 각 눈금별로 나온 횟수이다. 이 데이터는 주사위의 분포에서 나올 가능성이 있는지 검정하라

# 귀무가설 : 주사위 눈금 발생 확률은 1/6이다. 
# 대립가설 : 주사위 눈금 발생 확률은 1/6이 아니다. 

df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/scipy/dice.csv')

df['expected'] = (df['counts'].sum()/6).astype(int)

s, p = chisquare(df['counts'], df['expected'])
print(p)

# 유의수준 0.05에서 p-value는 0.801로 귀무가설을 기각할 수 없다. 
# 따라서 주사위 눈금 발생 확률은 1/6로 동일하다.

 

# 다음 데이터는 어떤 집단의 왼손잡이, 오른손 잡이의 숫자를 나타낸다. 
# 인간의 왼손잡이와 오른손잡이의 비율을 0.2:0.8로 알려져있다. 이 집단에서 왼손과 오른손 잡이의 비율이 적합한지 검정하라

# 귀무가설 : 왼손과 오른손 잡이의 비율이 적합하다
# 대립가설 : 왼손과 오른손 잡이의 비율이 적합하지 않다

import pandas as pd
from scipy.stats import chisquare

df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/scipy/hands2.csv')

df_2 = df['hands'].value_counts().to_frame()
df_2['expected'] = (df_2['hands'].sum()*0.8, df_2['hands'].sum()*0.2)
df_2

chisquare(df_2['hands'], df_2['expected'])

# 유의수준 0.05에서 p-value는 0.02로 귀무가설을 기각한다. 
# 따라서 왼손과 오른손 잡이의 비율은 적합하지 않다.

 

# 다음 데이터는 국민 기초체력을 조사한 데이터이다. 성별과 등급이 독립적인지 검정하라

# 귀무가설 : 성별과 등급은 독립이다
# 대립가설 : 성별과 등급은 독립이 아니다
from scipy.stats import chi2_contingency

df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/body/body.csv')
crosstab = pd.crosstab(df['측정회원성별'], df['등급'])

s, p, _, _ = chi2_contingency(crosstab)
print(p)

# 유의수준 0.05에서 p-value는 0에 가까운 수치로 귀무가설을 기각한다. 
# 따라서 성별과 등급은 독립이 아니다.

 

df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/scipy/fe2.csv',index_col=0)

crosstab = df.iloc[0:2, 0:2]
s, p, _, _ = chi2_contingency(crosstab)
print(p)
728x90
Comments