작업형 3유형
평균 추출
sample_array.mean()
import numpy as np
np.mean(sample_array)
알아야하는 파이썬 내장 함수
- round(숫자, 자릿수) : 소수점을 포함하는 숫자를 자릿수만큼까지 표현하고 그 이후는 반올림
- math.floor(숫자) : 소수점 이하는 버림 (import math로 모듈 import 후 사용)
가설검정
- 평균의 차이를 검정 → T-test
- 분산의 차이를 검정 → F-test
- 관측도수(이론적 비율과 실제 비율의 차이) 검정 → 카이제곱 검정(적합도 검정)
- 두 범주형 변수가 서로 영향이 있는 지 검정 → 카이제곱 검정(독립성 검정)
라이브러리 import
import scipy.stats as stats
단일표본 T-test
- 한 표본집단의 평균이 모평균과 같은 지 검정
- 본래 정규성 검정이 선행되어야 하나, 문제에서 정규성 검정을 가정함
- 만일 정규성 검정이 가정되지 않는다면 Shapiro-wilk등 정규성 검정이 선행되어야함
- 귀무가설 : 모평균과 표본 평균은 같다
- 대립가설 : 모평균과 표본 평균은 다르다 → 양측검정
- 파라미터 : 검정하고자 하는 배열, 모평균을 입력
- ttest_1samp(배열, 평균)
- 다음과 같은 데이터 프레임 a가 있을 때 ‘Height’의 평균이 75인지 검정
- 예시
독립표본 T-test
- 두 모집단으로부터의 표본 평균이 같은 지 검정
- 귀무가설 : 두 모집단의 표본 평균은 같다
- 대립가설 : 두 모집단의 표본 평균은 다르다.
- 파라비터 : 두 표본 집단을 파라미터로 입력한다
- 두 모집단의 분산이 같다고 가정한다(등분산성), 만약 두 집단의 등분산성이 다르다면 파라미터로 equal_var=False를 입력해준다. default = True
- toothgrowth 데이터 : 투여한 약제(VC : 아스코르브산, OJ : 오렌지주스)에 따라 치아 성장에 차이가 있는지 검정
- 예시
# supp 컬럼의 값을 VC를 가지는 데이터 프레임, OJ를 가지는 데이터 프레임으로 구분
VC_a = tooth_df[tooth_df.supp == 'VC']
OJ_a = tooth_df[tooth_df.supp == 'OJ']
t_score, p_value = stats.ttest_ind(VC_a['len'], OJ_a['len'], equal_var=True)
print('검정 통계랑 :', round(t_score, 3) )
print('p-value :', round(p_value, 3))
# 등분산성 가정이 성립하지 않는 경우 equal_var=False 파라미터 설정
검정 통계랑 : -1.915
p-value : 0.06
if p_value < 0.05:
print('기각')
else:
print('채택')
채택
쌍체표본 T-test
- paired two test
- 한 집단에 실험을 거쳐서 실험 전과 후의 차이를 검정
- 귀무가설 : 두 표본 평균의 차이는 없다
- 대립가설 : 두 표본 평균의 차이가 있다.
- 파라미터 중 alternative 파라미터를 확인 후 사용하기
- 증명하고자 하는 대립가설에 따라 파라미터 선택이 달라짐
- ‘two-sided’: 두 표본 분포의 평균이 같지 않다
- ‘less’: 첫번째 표본의 평균이 두번째 표본의 평균보다 작다
- ‘greater’: 첫번째 표본의 평균이 두번째 표본의 평균보다 크다
- 예시
insect['after-before'] = insect['after_spr'] - insect['before_spr']
# 두 평균의 차이를 나타내는 새로운 컬럼 생성
print(insect['after-before'].mean())
t_score, p_value = stats.ttest_rel(insect['before_spr'], insect['after_spr'], alternative='greater')
# alternative : 'two-sided', 'less', 'greater'
# 대립가설 : 효과가 있다 -> 첫번째 샘플이, 두번째 샘플보다 값이 크다 -> greater 사용
print(round(t_score, 2))
print(round(p_value, 4))
14.89
0.0
일원분산분석(One-way ANOVA)
- 두 모분산의 비율을 검정
- 귀무가설 : 두 모집단의 분산은 같다.
- 대립가설 : 두 모집단의 분산은 다르다.
- F 검정을 시행
- 예시
- species별 sepal_width에 대한 분산 분석
X1 = a.loc[a['species'] == 'versicolor', 'sepal_width']
X2 = a.loc[a['species'] == 'setosa', 'sepal_width']
X3 = a.loc[a['species'] == 'virginica', 'sepal_width']
score, p_value = stats.f_oneway(X1, X2, X3)
print(round(score, 2))
print(round(p_value, 4))
# >>> 49.16
# >>> 0.0
카이제곱검정(적합도검정)
- 어떤 실험에서 관측 도수가 우리가 가정하는 이론상의 분포를 잘 따른다는 귀무가설을 검정
- 귀무가설 : ~집단은 ~한 분포를 따른다
- 대립가설 : ~집단은 ~한 분포를 따르지 않는다.
- 예시
# 제조사별 갯수를 담는 데이터 프레임 생성
count_df = a.groupby('제조사').count()
# 제조사별 비율이 0.1, 0.6, 0.3이라 가정
total_sum = len(a)
expected = [int(total_sum * per) for per in [0.1, 0.6, 0.3]]
# >>> [20, 120, 60] 기대도수는 각 20개, 120개, 60개 이다
statistic, p_value = stats.chisquare(count_df['id'], f_exp=expected)
# 파라미터로 관측도수, f_exp=기대도수 입력
print(round(statistic, 2))
print(round(p_value, 4))
16.73
0.0002
카이제곱검정(독립성 검정)
- 두 범주형 변수에 사용
- 두 특성이 서로 독립인지 검정. 한 특성이 다른 특성에 영향을 미치는 지 여부에 대해 검정
- 귀무가설 : 두 변수는 서로 독립이다.(한가지 특성이 다른 특성에 영향을 주지 않는다)
- 대립가설 : 두 변수는 독립이 아니다
- 예시
- pd.crosstab 함수로 분할표를 쉽게 만들 수 있음
- table = pd.crosstab(data['단과대학'], data['수강 과목 수'])
table = pd.crosstab(data['단과대학'], data['수강 과목 수'])
X1 = table.loc['경영대학', :]
X2 = table.loc['공과대학', :]
X3 = table.loc['자연대학', :]
result = stats.chi2_contingency([X1, X2, X3])
print(round(result.statistic, 2))
print(round(result.pvalue, 4))
30.13
0.0
공부한 내용을 정리한 글이나, 아직 공부할 내용이 많은 사람이기에 틀린 내용이 있을 수 있습니다. 틀린 부분에 대해 말씀해주시면 고치도록 하겠습니다. 감사합니다^^
본 게시글은 예문에듀 빅데이터분석기사 실기 한권완성 파이썬 교재를 보고 정리한 글입니다.
https://product.kyobobook.co.kr/detail/S000202026988
빅데이터분석기사 실기 한권완성 파이썬(Python)(2023) | 최예신 - 교보문고
빅데이터분석기사 실기 한권완성 파이썬(Python)(2023) | 1. 빅데이터분석기사 실기시험 합격을 위한 최고의 대비서현업 데이터사이언티스트의 모든 노하우를 담아낸 완벽 대비서2. 시험 유형 변경
product.kyobobook.co.kr
본 게시글에 사용한 데이터는 github에서 다운받으실 수 있으며, datasets/supplement에서 확인 가능합니다.
!git clone https://github.com/AnalyticsKnight/yemoonsaBigdata