혼자서 해보기 / 진성

1

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

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

mpg <- data.frame(ggplot2::mpg)
mpg_down4 = mpg %>% filter(displ<=4) %>% select(hwy) %>% summarise(mean_hwy=mean(hwy))
mpg_up5 = mpg %>% filter(displ>=5) %>% select(hwy) %>% summarise(mean_hwy2=mean(hwy))
mpg_down4
##   mean_hwy
## 1 25.96319
mpg_up5
##   mean_hwy2
## 1  18.07895

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

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

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

mpg_2 <- mpg %>% filter(manufacturer %in% c("chevrolet","ford","honda")) %>% summarise(mean_hwy3=mean(hwy))
mpg_2
##   mean_hwy3
## 1  22.50943

2

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

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

mpg_v1 = mpg %>% select(class,cty)
head(mpg_v1)
##     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_v1 %>% filter(class=="suv") %>% summarise(mpg_cty=mean(cty))
##   mpg_cty
## 1    13.5
mpg_v1 %>% filter(class=="compact") %>% summarise(mpg_cty2=mean(cty))
##   mpg_cty2
## 1 20.12766

3

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

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

mpg %>% filter(manufacturer=="audi") %>% select(hwy) %>% arrange(desc(hwy)) %>% head(5)
##   hwy
## 1  31
## 2  30
## 3  29
## 4  29
## 5  28

4

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

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

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

mpg2=mpg
mpg2 <- mpg2 %>% mutate(total=cty+hwy)

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

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

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

mpg2 %>% 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) %>% mutate(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

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

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. 앞에서 만든 코드를 %>%로 연결하고 내림차순으로 정렬하는 코드를 추가하면 됩니다.

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(class) %>% summarise(mean_hwy=mean(hwy)) %>% arrange(desc(mean_hwy)) %>% head(3)
## # A tibble: 3 x 2
##   class      mean_hwy
##   <chr>         <dbl>
## 1 compact        28.3
## 2 subcompact     28.1
## 3 midsize        27.3

Q4. filter()를 이용해 “compact” 차종만 남긴 후 회사별 자동차 수를 구하면 됩니다. 자동차 수는 데이터가 몇 행으로 구성되는지 빈도를 구하면 알 수 있습니다. 빈도는 n()을 이용해 구할 수 있습니다.

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 데이터를 이용해서 분석 문제를 해결해 보세요.

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

7

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

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

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

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

midwest %>% arrange(desc(popvar1)) %>% select(county, popvar1) %>% head(5)
## # A tibble: 5 x 2
##   county    popvar1
##   <chr>       <dbl>
## 1 ISABELLA     51.5
## 2 MENOMINEE    50.6
## 3 ATHENS       49.3
## 4 MECOSTA      49.1
## 5 MONROE       47.4

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

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

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

midwest %>% mutate(popvar3=popasian/poptotal*100) %>% arrange(popvar3) %>% select(state,county,popvar3) %>% head(10)
## # A tibble: 10 x 3
##    state county    popvar3
##    <chr> <chr>       <dbl>
##  1 WI    MENOMINEE  0     
##  2 IN    BENTON     0.0106
##  3 IN    CARROLL    0.0159
##  4 OH    VINTON     0.0270
##  5 WI    IRON       0.0325
##  6 IL    SCOTT      0.0532
##  7 IN    CLAY       0.0607
##  8 MI    OSCODA     0.0638
##  9 OH    PERRY      0.0665
## 10 IL    PIATT      0.0707