최근에 R로 데이터를 분석하고 시각화하는 것을 배우고 있는데, 양이 많아서 차근차근 정리해보고자 한다.
R의 최대 장점이라면 파이썬처럼 오픈라이브러리 방식이라는 점일 것이다. 다른 사람들이 만들어놓은 유용한 패키지들을 가져다가 적절하게 사용할 수 있다는 것이다. 파이썬과 R 의 대표적인 패키지들은 깊게는 알지 못하지만, 수박겉핥기 식으로 사용해봤을 때 R 의 패키지들이 더욱 다양한 기능들을 제공해주는 느낌이 들었다. 특히 Tidyverse라고 하여 주요 패키지에서 끊임없이 확장, 추가 생성되는 일종의 유니버스까지 존재했다.
이번 포스팅에선 대표적인 패키지 중 하나인 Magrittr과 그 기능인 파이프 오퍼레이터에 대해서 정리하려고 한다.
파이프 오퍼레이터와 Magrittr
Magrittr 패키지는 코드를 파이프라인 스타일로 설계하는 것을 가능하게 해준다. 주요 함수는 '%>%' 인데, 이를 파이프 오퍼레이터라고 부른다. 말로 설명해봤자 감이 잘 안잡히므로 ChatGPT로부터 얻은 예시 하나를 짚고 넘어가겠다.
df <- data.frame(
name = c("Alice", "Bob", "Charlie", "David"),
age = c(19, 20, 18, 19),
grade = c(85, 90, 75, 80)
)
위와 같은 데이터프레임을 갖고 있을 때, 다음 세 작업을 실행하고 싶다.
1. 연령이 19세 이상인 행만 선택한다.
2. 선택한 행의 평균 성적을 산출한다.
3. 평균 성적을 소수점 이하 두 자리로 반올림한다.
만약 이를 파이프 오퍼레이터를 사용하지 않고 구현한다면 아래와 같다.
df_filtered <- subset(df, age >= 19)
mean_grade <- mean(df_filtered$grade)
mean_grade_rounded <- round(mean_grade, 2)
mean_grade_rounded
코딩의 특성상 새로운 변수를 선언해주고 그 변수에 값을 저장해주어야 하기 때문에, 코드가 장황해지는 것을 확인할 수 있다. 꼭 새로운 변수를 선언하지 않는다 하더라도 괄호를 겹겹이 사용하여 함수 안에 함수를 집어넣는 형식으로 구현해야 하는데, 그 또한 가독성이 떨어지긴 마찬가지일 것이다. 이제 파이프 오퍼레이터를 사용하고 구현해보자.
library(magrittr)
library(dplyr)
df %>%
filter(age >= 19) %>%
summarize(mean_grade = mean(grade)) %>%
round(2)
파이프 오퍼레이터를 사용하면 변수를 새로 선언하고 저장할 필요 없이 연속적으로 작업을 실행하는 것이 가능하다. 훨씬 가독성도 좋고, 직접 코딩을 해보면 이런 방식이 훨씬 편한 것을 느낄 수 있다.
위 코드를 조금만 더 자세히 살펴보면,
1. 우선 df에서 작업할 것이기 때문에 df를 써주고 파이프 오퍼레이터 >%> 를 사용하여 다음 작업으로 넘긴다.
2. filter 함수를 사용하여 조건에 맞는 행을 선택해준다. (filter 함수는 dplyr 패키지에 있는 함수다.)
3. summarize 함수를 사용하여 mean_grade에 평균을 저장해준다. (꼭 사용해줘야 한다.)
4. round 함수를 소수 둘째 자리에서 반올림 해준다.
하고 싶은 작업들을 순차적으로 실행하기 때문에, 코딩하기도 쉽고 읽는 사람도 쉬워지는 것을 볼 수 있다.
'R' 카테고리의 다른 글
R - RStudio 패키지 업데이트가 불가능할 때 대처법 (2) | 2023.12.10 |
---|---|
R - Rmarkdown 사용해서 문서 만들기 (2) (0) | 2023.05.30 |
R - Rmarkdown 사용해서 문서 만들기 (1) (0) | 2023.05.29 |
R - 데이터 분석 (3) : dplyr 패키지 (2) | 2023.05.21 |
R - 데이터 분석 (2) : tidyr 패키지 (0) | 2023.05.20 |