실기
연습 화면을 불러오는 중…
연습 화면을 불러오는 중…
Python으로 준비하는 실기
코딩이 처음이라면 한 줄 실행부터.
설명 옆에서 직접 써 보고, 결과를 확인하며 배웁니다.
설치·가입 없이 이 화면에서 실행
코드를 실행해 안녕하세요를 출력해요.
처음 보는 코드를 읽고, 오류 메시지를 읽고, 짧은 코드를 스스로 고칠 수 있다.
표에서 원하는 숫자 하나를 뽑아내는 길을 스스로 찾을 수 있다.
전처리 조건을 그대로 코드로 옮겨, 문제가 요구한 자리수로 값을 낼 수 있다.
학습 데이터로 모델을 만들고 평가 데이터의 예측을 규격에 맞는 CSV 로 낼 수 있다.
검정통계량과 p-value 를 구하고 그 결과를 과장 없이 문장으로 옮길 수 있다.
도움말과 파일을 확인하며 혼자 문제를 풀고 제출할 수 있다.
배운 내용을 실전으로
bike-monthly.csv 는 연·월별 총 대여량 24행이다. 같은 month 끼리 2011년과 2012년이 짝을 이룬다.
같은 달끼리 짝지어 2012년이 2011년보다 늘었는지 대응표본 t검정으로 검정한다.
(1) 월별 차이(2012 − 2011)의 평균을 소수점 셋째 자리까지, (2) 대응표본 t 검정통계량을 소수점 넷째 자리까지, (3) 차이 평균의 95% 신뢰구간 하한을 소수점 셋째 자리까지 반올림해 각각 답안에 적는다. 표준편차는 자유도 n-1 을 쓴다.
df.pivot(index='month', columns='year', values='total') 로 month 한 줄에 2011·2012 두 칸이 오게 만든다. 짝을 만들지 못하면 대응표본이 아니다.wide[2012] - wide[2011] — 발문이 지정한 방향이다. 뒤집으면 평균과 통계량의 부호가 함께 뒤집힌다.stats.ttest_rel(a, b) 이 대응표본이다. ttest_ind 는 독립표본이라 짝 정보를 버리고 자유도도 달라진다.stats.t.interval(0.95, n-1, loc=평균, scale=표준오차). 자유도가 n−1 = 11 이라는 점이 대응표본의 특징이다.import pandas as pd
import numpy as np
from scipy import stats
df = pd.read_csv('bike-monthly.csv')
wide = df.pivot(index='month', columns='year', values='total')
diff = wide[2012] - wide[2011]
print(round(diff.mean(), 3))
result = stats.ttest_rel(wide[2012], wide[2011])
print(round(result.statistic, 4))
n = len(diff)
se = diff.std(ddof=1) / np.sqrt(n)
low, high = stats.t.interval(0.95, n - 1, loc=diff.mean(), scale=se)
print(round(low, 3))자료가 긴 형태(한 줄에 한 연·월)라 먼저 pivot 으로 넓은 형태로 바꿔야 같은 달끼리 뺄 수 있다. 대응표본 t검정은 두 집단을 따로 보는 것이 아니라 짝마다의 차이 하나 를 보는 것이라, 자유도가 n−1 = 11 이다. 95% 신뢰구간 [55,675.7 · 78,736.5] 는 0 을 포함하지 않으며, 이것이 p < 0.05 와 같은 말이다. 표준오차에 모표준편차(ddof=0)를 쓰면 구간이 좁아져 하한이 56,166.577 로 달라진다.
ttest_ind 는 두 집단을 서로 상관없는 것으로 보고 자유도를 22 로 잡는다. 같은 달끼리 짝지어진 자료에서는 짝 안의 상관을 버리는 셈이라 통계량이 크게 작아진다 — 계절 효과가 그대로 잡음으로 남기 때문이다.ddof=0 은 n 으로 나누므로 표준편차가 작게 나오고, 구간이 실제보다 좁아진다. 표본이 12개뿐이라 차이가 두드러진다 — 하한이 55,675.695 대신 56,166.577 이 된다.