R Markdown_혼자해보기1~6, 분석도전

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

혼자해보기 1

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

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
mpg <- as.data.frame(ggplot2::mpg)
mpg4 <- mpg %>% filter(displ <= 4)
mpg5 <- mpg %>% filter(displ >= 5)
mean(mpg4$hwy)
## [1] 25.96319
mean(mpg5$hwy)
## [1] 18.07895

mpg4(배기량이 4이하)가 평균적으로 연비가 높다.

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

mpg_audi <- mpg %>% filter(manufacturer == "audi")
mpg_toyota <- mpg %>% filter(manufacturer == "toyota")
mean(mpg_audi$cty)
## [1] 17.61111
mean(mpg_toyota$cty)
## [1] 18.52941

toyota의 cty가 더 높다.

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

mpg_new <- mpg %>% filter(manufacturer %in% c("chevrolet", "ford", "honda"))
mean(mpg_new$hwy)
## [1] 22.50943

혼자해보기 2

Q1. mpg 데이터는 11 개 변수로 구성되어 있습니다. 이 중 일부만 추출해서 분석에 활용하려고 합니다. mpg 데이터에서 class(자동차 종류), cty(도시 연비) 변수를 추출해 새로운 데이터를 만드세요. 새로 만든 데이터의 일부를 출력해서 두 변수로만 구성되어 있는지 확인하세요.

mpg <- as.data.frame(ggplot2::mpg)
mpg_new2 <-mpg %>% select(class, cty)
head(mpg_new2)
##     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(도시 연비)가 더 높은지 알아보세요.

mpg_suv <- mpg_new2 %>% filter(class == "suv")
mpg_comp <- mpg_new2 %>% filter(class == "compact")
mean(mpg_suv$cty)
## [1] 13.5
mean(mpg_comp$cty) 
## [1] 20.12766

혼자해보기 3

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

mpg %>% filter(manufacturer == "audi") %>% 
  arrange(desc(hwy)) %>% 
  head(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

혼자해보기 4

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

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

mpg <- as.data.frame(ggplot2::mpg)
mpg_copy <- mpg
mpg_copy <- mpg_copy %>% 
  mutate(total = cty +hwy)

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

mpg_copy <- mpg_copy %>% mutate(mean = total/2)

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

mpg_copy %>% 
  arrange(desc(mean)) %>% 
  head(3)
##   manufacturer      model displ year cyl      trans drv cty hwy fl      class
## 1   volkswagen new beetle   1.9 1999   4 manual(m5)   f  35  44  d subcompact
## 2   volkswagen      jetta   1.9 1999   4 manual(m5)   f  33  44  d    compact
## 3   volkswagen new beetle   1.9 1999   4   auto(l4)   f  29  41  d subcompact
##   total mean
## 1    79 39.5
## 2    77 38.5
## 3    70 35.0

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

mpg %>% 
  mutate(total = cty +hwy,
         mean = total/2) %>%
  arrange(desc(mean)) %>% 
  head(3)
##   manufacturer      model displ year cyl      trans drv cty hwy fl      class
## 1   volkswagen new beetle   1.9 1999   4 manual(m5)   f  35  44  d subcompact
## 2   volkswagen      jetta   1.9 1999   4 manual(m5)   f  33  44  d    compact
## 3   volkswagen new beetle   1.9 1999   4   auto(l4)   f  29  41  d subcompact
##   total mean
## 1    79 39.5
## 2    77 38.5
## 3    70 35.0

혼자해보기 5

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

mpg %>% group_by(class) %>% 
  summarise(mean_cty = mean(cty))
## # A tibble: 7 x 2
##   class      mean_cty
##   <chr>         <dbl>
## 1 2seater        15.4
## 2 compact        20.1
## 3 midsize        18.8
## 4 minivan        15.8
## 5 pickup         13  
## 6 subcompact     20.4
## 7 suv            13.5

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

mpg %>% 
  group_by(class) %>% 
  summarise(mean_cty = mean(cty)) %>% 
  arrange(desc(mean_cty))
## # A tibble: 7 x 2
##   class      mean_cty
##   <chr>         <dbl>
## 1 subcompact     20.4
## 2 compact        20.1
## 3 midsize        18.8
## 4 minivan        15.8
## 5 2seater        15.4
## 6 suv            13.5
## 7 pickup         13

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

mpg %>% 
  group_by(manufacturer) %>% 
  summarise(hwy_mean = mean(hwy)) %>% 
  arrange(desc(hwy_mean)) %>% 
  head(3)
## # A tibble: 3 x 2
##   manufacturer hwy_mean
##   <chr>           <dbl>
## 1 honda            32.6
## 2 volkswagen       29.2
## 3 hyundai          26.9

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

mpg %>% 
  filter(class == "compact") %>% 
  group_by(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

혼자해보기 6

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")

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

mpg %>% 
  select(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

분석 도전

미국 동북중부 437개 지역의 인구통계 정보를 담고 있는 midwest 데이터를 사용해 데이터 분석 문제를 해결해 보세요. midwest는 ggplot2 패키지에 들어 있습니다.

midwest <- as.data.frame(ggplot2::midwest)

Q1. popadults 는 해당 지역의 성인 인구, poptotal 은 전체 인구를 나타냅니다. midwest 데이터에 ‘전체 인구 대비 미성년 인구 백분율’ 변수를 추가하세요.

midwest <- midwest %>%
  mutate(ratio_baby = (poptotal-popadults)/poptotal*100)

Q2. 미성년 인구 백분율이 가장 높은 상위 5 개 county(지역)의 미성년 인구 백분율을 출력하세요.

midwest %>% 
  arrange(desc(ratio_baby)) %>% 
  select(county, ratio_baby) %>% 
  head(5)
##      county ratio_baby
## 1  ISABELLA   51.50117
## 2 MENOMINEE   50.59126
## 3    ATHENS   49.32073
## 4   MECOSTA   49.05918
## 5    MONROE   47.35818

Q3. 분류표의 기준에 따라 미성년 비율 등급 변수를 추가하고, 각 등급에 몇 개의 지역이 있는지 알아보세요. 분류 기준 large 40% 이상 middle 30% ~ 40% 미만 small 30% 미만

midwest <- midwest %>% 
  mutate(grade = ifelse(ratio_baby >= 40, "large",
                        ifelse(ratio_baby >=30,"middle", "small")))
table(midwest$grade) 
## 
##  large middle  small 
##     32    396      9

Q4. popasian은 해당 지역의 아시아인 인구를 나타냅니다. ‘전체 인구 대비 아시아인 인구 백분율’ 변수를 추가하고, 하위 10개 지역의 state(주), county(지역명), 아시아인 인구 백분율을 출력하세요.

midwest <- midwest %>% 
  mutate(ratio_asian = (popasian/poptotal)*100) %>% 
  arrange(ratio_asian) %>% 
  select(state, county, ratio_asian) %>%
  head(10)
midwest
##    state    county ratio_asian
## 1     WI MENOMINEE  0.00000000
## 2     IN    BENTON  0.01059210
## 3     IN   CARROLL  0.01594981
## 4     OH    VINTON  0.02703190
## 5     WI      IRON  0.03250447
## 6     IL     SCOTT  0.05315379
## 7     IN      CLAY  0.06071645
## 8     MI    OSCODA  0.06375925
## 9     OH     PERRY  0.06654625
## 10    IL     PIATT  0.07074865