6.2 tidyverse

우리가 논의할 패키지는 실제로 “tidyverse”라는 패키지 모음이다. tidyverse는 주로 RStudio를 이용하여 작업하는 Hadley Wickham이 개발했다. tidyverse 웹 사이트는이 패키지 세트를 가장 잘 설명한다. “tidyverse는 데이터 과학을 위해 설계된 독자적인 R 패키지 모음이다. 이 패키지가 담고 있는 모든 패키지들은 기본 디자인 철학, 문법 및 데이터 구조를 공유한다.”

저자는 tidyverse를 “독자적인” 것으로 설명한다. 이것은 tidyverse가 함수들의 집합 이상이라는 것을 의미한다. 또한 데이터 과학을 수행하는 규정된 방법이기도 하다. 일을 처리하는 tidyverse 방법이 있다. 이것이 그들이 tidyverse가 “독자적이다”는 말의 의미이다.

tidyverse가 잘하는 것 중 하나는 base R의 거친 가장자리를 부드럽게하는 것입니다. tidyverse는 사용하기 쉽고 기억하기 쉬운 base R에 이미 존재하는 함수에 대해 일관된 함수들을 제공한다. 이러한 패키지는 또한 base R에 포함된 기능들에 더 많은 기능들을 추가한다. 예를 들어, ggplot2 (tidyverse 패키지 중의 하나)는 base R의 플롯 기능으로 수행 할 수있는 작업을 확장하지만 더 많은 플롯 유형을 추가하고 있다. 지금부터 핵심 tidyverse 패키지를 살펴 보기로 한다.

아래 예제를 따라 하려면 tidyverse를 설치한 다음, 라이브러리를 프로젝트로 가져와야 한다. 이를 위해 3 장의 패키지 지침을 사용하거나 이 코드를 R 콘솔에 입력할 수 있다.

# install.packages("tidyverse")
library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## √ ggplot2 3.3.3     √ dplyr   1.0.2
## √ tibble  3.0.4     √ stringr 1.4.0
## √ tidyr   1.1.2     √ forcats 0.5.0
## √ purrr   0.3.4
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(magrittr)
## 
## Attaching package: 'magrittr'
## The following object is masked from 'package:purrr':
## 
##     set_names
## The following object is masked from 'package:tidyr':
## 
##     extract

magrittr 패키지는 파이프 연산자 (%<%)를 도입하여 R 코딩의 흐름을 변경한다. %<% 연산자는 왼쪽 값을 오른 쪽 표현식으로 파이프한다. 이를 통해 코드 블록이 수행하는 작업을 즉시 명확하게 볼 수 있게 해 주는 “파이프 라인”을 만들 수 있다.

함수에 너무 많이 의존하는 R과 같은 프로그래밍 언어에서는 다음과 같이 읽기 어려운 코드로 끝날 수 있다.

round(mean(subset(expectancy, race == "All Races")$death_rate), 1)
## [1] 1469.6

이 한 줄의 코드는 지난 장에서 작업했던 expectancy 데이터 프레임의 평균 사망률을 계산해서 반환해 준다. 그런데 데이터 세트 필터링, 평균 점수 계산, 결과의 반올림 등의 세 가지 작업을 수행하고 있다. 이와 같은 코드를 읽는 것은 매우 어려운데, 문제가 더 복잡해다면 이런 코드는 더 읽기 어려워 진다.

magrittr 패키지의 파이프 연산자 (%>%)는 중첩 함수 호출의 필요성을 제거하여 주고, 코드를 정리하는 데 도움을 준다. 다음은 이 코드를 작성하는 다른 방법을 보여주고 있다.

expectancy %>% 
  subset(race == "All Races") %>% 
  .$death_rate %>%
  mean() %>%
  round(1)
## [1] 1469.6

이 코드는 조금 더 길지만 훨씬 더 명확하다. 이 코드는 위에서 아래의 방향으로 작동하고, 각각의 %>%는 그 위(또는 왼쪽)에 있는 개체를 가져 와서 다음 함수의 첫 번째 인수로 보낸다. 상단에서 %>%를 사용하여 expectancy 데이터 프레임을 서브세팅하기 위해 오른쪽 함수의 인수로 보낸다.

이제 데이터 프레임에서 시작하여, 행의 일부를 가져오고 death_rate컬럼을 선택하고, 평균을 구하기 위해 mean을 사용한 다음, 값을 반올림(round)했다고 명확하게 말할 수 있다.

Note : 점(.)을 주목하라. 위 코드의 세 번째 줄에서 사용되고 있는 점(.)은 magrittr에 의해 파이프되는 개체를 참조하는 데 사용되는데, 위의 서브세팅 함수가 출력하고 있는 데이터 프레임을 참조한다. 즉, expectancy 데이터 프레임에서 race == "All Races"인 행들로 구성된 데이터 프레임을 참조하고 있다.

magrittr 패키지는 모든 tidyverse 패키지에 사용되는 핵심 패키지로, tidyverse에서 사용되는 독자적 분석 스타일을 알리는 데 도움이 된다.