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

순동·2022년 2월 10일
0

📝 16번

주어진 데이터에서 2022년 5월 sales컬럼의 중앙값을 구하시오.

💻 풀이

> library(readr)
> library(dplyr)

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

> head(basic)
> str(basic)
spec_tbl_df [31 x 5] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
 $ Date  : Date[1:31], format: "2022-05-01" "2022-05-02" "2022-05-03" "2022-05-04" ...
 $ Sales : num [1:31] 976303 7394853 813181 318886 43980 ...
 $ PV    : num [1:31] 45225 262116 23916 4733 47246 ...
 $ UV    : num [1:31] 1142 2959 358 292 560 ...
 $ Events: num [1:31] 0 1 0 0 0 0 1 0 0 0 ..

> result <- (basic %>% filter(year(Date) == 2022 & month(Date) == 05) %>% summarise(median=median(Sales, na.rm=T)))$median
> result
[1] 1477685

📝 17번

주어진 데이터에서 2022년 5월 주말과 평일의 sales컬럼 평균값 차이를 구하시오 (소수점 둘째자리까지 출력, 반올림)

💻 풀이

> library(readr)
> library(dplyr)
> library(lubridate)

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

> head(basic)
> str(basic)
spec_tbl_df [31 x 5] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
 $ Date  : Date[1:31], format: "2022-05-01" "2022-05-02" "2022-05-03" "2022-05-04" ...
 $ Sales : num [1:31] 976303 7394853 813181 318886 43980 ...
 $ PV    : num [1:31] 45225 262116 23916 4733 47246 ...
 $ UV    : num [1:31] 1142 2959 358 292 560 ...
 $ Events: num [1:31] 0 1 0 0 0 0 1 0 0 0 ..

> basic <- basic %>% filter(year(Date) == 2022 & month(Date) == 05)
> wday(basic$Date)
 [1] 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3
 
> weekend <- basic %>% filter(wday(Date) %in% c(1, 7)) %>% summarise(mean=mean(Sales))
> weekday <- basic %>% filter(!wday(Date) %in% c(1, 7)) %>% summarise(mean=mean(Sales))

> result <- round(abs(weekend - weekday), 2)
> print(result)
     mean
1 3010339

📝 18번

주어진 데이터에서 2022년 월별 Sales 합계 중 가장 큰 금액과
2023년 월별 Sales 합계 중 가장 큰 금액의 차이를 절대값으로 구하시오. 단, Events컬럼이 '1'인 경우 80%의 Salse값만 반영함
(최종값은 소수점 반올림 후 정수 출력)

💻 풀이

> library(readr)
> library(dplyr)
> library(lubridate)

> basic <- read_csv('basic2.csv')
> head(basic)
> str(basic)

> basic$Sales <- ifelse(basic$Events == 1, basic$Sales * 0.8, basic$Sales)
> year2022 <- basic %>% group_by(year(Date), month(Date)) %>% filter(year(Date) == 2022) %>% summarise(sum=sum(Sales))
> max_2022 <- max(year2022$sum)
> max_2022  # 197145878

> year2023 <- basic %>% group_by(year(Date), month(Date)) %>% filter(year(Date) == 2023) %>% summarise(sum=sum(Sales))
> max_2023 <- max(year2023$sum)
> max_2023  # 239619314

> result <- round(abs(max_2022 - max_2023), 2)
> print(result)
[1] 42473436

📝 19번

basic1 데이터 중 'f4'를 기준으로 basic3 데이터 'f4'값을 병합하고, 병합한 데이터에서 r2 결측치를 제거한 다음, 앞에서 부터 20개 데이터를 선택하고 'f2'컬럼 합을 구하시오.

💻 풀이

> library(readr)
> library(dplyr)

> basic1 <- read_csv('basic1.csv')
# A tibble: 6 x 8
  id      age city     f1    f2 f3    f4       f5
  <chr> <dbl> <chr> <dbl> <dbl> <chr> <chr> <dbl>
1 id01      2 서울     NA     0 NA    ENFJ   91.3
2 id02      9 서울     70     1 NA    ENFJ   60.3
3 id03     27 서울     61     1 NA    ISTJ   17.3
4 id04     75 서울     NA     2 NA    INFP   52.7
5 id05     24 서울     85     2 NA    ISFJ   29.3
6 id06     22 서울     57     0 vip   INTP   20.1

> basic3 <- read_csv('basic3.csv')
# A tibble: 6 x 3
  f4    r1    r2   
  <chr> <chr> <chr>
1 INFP  ENFJ  ENTJ 
2 ENFP  INFJ  NA   
3 INFJ  ENFP  ENTP 
4 ENFJ  INFP  ISFP 
5 INTJ  ENFP  ENTP 
6 ENTJ  INFP  NA  

> head(basic1)
> head(basic3)

> basic <- left_join(basic1, basic3, by="f4")

> colSums(is.na(basic))
> basic <- head(basic[!is.na(basic$r2), ], 20)

> result <- sum(basic$f2)
> print(result)
[1] 15

📝 20번

basic1 데이터 중 'age'컬럼 이상치를 제거하고, 동일한 개수로 나이 순으로 3그룹으로 나눈 뒤 각 그룹의 중앙값을 더하시오.
(이상치는 음수, 0, 소수점)

💻 풀이

> library(readr)
> library(dplyr)
> library(ggplot2)

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

> basic <- basic %>% filter(age > 0 & (age * 10) %% 10 == 0)

> basic <- basic %>% mutate(group=cut_number(age, 3)) %>% group_by(group) %>% summarise(med=median(age))

> result <- sum(basic$med)
> print(result)
[1] 165

0개의 댓글