Post

R 사용기

R 사용기

Tidyverse vs Pandas

안녕하세요. 저는 최근 육군 과학화전투훈련단에 복무하면서 데이터 분석 업무를 진행하고 있습니다. 군 특성상 프레임워크 사용이 제한적이기 때문에 Python 보다는 R을 더 많이 활용하고 있습니다.

R을 접한지는 대략 5년 정도 지난 것 같습니다. 수리통계학 수업에서 몬테카를로 추정을 실습할 때 사용했던 언어가 R이었습니다. 당시엔 메모장처럼 생긴 콘솔창에서 코딩했었는데 그 때문인지 저에겐 R이 아직도 촌스럽게 느껴집니다.

반면 Python은 한참 후인 2017년에 접하게 되었습니다. 조합론을 공부하다 컴퓨터 프로그래밍의 도움이 필요했었는데요, 마침 지인 한분이 프로그래밍을 하고 계셨습니다. 그때 그분께 Python을 가르쳐 달라고 졸랐던 기억이 있네요.

Python과 비교하면 R은 통계적 분석에 초점이 맞춰져 있습니다. 각종 통계 함수들이 데이터프레임을 염두에 두고 만들어져 있으며 tidyverse라는 패키지를 사용하면 간결한 문법(magrittr)으로 데이터 핸들링(dplyr) 및 시각화(ggplot2)를 처리할 수 있습니다.

예를 들어 magrittr의 파이프 연산자(%>%)를 이용하면,

1
arrange(summarise(group_by(select(df, column1, column2), column1), column2 = mean(column2)), column2)

위의 코드를 아래처럼 간결하게 top-down 방식으로 바꿀 수 있습니다.

1
2
3
4
5
6
df %>%
  select(column1, column2, column3) %>%
  filter(column1 == 0) %>%
  group_by(column2) %>%
  summarise(column3 = mean(column3)) %>%
  arrange(desc(column3))

참고로 Python의 pandas에서도 데이터프레임 객체의 함수를 호출해 top-down 방식으로 변환할 수 있습니다.

1
2
3
4
5
6
df\
  .filter(items = ['column1', 'column2', 'column3'])\
  .query('column1 == 0')\
  .groupby('column2', as_index = False)['column3']\
  .agg('mean')\
  .sort_values(by = 'column3', ascending = False)

이외에도 Python에서 파이프연산자를 사용하기 위한 다른 방법으로는 dplython 라이브러리를 이용하여 파이프연산자(»)를 사용하거나 pandas에 내장된 pipe 함수를 사용하실 수 있습니다.

현재 업무에서는 Rstudio과 Python jupyterlab을 각각 사용하고 있습니다. 확실히 R이 Python보다 데이터 핸들링하기 편합니다. 전처리부터 시각화까지 빠르게 코드를 짤 수 있고 ggplot2과 같이 직관적이고 편리한 시각화 라이브러리도 있습니다. 그러나 Python도 코드짜기가 쉽고 R보다는 범용성이 넓어서 웬만하면 Python을 사용하려 합니다.

마지막으로 제가 참고했던 블로그 링크를 남겨둡니다.

This post is licensed under CC BY 4.0 by the author.