brunch

빅분기 2회 기출문제(실기)

작업유형 1

by 첨물

문제집을 사서 풀다 보니, 지난번 기출문제가 있었다.

당시엔 긴장해서 제대로 풀었는지 기억이 나지 않았는데

다시 한번 차근차근 풀어보았다.




1. BostonHousing 데이터세트.

crim 항목의 상위 10번째 값으로 상위 10개의 값을 변환

Age 80 이상인 값에 대하여

crim 의 평균을 구하시오.


[풀이]

1) 데이터 살펴보기


data(BostonHousing)

df<-BostonHousing

str(df)


'data.frame': 506 obs. of 14 variables:

$ crim : num 0.00632 0.02731 0.02729 0.03237 0.06905 ...

$ zn : num 18 0 0 0 0 0 12.5 12.5 12.5 12.5 ...

$ indus : num 2.31 7.07 7.07 2.18 2.18 2.18 7.87 7.87 7.87 7.87 ...

$ chas : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...

$ nox : num 0.538 0.469 0.469 0.458 0.458 0.458 0.524 0.524 0.524 0.524 ...

$ rm : num 6.58 6.42 7.18 7 7.15 ...

$ age : num 65.2 78.9 61.1 45.8 54.2 58.7 66.6 96.1 100 85.9 ...

$ dis : num 4.09 4.97 4.97 6.06 6.06 ...

$ rad : num 1 2 2 3 3 3 5 5 5 5 ...

$ tax : num 296 242 242 222 222 222 311 311 311 311 ...

$ ptratio: num 15.3 17.8 17.8 18.7 18.7 18.7 15.2 15.2 15.2 15.2 ...

$ b : num 397 397 393 395 397 ...

$ lstat : num 4.98 9.14 4.03 2.94 5.33 ...

$ medv : num 24 21.6 34.7 33.4 36.2 28.7 22.9 27.1 16.5 18.9 ...


2) crim 내림차순으로 정렬, 10번째 값으로 1~10개의 값을 바꾸기


library(dplyr)

df_1<- df %>% arrange(desc(crim))

df_1[1:10,1]<-df_1[10,1]


3) Age 80이상에서 crim 평균 내기

result <- df_1 %>% filter(age>=80) %>% summarise(mean=mean(crim))

print(result)


mean

1 5.759387





2. 첫번째 행부터 순서대로 80%까지 데이터를 훈련데이터로 추출, housing_office 항목에서 'total_bedrooms' 변수 결측값(NA) 를 'total_bendrooms' 변수의 중앙값으로 대체하고 대체전의 'total_bedrooms'의 변수 표준편차값과 대체후의 표준편차값의 차이를 구하시오.


[풀이]

1) 데이터 살펴보기


df<-read.csv("https://raw.githubusercontent.com/ageron/handson-ml/master/datasets/housing/housing.csv")

str(df)


'data.frame': 20640 obs. of 10 variables:

$ longitude : num -122 -122 -122 -122 -122 ...

$ latitude : num 37.9 37.9 37.9 37.9 37.9 ...

$ housing_median_age: num 41 21 52 52 52 52 52 52 42 52 ...

$ total_rooms : num 880 7099 1467 1274 1627 ...

$ total_bedrooms : num 129 1106 190 235 280 ...

$ population : num 322 2401 496 558 565 ...

$ households : num 126 1138 177 219 259 ...

$ median_income : num 8.33 8.3 7.26 5.64 3.85 ...

$ median_house_value: num 452600 358500 352100 341300 342200 ...

$ ocean_proximity : Factor w/ 5 levels "<1H OCEAN","INLAND",..: 4 4 4 4 4 4 4 4 4 4 ...



2) 첫행부터 80% 를 훈련값으로 만들기


train<-df[c(1:nrow(df)*0.8),]


3) 표준편차 구하기


sd_1<- sd(train$total_bedrooms, na.rm=T)


4) NA 값을 중앙값으로 대체하고 표준편차 구하기


sd_2<-train %>% mutate(new = ifelse(is.na(total_bedrooms), median(total_bedrooms, na.rm=T), total_bedrooms)) %>% summarise(sd=sd(new))


5) 두 표준편차 값의 차이 구하기


print(abs(sd_1-sd_2))



sd

1 1.956984



3. Insurance 데이터 세트, Charges 항목에서 이상값의 합을 구하시오


[풀이]

1) 데이터 살펴보기

df<-read.csv("https://raw.githubusercontent.com/stedy/Machine-Learning-with-R-datasets/d20658ec6d336af2d4ddb5fd72b6f677dd46136e/insurance.csv")

str(df)

summary(df)


age sex bmi children smoker

Min. :18.00 female:662 Min. :15.96 Min. :0.000 no :1064

1st Qu.:27.00 male :676 1st Qu.:26.30 1st Qu.:0.000 yes: 274

Median :39.00 Median :30.40 Median :1.000

Mean :39.21 Mean :30.66 Mean :1.095

3rd Qu.:51.00 3rd Qu.:34.69 3rd Qu.:2.000

Max. :64.00 Max. :53.13 Max. :5.000

region charges

northeast:324 Min. : 1122

northwest:325 1st Qu.: 4740

southeast:364 Median : 9382

southwest:325 Mean :13270

3rd Qu.:16640


2) charges에서 이상값의 합 구하기


이상치의 정의 : 아래 boxplot을 보면 위 점들을 말하며, 정의는 평균에서 1.5*(3분위수-1분위수) 를 뺀 값보다 낮거나 더한 값보다 높은 값들을 의미한다.


plot(df)

low <- fivenum(df[,7])[2] - 1.5*IQR(df[,7])

upp <- fivenum(df[,7])[4] + 1.5*IQR(df[,7])

result <- sum(df[which(df[,7]>=upp | df[,7]<=low),7])

print(result)

[1] 5852449



keyword
매거진의 이전글빅분기 2회 기출문제(실기)