[R] 빅데이터분석기사 - 유형1 ①

1번

자동차 데이터 셋(mtcars)에서 qsec 컬럼 컬럼을 Min-Max Scale(최소-최대 정규화)로 변환 후 0.5보다 큰 값을 가지는 레코드(row) 수를 구하시오. (데이터셋 : mtcars)

📌 사용자 정의 함수

> min_max <- function(x) {
+ return((x - min(x)) / (max(x) - min(x)))
+ }

> result <- sum(min_max(mtcars$qsec) > 0.5)
> print(result)
[1] 9

📌caret 패키지의 preProcess()

> library(caret)

> minmax <- preProcess(mtcars, method = 'range')

> result <- sum(predict(minmax, mtcars)$qsec > 0.5)
> print(result)
[1] 9

2번

주어진 데이터에서 이상치(소수점 나이)를 찾고 올림, 내림, 버림(절사)했을때 3가지 모두 이상치 'age' 평균을 구한 다음 모두 더하여 출력하시오. (데이터셋 : basic1.csv)

> library(readr)

> basic <- read_csv("basic1.csv")

> outlier <- basic[(basic$age * 10) %% 10 != 0, ]

> mean_ceil <- mean(ceiling(outlier$age)) 
> mean_floor <- mean(floor(outlier$age)) 
> mean_trunc <- mean(trunc(outlier$age)) 

> result <- mean_ceil + mean_floor + mean_trunc
> print(result)
[1] 69.5

3번

결측치가 80%이상 되는 컬럼은(변수는) 삭제하고, 80% 미만인 결측치가 있는 컬럼은 'city'별 중앙값으로 값을 대체하고 'f1'컬럼의 평균값을 출력하세요. (데이터셋 : basic1.csv )

> colSums(is.na(basic) / nrow(basic))
 id  age city   f1   f2   f3   f4   f5 
0.00 0.00 0.00 0.31 0.00 0.95 0.00 0.00

> basic$f3 <- NULL 

> basic$city <- as.factor(basic$city) 
> levels(basic$city)
[1] "경기" "대구" "부산" "서울"

> city_med <- basic %>% group_by(city) %>% summarise(med = median(f1, na.rm=T))
> head(city_med)
  city    med
1 경기     58
2 대구     75
3 부산     62
4 서울     68

> basic$f1[is.na(basic$f1) == T & basic$city == '경기'] <- city_med$med[city_med == '경기']
> basic$f1[is.na(basic$f1) == T & basic$city == '대구'] <- city_med$med[city_med == '대구']
> basic$f1[is.na(basic$f1) == T & basic$city == '부산'] <- city_med$med[city_med == '부산']
> basic$f1[is.na(basic$f1) == T & basic$city == '서울'] <- city_med$med[city_med == '서울']

> result <- mean(basic$f1)
> print(result)
[1] 65.52

4번

주어진 데이터 중 'f1' 컬럼 결측 데이터를 제거하고, 'city'와 'f2'을 기준으로 묶어 합계를 구하고, 'city가 경기이면서 f2가 0'인 조건에 만족하는 f1 값을 구하시오. (데이터셋 : basic1.csv)

> basic <- read_csv('basic1.csv')
> colSums(is.na(basic))
  id  age city  f1   f2  f3   f4   f5 
  0    0   0    31   0   95   0    0 

> basic <- basic %>% filter(!is.na(f1)) 

> city_f2_sum <- basic %>% group_by(city, f2) %>% summarise(sum = sum(f1))

> resutl <- city_f2_sum %>% filter(city == '경기' & f2 == 0)
> print(result$sum)
[1] 833

5번

주어진 데이터 중 'f4'컬럼 값이 'ENFJ'와 'INFP'인 'f1'의 표준편차 차이를 절대값으로 구하시오. (데이터셋 : basic1.csv)

> library(dplyr)

> enfj_sd <- basic %>% filter(f4 == 'ENFJ') %>% summarise(sd = sd(f1, na.rm=T))
> infp_sd <- basic %>% filter(f4 == 'INFP') %>% summarise(sd = sd(f1, na.rm=T))

> result <- abs(enfj_sd - infp_sd)
> print(result)
        sd
1 5.859622

좋은 웹페이지 즐겨찾기