자기계발/자격증

[빅데이터 분석기사] 2회 기출문제 연습(R 코드) - 1/3

혁이e 2022. 6. 14.

2회 기출문제를 R 을 활용하여 연습해 본 결과물이다.

문제를 복원하는 것은 문제가 될 수도 있으니 필답형은 개념만 공유하고, 작업형은 실습한 코드를 공유 한다. 

(정답이 아닐 수도 있지만, 어느 정도 부분점수는 당연히 기대할 수 있을 것이다)

 

(1) 필답형

 이상치 / 평균대치법 / 초매개변수 / 비지도학습 / 과대적합 / 후진 소거법 / 부스팅 

 GBM(Gradient Boost Machine) / 노드 계산(가중치, bias 포함) / ROC 곡선 

 

(2) 작업형

 1. BostonHousing 데이터 세트에서 crim 항목의 상위에서 10번째 값으로 상위 10개의 값을 변환하고, age 80 이상인 값에 대해서 crim 평균을 구하시오.

 

# BostonHousing 데이터 불러오기

> library(mlbench)
> data("BostonHousing")
> ds <- BostonHousing

 

# 데이터셋 확인
> str(ds)

'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 ...


> summary(ds)
      crim                zn             indus       chas         nox               rm             age        
 Min.   : 0.00632   Min.   :  0.00   Min.   : 0.46   0:471   Min.   :0.3850   Min.   :3.561   Min.   :  2.90  
 1st Qu.: 0.08205   1st Qu.:  0.00   1st Qu.: 5.19   1: 35   1st Qu.:0.4490   1st Qu.:5.886   1st Qu.: 45.02  
 Median : 0.25651   Median :  0.00   Median : 9.69           Median :0.5380   Median :6.208   Median : 77.50  
 Mean   : 3.61352   Mean   : 11.36   Mean   :11.14           Mean   :0.5547   Mean   :6.285   Mean   : 68.57  
 3rd Qu.: 3.67708   3rd Qu.: 12.50   3rd Qu.:18.10           3rd Qu.:0.6240   3rd Qu.:6.623   3rd Qu.: 94.08  
 Max.   :88.97620   Max.   :100.00   Max.   :27.74           Max.   :0.8710   Max.   :8.780   Max.   :100.00  
      dis              rad              tax           ptratio            b              lstat            medv      
 Min.   : 1.130   Min.   : 1.000   Min.   :187.0   Min.   :12.60   Min.   :  0.32   Min.   : 1.73   Min.   : 5.00  
 1st Qu.: 2.100   1st Qu.: 4.000   1st Qu.:279.0   1st Qu.:17.40   1st Qu.:375.38   1st Qu.: 6.95   1st Qu.:17.02  
 Median : 3.207   Median : 5.000   Median :330.0   Median :19.05   Median :391.44   Median :11.36   Median :21.20  
 Mean   : 3.795   Mean   : 9.549   Mean   :408.2   Mean   :18.46   Mean   :356.67   Mean   :12.65   Mean   :22.53  
 3rd Qu.: 5.188   3rd Qu.:24.000   3rd Qu.:666.0   3rd Qu.:20.20   3rd Qu.:396.23   3rd Qu.:16.95   3rd Qu.:25.00  
 Max.   :12.127   Max.   :24.000   Max.   :711.0   Max.   :22.00   Max.   :396.90   Max.   :37.97   Max.   :50.00  

 

> head(ds)
     crim zn indus chas   nox    rm  age    dis rad tax ptratio      b lstat medv
1 0.00632 18  2.31    0 0.538 6.575 65.2 4.0900   1 296    15.3 396.90  4.98 24.0
2 0.02731  0  7.07    0 0.469 6.421 78.9 4.9671   2 242    17.8 396.90  9.14 21.6
3 0.02729  0  7.07    0 0.469 7.185 61.1 4.9671   2 242    17.8 392.83  4.03 34.7
4 0.03237  0  2.18    0 0.458 6.998 45.8 6.0622   3 222    18.7 394.63  2.94 33.4
5 0.06905  0  2.18    0 0.458 7.147 54.2 6.0622   3 222    18.7 396.90  5.33 36.2
6 0.02985  0  2.18    0 0.458 6.430 58.7 6.0622   3 222    18.7 394.12  5.21 28.7

 

> library(dplyr)
다음의 패키지를 부착합니다: ‘dplyr’

The following objects are masked from ‘package:stats’:
    filter, lag
The following objects are masked from ‘package:base’:
    intersect, setdiff, setequal, union

 

# crim 항목 내림차순으로 정렬

# arrange 는 행 전체가, sort 함수는 행 전체가 아닌 그 열만 정렬된다. 

# 이 문제는 sort 나 arrange 다 가능하지만,  범용적으로는 arrange 가 주로 사용되므로 arrange 사용함.
> ds2 <- ds %>% arrange(desc(ds$crim))
> top10 <- ds2$crim[10]
> top10
[1] 25.9406

 

# crim 10번째 항목보다 큰 값들을 다 10번째 값으로 변환

> ds3 <- ds2
> ds3$crim <- ifelse(ds3$crim > top10, top10, ds3$crim)

 

# age 80 이상으로 필터.

# 이 데이터는 결측치 없어서 na.rm 사용할 필요가 없지만 연습으로 넣어봄.
> ds4<- ds3 %>% filter(ds3$age >=80, na.rm = TRUE)

 

#평균값 확인 후 변수 만들어서 출력
> mean(ds4$crim)
[1] 5.759387

> result <- mean(ds4$crim)

 

> print(result)
[1] 5.759387

댓글

💲 추천 글