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
에서 사용되는 독자적 분석 스타일을 알리는 데 도움이 된다.