본문 바로가기
Programming/R

[R] 데이터 전처리 - dplyr 패키지

by 코딩하는 금융인 2022. 4. 24.

안녕하세요.

Rstudio 데이터 전처리 및 가공에 필수적인 패키지 dplyr에 대해서 알아보겠습니다.

 

 dplyr 패키지 개요

▣ dplyr 패키지란?

R tidyverse의 핵심 패키지 중 하나이며 데이터 프레임 조작에 특화된 함수 세트

※ tidyverse: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats 등 데이터 모델링, 변환, 시각화 등 제공

 

▣ dplyr 패키지 주요 함수

함수 기능
filter() 행(row) 추출
select() 변수(열, column) 추출
arrange() 정렬
mutate() 변수 추가
summarise() 통계치 산출
group_by() 집단별로 나누기
left_join() 데이터 합치기 (열 기준)
bind_rows() 데이터 합치기 (행 기준)

 

▣ dplyr 핵심 파이프(pipes)

파이프는 함수 출력값을 받아 다음번 함수에 곧바로 전송해주는 방법으로, 동일한 데이터셋에 많은 작업을 할 때 유용함.

R에서 파이프는 %>% 모양으로 단축키 Ctrl+Shift+M으로 사용가능함

 

 R dplyr 활용 예제

분석 과제. 미국 동북중부 437개 지역의 인구통계 정보를 담고 있는 'midwest' 데이터를 사용해 데이터 분석 문제를 해결해 보세요. 'midwest'는 'ggplot2' 패키지에 들어 있습니다. (출처 : Do it R 쉽게 배우는 데이터 분석)

 

## 패키지 설치 ##
install.packages("dplyr")
install.packages("ggplot2")

library(dplyr)
library(ggplot2)

 

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

# midwest 불러오기
midwest <- as.data.frame(ggplot2::midwest)

# midwest에 백분율 변수 추가
midwest <- midwest %>%
  mutate(ratio_child = (poptotal-popadults)/poptotal*100)
  
# 출력
head(midwest$ratio_child)
[1] 34.48631 36.72125 35.50130 37.44076 31.81974 34.30845

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

midwest %>%
  arrange(desc(ratio_child)) %>%   # ratio_child 내림차순 정렬
  select(county, ratio_child) %>%  # county, ratio_child 추출
  head(5)                          # 상위 5행 출력

# 출력 결과
NO county ratio_child
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_child >= 40, "large",
                        ifelse(ratio_child >= 30, "middle", "small")))
  
# 미성년 비율 등급 빈도표
table(midwest$grade)
 large middle  small 
    32    396      9

 

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

midwest %>%
  mutate(ratio_asian = (popasian/poptotal)*100) %>%  # 백분율 변수 추가
  arrange(ratio_asian) %>%                           # 내림차순 정렬
  select(state, county, ratio_asian) %>%             # 변수 추출
  head(10)                                           # 상위 10행 출력 
  
# 출력 결과
No   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
반응형

댓글