이전 포스팅들은 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하는건 연습을 좀 해야할듯! 이렇게 복습 끝!
'R' 카테고리의 다른 글
R - 그래프 살펴보기(ggplot2 - 산점도, 막대그래프) (2) | 2024.07.13 |
---|---|
R - 데이터 정체 [결측치, 이상치] (0) | 2024.07.12 |
R 내장 함수 - 데이터 추출 (indexing) (0) | 2024.07.10 |
R dplyr 패키지 이용하기 - %>% 파이프라인 연산자 (1) | 2024.07.08 |
R 기초문법 - 변수명 수정 rename, 조건문 ifelse (0) | 2024.07.08 |