본문 바로가기

데이터 분석/R

Part Ⅵ: 데이터 전처리

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 데이터를 사용해 데이터 분석 문제를 해결해 보세요. midwestggplot2 패키지에 들어 있습니다.

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

 

 

 

 

교재 : 「Do it! 쉽게 배우는 R 데이터 분석

티스토리에서 R 코드블럭 적용하기