노센스와 함께하는 데이터 분석

데이터과학자, '현장에서 바로 써먹는' 시리즈 저자

(R) 데이터 분석 실습

(R) 데이터 다루기 - dplyr 패키지

노센스 2022. 4. 12. 23:01

R의 기본 함수인 subset()은 데이터 필터링에는 적합하지만 데이터를 집계(aggregation)하거나 합치기(join) 위해서는 다른 함수를 이용해야합니다.

 

다른 내장 기본함수를 공부하는 것보다 dplyr 패키지 하나만 잘 이용하면 데이터를 가공하는 대부분의 일을 할 수 있기에 해당 패키지 하나만 제대로 익히는 것을 추천드립니다.

 

앞선 예제와 동일하게 iris 데이터 셋을 이용해 데이터를 필터링해보고, 집계 및 합치기 실습을 해보겠습니다.

 

dplyr 패키지를 사용하기에 앞서 파이프라인(pipeline) 연산자라는 것을 알아야합니다.

RStudio에서 파이프라인 연산자(%>%)는 Ctrl + Shift + M키를 동시에 누르면 입력할 수 있습니다.

파이프라인 연산자는 쉽게 말해 파이프가 연결된 것처럼 변수나 함수를 연결할 수 있게 해주는 연산자를 뜻합니다.

글만 읽어서는 다소 어려울 수 있지만 실습을 해보면 쉽게 이해할 수 있습니다.

 

dplyr 패키지를 설치하고, 패키지를 불러온 후 a라는 변수에 iris 데이터 셋을 집어넣겠습니다.

install.packages('dplyr')
library(dplyr)

a <- iris

 

1. 데이터 필터링

 

이제 a라는 데이터 셋에서 Species가 "virginca"인 대상만 필터링해 보겠습니다. 데이터 셋 a와 filter() 함수를 이용해 조건을 설정한 결과를 파이프라인 연산자를 이용해 연결해주기만 하면 됩니다.

a %>% filter(Species == 'virginica')

이제 위에서 한 가지 조건을 더 추가해 보겠습니다. Sepal.Length가 7보다 큰 대상만 더 필터링하겠습니다. filter() 함수에서 "&" 기호를 이용해 조건만 더 추가하면 됩니다.

a %>% filter(Species == 'virginica' & Sepal.Length >= 7)

이제 필터링 실습으로는 마지막으로 위의 두가지 조건을 만족하면서 Sepal.Length, Species 이렇게 2열만 필터링하도록 하겠습니다. 파이프연산자를 하나 더 추가해 select() 함수를 이용해 특정열만 선택한 부분을 연결하면 됩니다.

a %>% filter(Species == 'virginica' & Sepal.Length >= 7) %>% select(Sepal.Length, Species)

 

 

2. 데이터 집계

 

dplyr 패키지의 group_by()와 summarise() 함수를 함께 이용하면 손 쉽게 집계를 구할 수 있습니다. 예를들어, iris 데이터 셋에서 품종(Species)별 꽃받침길이(Sepal.Length)의 합(sum)이나 평균(mean) 등을 계산하는 것입니다.

a1 <- a %>% group_by(Species) %>% summarise(sum(Sepal.Length))
a2 <- a %>% group_by(Species) %>% summarise(mean(Sepal.Length))

표준편차(표본)는 sd(), 중앙값은 median(), 최소값은 min(), 최대값은 max() 함수를 이용해 집계할 수 있습니다.

 

 

3. 데이터 합치기(병합)

 

마지막으로 2가지 데이터 셋을 하나의 열을 기준으로 합치는 방법을 설명드리겠습니다. 데이터베이스에서 서로 다른 테이블을 연결하는 방법을 join이라고 부르는데 이와 동일한 개념으로 그림으로 나타내면 아래와 같습니다.

 

source :&nbsp;https://rpubs.com/williamsurles/293454

가장 많이 사용하는 join 방법은 left_join으로 왼쪽 데이터 셋을 기준으로 오른쪽 데이터 슷의 데이터를 조건에 맞는 대상만 결합시키는 방법입니다.

 

데이터 집계에서 만든 a1, a2 데이터 셋을 이용해 품종(Species)을 기준으로 집계한 합계와 평균값을 하나의 데이터 셋으로 나타내 보겠습니다. 이에 앞서 a1와 a2 데이터 셋을 as.data.frame() 함수를 이용해 데이터 셋으로 변환합니다. 그리고 left_join() 함수를 이용합니다.

 

# a1, a2 데이터 셋 데이터프레임으로 변환
a1 <- as.data.frame(a1)
a2 <- as.data.frame(a2)

# dplyr 패키지의 join() 함수를 이용해 데이터 병합
a3 <- left_join(a1, a2, by = 'Species')
a3

a1, a2 두 데이터프레임이 Species열을 기준으로 잘 합쳐진 것을 확인해 볼 수 있습니다.

 

이렇게 필터링, 집계, 합치기 모두가 가능한 dplyr 패키지 사용법은 반드시 익히시기 바랍니다.

(물론 SQL을 다루는게 편하다면 sqldf 패키지를 이용해 쿼리를 짜서 데이터를 다뤄도 됩니다.)

 

아래에 실습에 활용한 R 스크립트 파일을 첨부하오니 참고하시기 바랍니다. 감사합니다.

 

02.데이터 다루기 - dplyr.R
0.00MB