filter() | select() | arrange() | mutate() |
행 추출 | 열(변수) 추출 | 정렬 | 변수 추가 |
summarise() | group_by() | left_join() | bind_rows() |
통계치 산출 | 집단별로 나누기 | 데이터 합치기(열) | 데이터 합치기(행) |
<Exercises>
[ ⅰ. 조건별 추출 pg.133 ]
-
mpg 데이터를 이용해 분석 문제를 해결해 보세요.
-
Q1. 자동차 배기량에 따라 고속도로 연비가 다른지 알아보려고 합니다. displ(배기량)이 4 이하인 자동차와 5 이상인 자동차 중 어떤 자동차의 hwy(고속도로 연비)가 평균적으로 더 높은지 알아보세요.
-
Q2. 자동차 제조 회사에 따라 도시 연비가 다른지 알아보려고 합니다. "audi"와 "toyota" 중 어느 manufacturer(자동차 제조 회사)의 cty(도시 연비)가 평균적으로 더 높은지 알아보세요.
-
Q3. "chevrolet", "ford", "honda" 자동차의 고속도로 연비 평균을 알아보려고 합니다. 이 회사들의 자동차를 추출한 뒤 hwy 전체 평균을 구해보세요.
library(ggplot2)
df <- as.data.frame(ggplot2::mpg)
str(df)
# Q1
cylls4 <- df %>% filter(cyl <= 4)
cylgt5 <- df %>% filter(cyl >= 5)
mean(cylls4$hwy)
mean(cylgt5$hwy)
# Q2
audi <- df %>% filter(manufacturer=='audai')
toyota <- df %>% filter(manufacturer=='toyota')
mean(audi$cty)
mean(toyota$cty)
# Q3
group1 <- df %>% filter(manufacturer %in% c("chevrolet", "ford", "honda"))
mean(group1$hwy)
[ ⅱ. 필요 변수만 추출 pg. 138 ]
-
Q1. mpg 데이터는 11개 변수로 구성되어 있습니다. 이 중 일부만 추출해서 분석에 활용하려고 합니다. mpg 데이터에서 class(자동차 종류), cty(도시 연비) 변수를 추출해 새로운 데이터를 만드세요. 새로 만든 데이터의 일부를 출력해서 두 변수로만 구성되어 있는지 확인하세요.
-
Q2. 자동차 종류에 따라 도시 연비가 다른지 알아보려고 합니다. 앞에서 추출한 데이터를 이용해서 class(자동차 종류)가 "suv"인 자동차와 "compact"인 자동차 중 어떤 자동차의 cty(도시 연비)가 더 높은지 알아보세요.
library(dplyr)
library(ggplot2)
df <- as.data.frame(ggplot2::mpg)
str(df)
# Q1
df_new <- df %>% select(class, cty) %>% head()
df_new
# Q2
suv <- df %>% filter(class == "suv")
compact <- df %>% filter(class == "compact")
mean(suv$cty)
mean(compact$cty)
[ ⅲ. 정렬 pg. 141 ]
-
Q1. "audi" 에서 생산한 자동차 중에 어떤 자동차 모델의 hwy(고속도로 연비)가 높은지 알아보려고 합니다. "audi"에서 생산한 자동차 중 hwy가 1~5위에 해당하는 자동차의 데이터를 출력하세요.
library(ggplot2)
df <- as.data.frame(ggplot2::mpg)
str(df)
# Q1
df %>% filter(manufacturer=='audi')%>%
arrange(desc(hwy)) %>%
head(5)
[ ⅳ. 파생변수 추가 pg. 144 ]
-
mpg 데이터는 연비를 나타내는 변수가 hwy(고속도로 연비), cty(도시 연비) 두 종류로 분리되어 있습니다. 두 변수를 각각 활용하는 대신 하나의 통합 연비 변수를 만들어 분석하려고 합니다.
-
Q1. mpg 데이터 복사본을 만들고, cty와 hwy를 더한 '합산 연비 변수'를 추가하세요.
-
Q2. 앞에서 만든 '합산 연비 변수'를 2로 나눠 '평균 연비 변수'를 추가세요.
-
Q3. '평균 연비 변수'가 가장 높은 자동차 3종의 데이터를 출력하세요.
-
Q4. 1~3번 문제를 해결할 수 있는 하나로 연결된 dplyr 구문을 만들어 출력하세요. 데이터는 복사본 대신 mpg 원본을 이용하세요.
library(dplyr)
library(ggplot2)
df <- as.data.frame(ggplot2::mpg)
str(df)
# Q1
df_new <- df
df_new <- df_new %>% mutate(total = cty + hwy)
head(df_new)
# Q2
df_new <- df_new %>% mutate(avg = total/2)
head(df_new)
# Q3
df_new %>% arrange(desc(avg)) %>% head(3)
# Q4
df %>% mutate(total = cty + hwy, avg = total/2) %>%
arrange(desc(avg)) %>% head(3)
* 'df <-' 유무에 따른 결과 차이 유의
[ ⅴ. 집단별 요약 pg. 150]
mean() | sd() | sum() | median() | min() | max() | n() |
평균 | 표준편차 | 합계 | 중앙값 | 최솟값 | 최댓값 | 빈도 |
-
Q1. mpg 데이터의 class는 "suv", "compact" 등 자동차를 특징에 따라 일곱 종류로 분류한 변수입니다. 어떤 차종의 연비가 높은지 비교해보려고 합니다. class별 cty 평균을 구해보세요.
-
Q2. 앞 문제의 출력 결과는 class 값 알파벳 순으로 정렬되어 있습니다. 어떤 차종의 도시 연비가 높은지 쉽게 알아볼 수 있도록 cty 평균이 높은 순으로 정렬해 출력하세요.
-
Q3. 어떤 회사 자동차의 hwy(고속도로 연비)가 가장 높은지 알아보려고 합니다. hwy 평균이 가장 높은 회사 세 곳을 출력하세요.
-
Q4. 어떤 회사에서 "compact"(경차) 차종을 가장 많이 생산하는지 알아보려고 합니다. 각 회사별 "compact" 차종 수를 내림차순으로 정렬해 출력하세요.
library(ggplot2)
library(dplyr)
mpg <- as.data.frame(ggplot2::mpg)
head(mpg)
# Q1
mpg %>% group_by(class) %>% summarise(mean_cty = mean(cty))
# Q2
mpg %>% group_by(class) %>% summarise(mean_cty = mean(cty)) %>% arrange(desc(mean_cty))
# Q3
mpg %>% group_by(manufacturer) %>%
summarise(mean_hwy = mean(hwy)) %>%
arrange(desc(mean_hwy)) %>%
head(3)
# Q4
mpg %>% filter(class=="compact") %>%
group_by(manufacturer) %>%
summarise(models = n()) %>%
arrange(desc(models))
[ ⅵ. 데이터 합치기 ]
-
mpg 데이터의 fl 변수는 자동차에 사용하는 연료(fuel)를 의미합니다. 아래는 자동차 연료별 가격을 나타낸 코드입니다.
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)
-
Q1. mpg 데이터에는 연료 종류를 나타낸 fl 변수는 있지만 연료 가격을 나타낸 변수는 없습니다. 위에서 만든 fuel 데이터를 이용해서 mpg 데이터에 price_fl(연료 가격) 변수를 추가하세요.
-
Q2. 연료 가격 변수가 잘 추가됐는지 확인하기 위해서 model, fl, price_fl 변수를 추출해 앞부분 5행을 출력해 보세요.
library(ggplot2)
library(dplyr)
mpg <- as.data.frame(ggplot2::mpg)
head(mpg)
table(mpg$fl)
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)
# Q1
mpg <- left_join(mpg, fuel, by="fl")
# Q2
mpg %>% select(model, fl, price_fl) %>% head(5)
< 분석도전 >
-
미국 동북중부 437개 지역의 인구통계 정보를 담고 있는 midwest 데이터를 사용해 데이터 분석 문제를 해결해 보세요. midwest는 ggplot2 패키지에 들어 있습니다.
-
Q1. popadults는 해당 지역의 성인 인구, poptotal은 전체 인구를 나타냅니다. midwest 데이터에 '전체 인구 대비 미성년 인구 백분율' 변수를 추가하세요.
-
Q2. 미성년 인구 백분율이 가장 높은 상위 5개 county(지역)의 미성년 인구 백분율을 출력하세요.
-
Q3. 분류표의 기준에 따라 미성년 비율 등급 변수를 추가하고, 각 등급에 몇 개의 지역이 있는지 알아보세요.
[ 분류: 40%이상= large / 30%~40% 미만 = middle / 30% 미만 = small ] -
Q4. popasian은 해당 지역의 아시아인 인구를 나타냅니다. '전체 인구 대비 아시아인 인구 백분율' 변수를 추가하고, 하위 10개 지역의 state(주), county(지역명), 아시아인 인구 백분율을 출력하세요.
library(ggplot2)
library(dplyr)
df <- as.data.frame(ggplot2::midwest)
head(df)
str(df)
?midwest
# Q1
df <- df %>% mutate(ratio_youth = (poptotal-popadults)/poptotal * 100)
# Q2
df %>% group_by(county) %>%
select(ratio_youth) %>%
arrange(desc(ratio_youth)) %>% head(5)
df %>% arrange(desc(ratio_youth)) %>%
select(county, ratio_youth) %>%
head(5)
# Q3
df <- df %>% mutate(status = ifelse(ratio_youth >= 40, "large", ifelse(ratio_youth < 30, "small", "middle")))
table(df$status)
qplot(df$status)
# Q4
df %>% mutate(ratio_asian = (popasian/poptotal)*100) %>%
select(state, county, ratio_asian) %>%
tail(10)
'데이터 분석 > R' 카테고리의 다른 글
Part ⅩⅠ: 지도 시각화 (0) | 2021.01.11 |
---|---|
Part Ⅹ: 텍스트 마이닝 (0) | 2021.01.11 |
Part Ⅸ: 한국 복지 패널 데이터 분석 (0) | 2021.01.07 |
Part Ⅷ: 데이터 시각화 (0) | 2021.01.07 |
Part Ⅶ: 데이터 정제(결측치 / 이상치) (0) | 2021.01.07 |
Part Ⅴ: 데이터 분석 기초 (0) | 2021.01.05 |