5회 기출 변형#

Hits

광고 한번 눌러주세유

작업 1유형#

import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e5_p1_1_.csv')
df.head(5)
시도명 시군구명 종량제봉투종류 종량제봉투처리방식 종량제봉투용도 종량제봉투사용대상 1L가격 1.5L가격 2L가격 2.5L가격 ... 60L가격 75L가격 100L가격 120L가격 125L가격 관리부서명 관리부서전화번호 데이터기준일자 제공기관코드 제공기관명
0 경기도 안양시 규격봉투 매립용 생활쓰레기 사업장용 0 0 0 0 ... 0 2100 0 0 0 자원순환과 031-8045-5448 2022-08-12 3830000 경기도 안양시
1 경기도 안양시 규격봉투 매립용 생활쓰레기 기타 0 0 0 0 ... 0 2100 0 0 0 자원순환과 031-8045-5448 2022-08-12 3830000 경기도 안양시
2 경기도 안양시 규격봉투 소각용 음식물쓰레기 가정용 0 50 0 80 ... 0 0 0 0 0 자원순환과 031-8045-5448 2022-08-12 3830000 경기도 안양시
3 경기도 안양시 규격봉투 소각용 음식물쓰레기 사업장용 0 50 0 80 ... 0 0 0 0 0 자원순환과 031-8045-5448 2022-08-12 3830000 경기도 안양시
4 경기도 안양시 규격봉투 소각용 음식물쓰레기 기타 0 50 0 80 ... 0 0 0 0 0 자원순환과 031-8045-5448 2022-08-12 3830000 경기도 안양시

5 rows × 26 columns

1-1

20L가격과 5L가격이 모두 0원이 아닌 데이터만 필터를 한 후, 각 row별로 20L가격과 5L가격의 차이를 ‘차이가격’ 이라 부른다고 하자. 시도명 별 차이가격의 평균가격을 비교할때 그 값이 가장 큰 금액을 반올림하여 소숫점 이하 1자리까지 구하여라

Hide code cell source
pd.set_option('display.max_columns',100)

f = df[(df['5L가격'] != 0) & ((df['20L가격'] != 0))].reset_index(drop=True)
f['차이가격'] = f['20L가격'] -f['5L가격']

r = f.groupby(['시도명'])['차이가격'].mean().sort_values().to_frame()
display(r.tail(3))
result = r['차이가격'].max().round(1)
print(result)
차이가격
시도명
제주특별자치도 580.0
부산광역시 593.0
인천광역시 619.0
619.0

Attention

DataUrl = https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e5_p1_2.csv 성인 체중 및 키 데이터 : 자체 제작

import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e5_p1_2_.csv')
df.head(5)
ID height(cm) weight(kg)
0 user_1 173.0 67.5
1 user_2 149.5 82.5
2 user_3 143.8 64.6
3 user_4 163.1 87.2
4 user_5 159.6 77.1

1-2

BMI는 몸무게(kg) / (키(M) * 키(M)) 로 정의 된다. 초고도 비만은 BMI 25이상 , 고도 비반은 BMI 25미만 - 23이상 , 정상은 23미만 - 18.5이상 저체중은 18.5미만으로 정의 된다. 주어진 데이터에서 초고도비만 인원 + 저체중 인원 의 숫자는?

Hide code cell source
def category(x):
    if x >=25:
        return 'a'
    
    elif x >=23:
        return 'b'

    elif x >= 18.5:
        return 'c'
    
    else:
        return 'd'
    
df['bmi'] = df[df.columns[2]] / (df[df.columns[1]] /100)**2
df['bmi_category'] = df['bmi'].map(category)
result  = df[df.bmi_category.isin(['a','d'])].shape[0]
print(result) # 데이터를 잘못 만들었는지 정상이 아닌 사람이 엄청 많네요....
8998

Attention

DataUrl = https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e5_p1_2.csv 년도별 서울 각 구의 초,중,고 전출 전입 인원 : https://data.seoul.go.kr/dataList/10729/S/2/datasetView.do & 후처리

import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e5_p1_3.csv')
df.head(5)
지역 초등학교_전출_도내 초등학교_전출_도외 초등학교_전입_도내 초등학교_전입_도외 중학교_전출_도내 중학교_전출_도외 중학교_전입_도내 중학교_전입_도외 고등학교_전출_도내 고등학교_전출_도외 고등학교_전입_도내 고등학교_전입_도외 년도
0 종로구 221 132 255 126 63 71 104 73 203 72 166 75 2012
1 중구 295 139 203 100 66 43 58 44 156 37 104 39 2012
2 용산구 380 269 302 174 134 78 91 106 102 66 113 48 2012
3 성동구 643 344 376 221 154 103 98 82 179 37 153 41 2012
4 광진구 560 382 595 312 165 158 158 118 115 70 154 66 2012

1-3

순유입인원은 초중고 도내,도외 전입인원에서 초중고 도내, 도외 전출인원을 뺀값이다. 각년도별로 가장 큰 순유입인원을 가진 지역구의 순유입인원을 구하고 전체 기간의 해당 순유입인원들의 합을 구하여라

Hide code cell source
df['순유입인원'] = \
df[[x for x in df.columns if '전입' in x]].sum(axis=1) -\
df[[x for x in df.columns if '전출' in x ]].sum(axis=1)

result = df.groupby('년도')['순유입인원'].max().sum().sum()
print(result)
13853

작업 2유형#

Attention

벤츠 차량 가격 예측 : https://www.kaggle.com/datasets/mysarahmadbhat/mercedes-used-car-listing train = https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e5_p2_train_.csv test = https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e5_p2_test_.csv

예측 변수 price, test.csv에 대해 ID별로 price 값을 예측하여 제출, 제출 데이터 컬럼은 ID와 price 두개만 존재해야함. 평가지표는 rmse

import pandas as pd
train = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e5_p2_train_.csv')
test = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e5_p2_test_.csv')

display(train.head(2))
test.head(2)
ID model year price transmission mileage fuelType tax mpg engineSize
0 10170 A Class 2012 11940 Automatic 46000 Diesel 30 64.2 2.1
1 9551 CL Class 2020 38624 Semi-Auto 19 Petrol 150 36.7 2.0
ID model year transmission mileage fuelType tax mpg engineSize
0 0 SLK 2005 Automatic 63000 Petrol 325 32.1 1.8
1 2 SL CLASS 2016 Automatic 6200 Petrol 555 28.0 5.5
Hide code cell source
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.ensemble import RandomForestRegressor
import numpy as np
y = train['price']
x = train.drop(columns =['price','ID'])
test_x = test.drop(columns =['ID'])


dum_x = pd.get_dummies(x)


# train에는 있고, test에는 없는 데이터 존재 컬럼숫자가 다름 -> reindex해줘야함
dum_test = pd.get_dummies(test_x)
dum_test = dum_test.reindex(columns = dum_x.columns, fill_value=0)



x_train,x_test,y_train,y_test = train_test_split(dum_x,y)


rr = RandomForestRegressor()
rr.fit(x_train,y_train)


pred = rr.predict(x_test)
print('test rmse', np.sqrt(mean_squared_error(y_test,pred)))


pred_test = rr.predict(dum_test)

sumission = pd.DataFrame()
sumission['ID'] = test['ID']
sumission['price']  = pred_test
sumission.head()
# sumission.to_csv('00000000.csv',index=Fasle)
test rmse 2608.739745358064
ID price
0 0 4269.100000
1 2 64883.916667
2 14 17303.080000
3 15 14416.230000
4 18 15897.000000

작업 3유형#

Attention

어느 학교에서 추출한 55명 학생들의 키 정보이다.
DataUrl = https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e5_p3_1.csv 이 학생들의 키의 95% 신뢰구간을 구하고자 한다.

import pandas as pd 
df= pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e5_p3_1.csv')
df.head()
ID height
0 user_1 164.57
1 user_2 174.99
2 user_3 171.41
3 user_4 162.47
4 user_5 167.11

3-1-a

55명 학생들의 키에 대한 표본 평균을 구하여라(반올림하여 소숫점 3째자리까지

Hide code cell source
import numpy as np
mean = np.round(np.mean(df.height),3)
print(mean)
169.937

3-1-b

t분포 양쪽 꼬리에서의 t 값을 구하여라 (반올림하여 소수4째자리까지)

Hide code cell source
import numpy as np
from scipy.stats import t

std = np.std(df.height, ddof=1)
n = len(df.height)

# 신뢰수준, 자유도
confidence_level = 0.95
ddof = n - 1

# t 분포의 양쪽 꼬리에서의 t값
t_value = round(t.ppf((1 + confidence_level) / 2, ddof),4)
print(t_value)
2.0049

3-1-c

95% 신뢰구간을 구하여라(print(lower,upper) 방식으로 출력, 각각의 값은 소숫점 이하 3째자리까지)

Hide code cell source
# 신뢰구간 계산
lower = round(mean - t_value * std / np.sqrt(n),3)
upper = round(mean + t_value * std / np.sqrt(n),3)
print(lower,upper)
168.321 171.553

Attention

A,B,C 세 공장에서 생산한 동일한 제품의 길이 데이터 이다. DataUrl = https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e5_p3_2.csv 공장간의 제품 길이 차이가 유의미한지 확인 하려한다.

import pandas as pd 
df= pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/krdatacertificate/e5_p3_2.csv')
df.head()
ID value
0 A 84.179434
1 A 93.971003
2 A 62.140957
3 A 72.911723
4 A 79.252747

3-1-a

3 그룹의 데이터에 대해 크루스칼-왈리스 검정을 사용하여 검정 통계량을 반올림하여 소숫점 이하 3자리까지 구하여라

Hide code cell source
from scipy.stats import kruskal
a = df[df.ID =='A'].value.values
b = df[df.ID =='B'].value.values
c = df[df.ID =='C'].value.values

s,p = kruskal(a,b,c)

round_s = round(s,3)
print(round_s)
6.521

3-1-b

3 그룹의 데이터에 대해 크루스칼-왈리스 검정을 사용하여 p-value를 반올림하여 소숫점 이하 3자리까지 구하여라. 귀무가설과 대립가설중 0.05 유의수준에서 유의한 가설을 출력하라

Hide code cell source
round_p = round(p,3)
print(round_p)
print('대립')
0.038
대립