실기
연습 화면을 불러오는 중…
연습 화면을 불러오는 중…
Python으로 준비하는 실기
코딩이 처음이라면 한 줄 실행부터.
설명 옆에서 직접 써 보고, 결과를 확인하며 배웁니다.
설치·가입 없이 이 화면에서 실행
코드를 실행해 안녕하세요를 출력해요.
처음 보는 코드를 읽고, 오류 메시지를 읽고, 짧은 코드를 스스로 고칠 수 있다.
표에서 원하는 숫자 하나를 뽑아내는 길을 스스로 찾을 수 있다.
전처리 조건을 그대로 코드로 옮겨, 문제가 요구한 자리수로 값을 낼 수 있다.
학습 데이터로 모델을 만들고 평가 데이터의 예측을 규격에 맞는 CSV 로 낼 수 있다.
검정통계량과 p-value 를 구하고 그 결과를 과장 없이 문장으로 옮길 수 있다.
도움말과 파일을 확인하며 혼자 문제를 풀고 제출할 수 있다.
배운 내용을 실전으로
adult-work.csv 는 인구조사 표본 5,000행이다. workclass 의 빈칸은 원자료의 실제 결측이다.
(1) workclass 가 비어 있지 않은 행으로 workclass(행) × sex(열) 교차표를 만들고, 각 `workclass` 안에서 Female 이 차지하는 비율을 구한다. 그 비율이 가장 높은 workclass 의 비율을 소수점 넷째 자리까지 반올림해 답안에 적는다.
(2) sex × income 으로 hours_per_week 의 평균 교차표를 만들고, Male 이면서 >50K 인 칸의 값을 소수점 둘째 자리까지 반올림해 답안에 적는다.
value_counts(dropna=False) 로 빈칸을 센다. 결측을 하나의 범주로 남길지 뺄지가 답을 가른다.notna() 로 먼저 거른다.pd.crosstab(행, 열) 은 두 범주의 조합별 개수를 센다.table['Female'] / table.sum(axis=1) — axis=1 이 행 방향 합이다. 이 축 하나가 질문의 의미를 바꾼다.pivot_table(values=..., aggfunc='mean') 이다.import pandas as pd
df = pd.read_csv('adult-work.csv')
known = df[df['workclass'].notna()]
table = pd.crosstab(known['workclass'], known['sex'])
ratio = table['Female'] / table.sum(axis=1)
print(round(ratio.max(), 4))
hours = df.pivot_table(index='sex', columns='income', values='hours_per_week', aggfunc='mean')
print(round(hours.loc['Male', '>50K'], 2))table.sum(axis=1) 은 행마다 의 합이라 "그 workclass 안에서의 비율" 이 된다. axis=0 을 쓰면 전체 Female 중 비율이라 전혀 다른 질문의 답이다. 이 자료에서 가장 높은 곳은 Local-gov 로 0.3967 이다. 결측을 제외하지 않고 fillna('unknown') 으로 한 칸을 만들면 0.5273 이 되어 답이 바뀐다. crosstab 은 개수를, pivot_table(aggfunc='mean') 은 평균을 센다.
fillna('unknown') 으로 빈칸을 범주화하면 그 범주가 표에 한 줄 더 생기고, 이 자료에서는 그 줄의 Female 비율이 가장 높아져 답이 0.3967 에서 0.5273 으로 바뀐다.axis=0 은 "전체 Female 중 이 workclass 가 몇 퍼센트" 를 계산한다. 문항이 물은 것은 "이 workclass 중 Female 이 몇 퍼센트" 다. 두 값은 같은 표에서 나오지만 전혀 다른 질문의 답이다.