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

순동·2022년 2월 6일
0

📝 11번

주어진 데이터에서 상위 10개 국가의 접종률 평균과 하위 10개 국가의 접종률 평균을 구하고, 그 차이를 구해보세요 (이상치 - 100%가 넘는 접종률 제거, 소수 첫째 자리까지 출력)

💻 풀이

> covid <- read.csv('covid-vaccination-vs-death_ratio.csv', header=TRUE)

> covid <- covid[covid$ratio < 100, ]

> high <- covid %>% group_by(country) %>% summarise(max = max(ratio))
> high
# A tibble: 200 x 2
   country               max
   <chr>               <dbl>
 1 Afghanistan          8.78
 2 Albania              36.8 
 3 Algeria              14.4 
 4 Andorra             71.1 
 5 Angola              17.3 
 6 Anguilla             65.5 
 7 Antigua and Barbuda 61.4 
 8 Argentina            78.9 
 9 Armenia             21.7 
10 Aruba               77.8 
# ... with 190 more rows

> high_sort <- high %>% arrange(desc(max))

> high <- head(high_sort, 10)
> low <- tail(high_sort, 10)

> high_mean <- mean(high$max)
> low_mean <- mean(low$max)

> result <- round(high_mean - low_mean, 1)
> print(result)
[1] 89.4

📝 12번

주어진 데이터에서 상관관계를 구하고, quality와의 상관관계가 가장 큰 값과, 가장 작은 값을 구한 다음 더하시오. (단, quality와 quality 상관관계 제외, 소수점 둘째 자리까지 출력)

💻 풀이

> wine <- read.csv('winequality-red.csv')

> corr <- as.data.frame(cor(wine)['quality', ])
> corr <- corr[-12, ]
> corr
 [1] 0.12405165 -0.39055778  0.22637251  0.01373164 -0.12890656 -0.05065606 -0.18510029 -0.17491923 -0.05773139  0.25139708  0.47616632

> cor_max <- max(abs(corr))
> cor_max
[1] 0.4761663

> cor_min <- min(abs(corr))
> cor_min
[1] 0.01373164

> result <- round(abs(cor_max - cor_min), 2)
> print(result)
[1] 0.46

📝 13번

city와 f4를 기준으로 f5의 평균값을 구한 다음, f5를 기준으로 상위 7개 값을 모두 더해 출력하시오. (소수점 둘째자리까지 출력)

💻 풀이

> library(dplyr)
> library(readr)

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

> basic <- basic %>% group_by(city, f4) %>% summarise(mean=mean(f5, na.rm=T)) %>% arrange(desc(mean)) %>% head(7)

> result <- round(sum(basic$mean), 2)
> print(result)
[1] 643.68

📝 14번

주어진 데이터 셋에서 age컬럼 상위 20개의 데이터를 구한 다음
f1의 결측치를 중앙값으로 채운다. 그리고 f4가 ISFJ와 f5가 20 이상인 f1의 평균값을 출력하시오.

💻 풀이

library(readr)
library(dplyr)

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

basic <- basic %>% arrange(desc(age)) %>% head(20)

basic['f1'] <- ifelse(is.na(basic$f1), median(basic$f1, na.rm=T), basic$f1)
result <- basic %>% filter(f4 == 'ISFJ', f5 >= 20) %>% summarise(mean=mean(f1))
print(result)
# A tibble: 1 x 1
   mean
  <dbl>
1  73.9

📝 15번

f2가 0값인 데이터를 age를 기준으로 오름차순 정렬하고, 앞에서 부터 20개의 데이터를 추출한 후 f1 결측치(최소값)를 채우기 전과 후의 분산 차이를 계산하시오 (소수점 둘째 자리까지)

💻 풀이

> library(readr)
> library(dplyr)

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

> basic <- basic %>% filter(f2 == 0) %>% arrange(age) %>% head(20)
> before_f1 <- var(basic$f1, na.rm=T)
> before_f1  # 351.7636

> basic$f1 <- ifelse(is.na(basic$f1), min(basic$f1, >na.rm=T), basic$f1)
> after_f1 <- var(basic$f1)
> after_f1  # 313.3263

>result <- round(abs(before_f1 - after_f1), 2)
>print(result)
[1] 38.44

0개의 댓글