mpg데이터를 이용해 분석 문제를 해결해 보세요.
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
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
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
mpg 데이터는 연비를 나타내는 변수가 hwy(고속도로연비),cty(도시 연비) 두 종류로 분리되어 있습니다. 두 변수를 각각 활용하는 대신 하나의 통합 연비 변수를 만들어 분석하려고 합니다.
Q1. mpg 데이터 복사본을 만들고, cty 와 hwy 를 더한 ’합산 연비 변수’를 추가하세요.
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
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
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