실기
연습 화면을 불러오는 중…
연습 화면을 불러오는 중…
Python으로 준비하는 실기
코딩이 처음이라면 한 줄 실행부터.
설명 옆에서 직접 써 보고, 결과를 확인하며 배웁니다.
설치·가입 없이 이 화면에서 실행
코드를 실행해 안녕하세요를 출력해요.
처음 보는 코드를 읽고, 오류 메시지를 읽고, 짧은 코드를 스스로 고칠 수 있다.
표에서 원하는 숫자 하나를 뽑아내는 길을 스스로 찾을 수 있다.
전처리 조건을 그대로 코드로 옮겨, 문제가 요구한 자리수로 값을 낼 수 있다.
학습 데이터로 모델을 만들고 평가 데이터의 예측을 규격에 맞는 CSV 로 낼 수 있다.
검정통계량과 p-value 를 구하고 그 결과를 과장 없이 문장으로 옮길 수 있다.
도움말과 파일을 확인하며 혼자 문제를 풀고 제출할 수 있다.
배운 내용을 실전으로
bike-season.csv 는 일별 총 대여량 731행이며 season 은 1=봄, 2=여름, 3=가을, 4=겨울이다.
(1) season 별 total 평균 중 가장 큰 값을 소수점 셋째 자리까지 반올림해 답안에 적는다.
(2) 네 계절의 평균이 모두 같은지 일원배치 분산분석으로 검정하고, F 검정통계량을 소수점 넷째 자리까지 반올림해 답안에 적는다.
(3) season 이 2 인 집단과 4 인 집단만 떼어 등분산을 가정한 독립표본 t검정을 하고, 양측 p-value 를 소수점 넷째 자리까지 반올림해 답안에 적는다.
groupby('season')['total'].agg(['count','mean']). 크기가 170~190 으로 조금씩 다르다는 것을 알고 시작한다.f_oneway 는 집단마다 하나씩 배열을 받는다. [g[열].values for _, g in df.groupby(키)] 가 가장 짧다.stats.f_oneway(*groups) — 별표로 풀어 넘겨야 한다. 리스트를 통째로 넘기면 집단이 하나인 것으로 읽힌다.equal_var=True 다. scipy 의 기본값과 같지만 명시해 두는 편이 안전하다.import pandas as pd
from scipy import stats
df = pd.read_csv('bike-season.csv')
means = df.groupby('season')['total'].mean()
print(round(means.max(), 3))
groups = [group['total'].values for _, group in df.groupby('season')]
f, p = stats.f_oneway(*groups)
print(round(f, 4))
s2 = df[df['season'] == 2]['total']
s4 = df[df['season'] == 4]['total']
print(round(stats.ttest_ind(s2, s4, equal_var=True).pvalue, 4))분산분석은 "적어도 한 집단이 다르다" 까지만 말한다. F = 128.77 에 p 는 1e-66 수준이라 네 계절이 모두 같다는 가정은 확실히 기각된다. 그런데 그것이 모든 쌍이 다르다 는 뜻은 아니다 — 여름(4,992)과 겨울(4,728)만 떼어 보면 p = 0.1397 로 0.05 에서 기각되지 않는다. 전체 검정이 유의해도 개별 쌍은 유의하지 않을 수 있다는 것이 이 문항의 요점이다. 같은 두 집단을 Welch(equal_var=False)로 보면 p 가 0.1398 로 미세하게 달라진다.
equal_var=False(Welch)로 두면 자유도가 보정돼 p 가 0.1397 대신 0.1398 이 된다. 넷째 자리를 요구하는 문항에서는 이 한 칸이 정답과 오답을 가른다.