본문 바로가기
R

R - 데이터 추출하기(dplyr : 문제 복습)

by d22pinsights 2024. 7. 11.

이전 포스팅들은 Do it! 쉽게 배우는 R데이터 분석 책으로 공부하면서 나름 대로 혼자 정리한 건데,

오늘은 책에 있는 문제를 풀어보기로 했다

이제부터 풀 문제들은 6장 자유자재로 데이터 가공하기에 나와있는 문제이다

 

혼자서 해보기 -133p

mpg 데이터를 이용해 분석 문제를 해결해 보세요.

Q1. 자동차 배기량에 따라 고속도로 연비가 다른지 알아보려고 합니다. displ(배기량) 4 이하인 자동차와 5 이상인 자동차 어떤 자동차의 hwy(고속도로 연비) 평균적으로 높은지 알아보세요.

# 내 답
mpg <- as.data.frame(ggplot2::mpg)
displ4 <- mpg %>% filter(displ <=4)
displ5 <- mpg %>% filter(displ >=5)
mean(displ4); mean(displ5)


#답지
mpg <- as.data.frame(ggplot2::mpg)   # mpg 데이터 불러오기

mpg_a <- mpg %>% filter(displ <= 4)  # displ 4 이하 추출
mpg_b <- mpg %>% filter(displ >= 5)  # displ 5 이상 추출

mean(mpg_a$hwy)  # displ 4 이하 hwy 평균
## [1] 25.96319
mean(mpg_b$hwy)  # displ 5 이상 hwy 평균
## [1] 18.07895

 

 

Q2. 자동차 제조 회사에 따라 도시 연비가 다른지 알아보려고 합니다. "audi" "toyota" 어느 manufacturer(자동차 제조 회사) cty(도시 연비) 평균적으로 높은지 알아보세요.

# 내 답
audi <- mpg %>% filter(manufacturer=="audi")
toyota <- mpg %>% filter(manufacturer=="toyota")
mean(audi$cty); mean(toyota$cty)

# 답지
mpg_audi <- mpg %>% filter(manufacturer == "audi")      # audi 추출
mpg_toyota <- mpg %>% filter(manufacturer == "toyota")  # toyota 추출

mean(mpg_audi$cty)    # audi의 cty 평균
## [1] 17.61111
mean(mpg_toyota$cty)  # toyota의 cty 평균
## [1] 18.52941

Q3. "chevrolet", "ford", "honda" 자동차의 고속도로 연비 평균을 알아보려고 합니다. 회사들의 자동차를 추출한 hwy 전체 평균을 구해보세요.

# 내 답
car <- mpg %>% filter(manufacturer %in% c("chevrolet","ford","honda")
mean(car$hwy)

# 답지
# manufacturer가 chevrolet, ford, honda에 해당하면 추출
mpg_new <- mpg %>% filter(manufacturer %in% c("chevrolet", "ford", "honda"))
mean(mpg_new$hwy)
## [1] 22.50943

 

 

혼자서 해보기 - 138p
  • Q1. mpg 데이터는 11개 변수로 구성되어 있습니다. 이 중 일부만 추출해서 분석에 활용하려고 합니다. mpg 데이터에서 class(자동차 종류), cty(도시 연비) 변수를 추출해 새로운 데이터를 만드세요. 새로 만든 데이터의 일부를 출력해서 두 변수로만 구성되어 있는지 확인하세요.
# 내 답
mpg <- as.data.frame(ggplot2::mpg)
cla_cty <- mpg %>% select(class, cty)
head(cla_cty)

# 답지
mpg <- as.data.frame(ggplot2::mpg)  # mpg 데이터 불러오기

df <- mpg %>% select(class, cty)    # class, cty 변수 추출
head(df)                            # df 일부 출력
##     class cty
## 1 compact  18
## 2 compact  21
## 3 compact  20
## 4 compact  21
## 5 compact  16
## 6 compact  18
  • Q2. 자동차 종류에 따라 도시 연비가 다른지 알아보려고 합니다. 앞에서 추출한 데이터를 이용해서 class(자동차 종류)가 "suv"인 자동차와 "compact"인 자동차 중 어떤 자동차의 cty(도시 연비)가 더 높은지 알아보세요
# 내답
suv<- cla_cty %>% filter(class=="suv")
compact <- cla_cty %>% filter(class=="compact")
mean(suv$cty); mean(compact$cty)

# 답지
df_suv <- df %>% filter(class == "suv")          # class가 suv인 행 추출
df_compact <- df %>% filter(class == "compact")  # class가 compact인 행 추출

mean(df_suv$cty)                                 # suv의 cty 평균
## [1] 13.5
mean(df_compact$cty)                             # compact의 cty 평균
## [1] 20.12766

 

혼자서 해보기 - 141p

mpg 데이터를 이용해서 분석 문제를 해결해보세요.

 "audi"에서 생산한 자동차 중에 어떤 자동차 모델의 hwy(고속도로 연비)가 높은지 알아보려고 합니다. "audi"에서 생산한 자동차 중 hwy 1~5위에 해당하는 자동차의 데이터를 출력하세요.

# 내답
mpg %>% filter(manufacturer =="audi") %>%
		arrange(desc(hwy)) %>%
        head(5)
        
# 답지
mpg <- as.data.frame(ggplot2::mpg)          # mpg 데이터 불러오기

mpg %>% filter(manufacturer == "audi") %>%  # audi 추출
  arrange(desc(hwy)) %>%                    # hwy 내림차순 정렬
  head(5)                                   # 5행까지 출력
##   manufacturer      model displ year cyl      trans drv cty hwy fl   class
## 1         audi         a4   2.0 2008   4 manual(m6)   f  20  31  p compact
## 2         audi         a4   2.0 2008   4   auto(av)   f  21  30  p compact
## 3         audi         a4   1.8 1999   4   auto(l5)   f  18  29  p compact
## 4         audi         a4   1.8 1999   4 manual(m5)   f  21  29  p compact
## 5         audi a4 quattro   2.0 2008   4 manual(m6)   4  20  28  p compact

 

혼자서 해보기 - 144p

mpg 데이터는 연비를 나타내는 변수가 hwy(고속도로 연비), cty(도시 연비) 두 종류로 분리되어 있습니다. 두 변수를 각각 활용하는 대신 하나의 통합 연비 변수를 만들어 분석하려고 합니다.

Q1. mpg 데이터 복사본을 만들고, cty hwy 더한 '합산 연비 변수' 추가하세요.

# 내답
mpg_raw <- as.data.frame(ggplot2::mpg)
mpg <- mpg_raw
mpg$sum <- mpg$cty + mpg$hwy
#또는
mpg<- mpg %>% mutate(sum = cty + hwy)

# 답지
mpg <- as.data.frame(ggplot2::mpg)                # mpg 데이터 불러오기
mpg_new <- mpg                                    # 복사본 만들기

mpg_new <- mpg_new %>% mutate(total = cty + hwy)  # 합산 변수 만들기

Q2. 앞에서 만든 '합산 연비 변수' 2 나눠 '평균 연비 변수' 추가세요.

#내답
mpg <- mpg %>% mutate(mean = sum/2)

#답지
mpg_new <- mpg_new %>% mutate(mean = total/2)     # 평균 변수 만들기

Q3. '평균 연비 변수' 가장 높은 자동차 3종의 데이터를 출력하세요.

#내답
mpg %>% arrange(desc(mean)) %>% head(3)

#답지
mpg_new %>%
  arrange(desc(mean)) %>%  # 내림차순 정렬
  head(3)                  # 상위 3행 출력
##   manufacturer      model displ year cyl      trans drv cty hwy fl
## 1   volkswagen new beetle   1.9 1999   4 manual(m5)   f  35  44  d
## 2   volkswagen      jetta   1.9 1999   4 manual(m5)   f  33  44  d
## 3   volkswagen new beetle   1.9 1999   4   auto(l4)   f  29  41  d
##        class total mean
## 1 subcompact    79 39.5
## 2    compact    77 38.5
## 3 subcompact    70 35.0

Q4. 1~3 문제를 해결할 있는 하나로 연결된 dplyr 구문을 만들어 출력하세요. 데이터는 복사본 대신 mpg 원본을 이용하세요.

# 내답
mpg %>% mutate(sum = cty+hwy, mean = sum/2) %>% arrange(desc(mean)) %>% head(3)

# 답지
mpg %>%
  mutate(total = cty + hwy,   # 합산 변수 만들기
         mean = total/2) %>%  # 평균 변수 만들기
  arrange(desc(mean)) %>%     # 내림차순 정렬
  head(3)                     # 상위 3행 출력
##   manufacturer      model displ year cyl      trans drv cty hwy fl
## 1   volkswagen new beetle   1.9 1999   4 manual(m5)   f  35  44  d
## 2   volkswagen      jetta   1.9 1999   4 manual(m5)   f  33  44  d
## 3   volkswagen new beetle   1.9 1999   4   auto(l4)   f  29  41  d
##        class total mean
## 1 subcompact    79 39.5
## 2    compact    77 38.5
## 3 subcompact    70 35.0

 

혼자서 해보기 - 150p

mpg 데이터를 이용해서 분석 문제를 해결해 보세요.

Q1. mpg 데이터의 class "suv", "compact" 자동차를 특징에 따라 일곱 종류로 분류한 변수입니다. 어떤 차종의 연비가 높은지 비교해보려고 합니다. class cty 평균을 구해보세요.

# 내 답
mpg %>% group_by(class) %>% summarise(mean = mean(cty)

# 답지
mpg <- as.data.frame(ggplot2::mpg)  # mpg 데이터 불러오기

mpg %>%
  group_by(class) %>%               # class별 분리
  summarise(mean_cty = mean(cty))   # cty 평균 구하기
## # A tibble: 7 x 2
##        class mean_cty
##        <chr>    <dbl>
## 1    2seater 15.40000
## 2    compact 20.12766
## 3    midsize 18.75610
## 4    minivan 15.81818
## 5     pickup 13.00000
## 6 subcompact 20.37143
## 7        suv 13.50000

 Q2. 문제의 출력 결과는 class 알파벳 순으로 정렬되어 있습니다. 어떤 차종의 도시 연비가 높은지 쉽게 알아볼 있도록 cty 평균이 높은 순으로 정렬해 출력하세요.

# 내 답
mpg %>% group_by(class) %>% summarise(mean = mean(cty) %>% arrange(desc(mean))

# 답지
mpg %>%
  group_by(class) %>%                  # class별 분리
  summarise(mean_cty = mean(cty)) %>%  # cty 평균 구하기
  arrange(desc(mean_cty))              # 내림차순 정렬하기
## # A tibble: 7 x 2
##        class mean_cty
##        <chr>    <dbl>
## 1 subcompact 20.37143
## 2    compact 20.12766
## 3    midsize 18.75610
## 4    minivan 15.81818
## 5    2seater 15.40000
## 6        suv 13.50000
## 7     pickup 13.00000

Q3. 어떤 회사 자동차의 hwy(고속도로 연비) 가장 높은지 알아보려고 합니다. hwy 평균이 가장 높은 회사 곳을 출력하세요.

# 내 답
mpg %>% group_by(manufacturer) %>% summarise(meanh = mean(hwy) %>% 
	arrange(desc(meanh)) %>% 
	head(3)

# 답지
mpg %>%
  group_by(manufacturer) %>%           # manufacturer별 분리
  summarise(mean_hwy = mean(hwy)) %>%  # hwy 평균 구하기
  arrange(desc(mean_hwy)) %>%          # 내림차순 정렬하기
  head(3)                              # 상위 3행 출력
## # A tibble: 3 x 2
##   manufacturer mean_hwy
##          <chr>    <dbl>
## 1        honda 32.55556
## 2   volkswagen 29.22222
## 3      hyundai 26.85714

Q4. 어떤 회사에서 "compact"(경차) 차종을 가장 많이 생산하는지 알아보려고 합니다. 회사별 "compact" 차종 수를 내림차순으로 정렬해 출력하세요.

# 내 답
mpg %>% group_by(manufacturer) %>%
  filter(class=="compact") %>%
        summarise(freq =n()) %>%
        arrange(desc(freq))
        
# 답지
mpg %>%
  filter(class == "compact") %>%  # compact 추출
  group_by(manufacturer) %>%      # manufacturer별 분리
  summarise(count = n()) %>%      # 빈도 구하기
  arrange(desc(count))            # 내림차순 정렬
## # A tibble: 5 x 2
##   manufacturer count
##          <chr> <int>
## 1         audi    15
## 2   volkswagen    14
## 3       toyota    12
## 4       subaru     4
## 5       nissan     2

 

혼자서 해보기 - 156p

mpg 데이터의 fl 변수는 자동차에 사용하는 연료(fuel)를 의미합니다. 아래는 자동차 연료별 가격을 나타낸 표입니다.

fl 연료 종류 가격(갤런당 USD)
c CNG 2.35
d diesel 2.38
e ethanol E85 2.11
p premium 2.76
r regular 2.22

우선 이 정보를 이용해서 연료와 가격으로 구성된 데이터 프레임을 만들어 보세요.

fuel <- data.frame(fl = c("c", "d", "e", "p", "r"),
                   price_fl = c(2.35, 2.38, 2.11, 2.76, 2.22),
                   stringsAsFactors = F)
fuel  # 출력
##   fl price_fl
## 1  c     2.35
## 2  d     2.38
## 3  e     2.11
## 4  p     2.76
## 5  r     2.22

Q1. mpg 데이터에는 연료 종류를 나타낸 fl 변수는 있지만 연료 가격을 나타낸 변수는 없습니다. 위에서 만든 fuel 데이터를 이용해서 mpg 데이터에 price_fl(연료 가격) 변수를 추가하세요.

# 내 답
mpg <- as.data.frame(ggplot2::mpg)
mpg <- left.join(mpg, fuel, by = "fl")


# 답지
mpg <- as.data.frame(ggplot2::mpg)      # mpg 데이터 불러오기
mpg <- left_join(mpg, fuel, by = "fl")  # mpg에 연료 가격 변수 추가

 Q2. 연료 가격 변수가 추가됐는지 확인하기 위해서 model, fl, price_fl 변수를 추출해 앞부분 5행을 출력해 보세요.

# 내 답
mpg %>% select(model, fl, price_fl) %>% head(5)

# 답지
mpg %>%
  select(model, fl, price_fl) %>%       # model, fl, price_fl 추출
  head(5)     
##   model fl price_fl
## 1    a4  p     2.76
## 2    a4  p     2.76
## 3    a4  p     2.76
## 4    a4  p     2.76
## 5    a4  p     2.76

 

끄으으읕~~

답지처럼 가독성을 위해서 Enter 치는 습관을 들여야겠다

코드가 점점 길어져..

left.join하는건 연습을 좀 해야할듯! 이렇게 복습 끝!