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

순동·2022년 2월 3일
0

6번

'f4'컬럼의 값이 'ESFJ'인 데이터를 'ISFJ'로 대체하고, 'city'가 '경기'이면서 'f4'가 'ISFJ'인 데이터 중 'age'컬럼의 최대값을 출력하시오. (데이터셋 : basic1.csv)

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

> basic$f4[basic$f4 == 'ENFJ'] <- 'ISFJ'
> result <- basic %>% filter(city == '경기' & f4 == 'ISFJ') %>% summarise(max = max(age))
> print(result)
    max
[1]  90

7번

주어진 데이터 셋에서 'f2' 컬럼이 1인 조건에 해당하는 데이터의 'f1'컬럼 누적합을 계산한다. 이때 발생하는 누적합 결측치는 바로 뒤의 값을 채우고, 누적합의 평균값을 출력한다. (단, 결측치 바로 뒤의 값이 없으면 다음에 나오는 값을 채워넣는다) (데이터셋 : basic1.csv)

> basic <- read_csv('basic1.csv')
> basic <- basic$f1[basic$f2 == 1]

> my_cumsum <- cumsum(ifelse(is.na(basic), 0, basic)) + (basic*0)

> library(zoo)

> result <- mean(na.locf(my_cumsum, fromLast = TRUE))
> print(result)
[1] 980.3784

8번

주어진 데이터에서 f5'컬럼을 표준화 (Standardization)하고 중앙값을 구하시오. (데이터셋 : basic1.csv)

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

> f5_standard <- preProcess(basic, method = c('center', 'scale'))

> result <- median(predict(f5_standard, basic)$f5)
> print(result)
[1] 0.2593133

❗ caret 패키지의 preProcess( ) ❗

  1. 정규화(Min-Max Normalization) : (x - min) / (max - min)
    => preProcess(data, method = 'range')

  2. 표준화(Standardization) : (x - 평균) / 표준편차
    => preProcess(data, method = c('center', 'scale'))


9번

주어진 데이터에서 20세 이상인 데이터를 추출하고 'f1'컬럼의 결측치를 최빈값으로 채운 후, f1 컬럼의 여-존슨과 박스콕스 변환 값을 구하고, 두 값의 차이를 절대값으로 구한다음 모두 더해 소수점 둘째 자리까지 출력(반올림)하시오. (데이터셋 : basic1.csv)

> basic <- basic %>% filter(age >= 20)
> f1_mode <- as.numeric(names(which.max(table(basic$f1))))
> f1_mode
[1] 50

> basic$f1 <- ifelse(is.na(basic$f1) == TRUE, f1_mode, basic$f1)

> johnson <- preProcess(as.data.frame(basic$f1), method = c('YeoJohnson', 'center', 'scale'))
> john <- predict(johnson, as.data.frame(basic$f1))

> boxcox <- preProcess(as.data.frame(basic$f1), method = c('BoxCox', 'center', 'scale'))
> box <- predict(boxcox, as.data.frame(basic$f1))

> result <- round(sum(abs(john - box)), 2)
> print(result)
[1] 0.6

❗ R에서는 최빈값을 구하는 함수가 없기 때문에 직접 구해야 함 ❗


10번

주어진 데이터에서 'f5'컬럼을 min-max 스케일 변환한 후, 상위 5%와 하위 5% 값의 합을 구하시오. (데이터셋 : basic1.csv)

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

> minmax <- preProcess(basic, method = 'range')
> quantile_f5 <- basic %>% mutate(minmax_f5 = predict(minmax, basic)$f5) %>%
		         summarise(x1 = quantile(minmax_f5, 0.95), x2 = quantile(minmax_f5, 0.05))
> quantile_f5
     x1     x2
1 0.988 0.0367

> result <- sum(quantile_f5)
> print(result)
[1] 1.024874

0개의 댓글