tidyverse（再）入門

この記事は[R Advent Calendar 2019](https://qiita.com/advent-calendar/2019/rlang)の9日目です。筆者の[Japan.R 2019](https://japanr.connpass.com/event/154070)でのLTの内容を基にしています。

## TL;DR
* tidyverseを使って育ったRユーザーは増えていく。
* 一方で、base Rに慣れ親しんだRユーザーは多い。
* tidyverseに適応するには：
	* 関数を使ってみる。
	* パイプ演算子`%>%`に慣れる。
	* レガシーコードを書き換える。

## tidyverse native
[tidyverse](https://www.tidyverse.org)はRを用いた「データサイエンスをより早く・簡単に・楽しくする」[^1]パッケージ（ライブラリー）の集合[^2]です。その1つであるdplyrが最初に[CRAN](https://cran.r-project.org)にpublishされたのが2014年1月、tidyverse自体は2016年9月です。その直後からStack Overflowで質問が出現していることが見てとれます（図1）。そして、日本では2018年6月に[『RユーザのためのRStudio［実践］入門』](https://gihyo.jp/book/2018/978-4-7741-9853-8)が出版されました（図2）。

* 図1 <a href="https://insights.stackoverflow.com/trends?tags=tidyverse%2Cdplyr%2Cr%2Cggplot2">Stack Overflow</a>におけるtidyverse関連の質問の推移<br>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412319/58a6c6fe-ce9a-2ede-71a9-54584485b5d1.png" width="400">

ここ2、3年以内にRを学び始めた社会人や学生の中にはtidyverseを基礎として学んでいる人が多いと思います[^3]。タナカケンタさんによる[Japan.R 2019の初心者向けセッション](https://mana.bi/wiki.cgi?page=JapanR2019%5F%BD%E9%BF%B4%BC%D4%A5%BB%A5%C3%A5%B7%A5%E7%A5%F3%5F%BA%A3%C6%FC%A4%AB%A4%E9%A4%CF%A4%B8%A4%E1%A4%EBR)でもtidyverseを使った分析フローが推奨されていました。そのような、tidyverseを用いたデータ分析を学んで育ったRユーザーは「tidyverse native」だと言えます。tidyverse nativeなRユーザーは今後益々増えていくことでしょう。

* 図2 『RユーザのためのRStudio［実践］入門』<br>
<img src="https://gihyo.jp/assets/images/cover/2018/thumb/TH320_9784774198538.jpg" width="200" alt="RユーザのためのRStudio［実践］入門">

## base R native

一方で、tidyverse（ないしdplyr）に触れずに育ったRユーザーは「base R native」だと言えます。ちなみに、私もbase R nativeで、ほぼbase Rだけで育ちました（Rを使い始めて少なくとも5、6年は経っています）。Rはbaseと呼ばれる、デフォルトで利用可能な関数やパッケージだけでも十分に自由にデータ分析を遂行できます。例えば、以下のことが簡単に行えます。

* 行、列の抽出
	* `[`演算子
	* `$`演算子

* 加工
	* `sort()`
	* `melt()`
	* `dcast()`[^4]

* 集約
	* `table()`
	* `aggregate()`

## Things are changing...
base Rからtidyverseへの移行は着実に起こっています。ここでは、その例を挙げたいと思います。

[セイバーメトリクス](https://ja.wikipedia.org/wiki/%E3%82%BB%E3%82%A4%E3%83%90%E3%83%BC%E3%83%A1%E3%83%88%E3%83%AA%E3%82%AF%E3%82%B9)と呼ばれる野球のデータの統計的分析手法に関する書籍 _Analyzing Baseball Data with R_ は、dplyr及びtidyverseの登場を挟んで[初版](https://www.amazon.com/Analyzing-Baseball-Data-Chapman-Hall/dp/1466570229)と[第2版](https://www.amazon.com/Analyzing-Baseball-Data-Second-Chapman/dp/0367024861)が書かれ、内容が大きく変わったそうです。Pythonの野球界隈で有名なshinyorkeさんの[ブログ記事](https://shinyorke.hatenablog.com/entry/r-to-python)ともくもく会での会話で知りました。

初版では、Rを導入する章はベクトルから始まり、データフレームへと進んでいます（図3）。

* 図3 <i>Analyzing Baseball Data with R</i>, 1st Edition (Oct 2013)<br>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412319/dc7e9fc6-d169-5fa6-c2e4-5061a3aeb893.png" width="200" alt="1st Edition">

一方、第2版では、tidyverseの紹介から始まり、次にtidyverseが基盤とするデータ形式であるデータフレームへと続き、その後にベクトルが来ています。

* 図4 <i>Analyzing Baseball Data with R</i>, 2nd Edition (Nov 2018)<br>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412319/06716b21-c6a8-3821-4c0d-7b453a6a7fcf.png" width="200" alt="2nd Edition">

更に、Rの導入だけでなく、データの加工や解析に関する章でもbase Rを用いたコードからtidyverseを用いたものに変わっているそうです。5年を経て、base Rからtidyverseへと最新の動向にキャッチアップしています。

## tidyverse adaptive

それでは、私のようなbase R nativeなRユーザーはどのようにtidyverseに適応したら（tidyverse ataptiveになるにはどうしたら）良いのでしょうか？

### 1. tidyverseの便利なパッケージや関数を使ってみる。
私は以下のtidyverseの関数をよく使います。

* `dplyr::coalesce()`
	* SQLの`coalesce`関数と同じ処理をデータフレームのカラムに対して行うことができます。
* `tidyr::separate()`
	* 指定した区切り文字で文字列カラムを複数に分割してくれます。

この他にも、tidyverseには便利な関数が沢山あります。それらを使うことを通じて、まずはtidyverseに触れてみてはいかがでしょうか？

### 2. パイプ演算子`%>%`の記法に慣れる。

個人的に、base Rからの移行で一番大事だと思うのは、パイプ演算子を使いこなすことです。これは修行を積むしかないと思います。初めのうちは、関数の入れ子に慣れ親しんだ頭を切り替えるのが大変でした。

### 3. レガシーコードを書き換えてみる。
tidyverseに限らず、新しいライブラリや言語、技術を学習する際には道しるべが必要です。私の経験では、base R nativeなRユーザーがtidyverseに慣れ親しむには、base Rで書かれたレガシーコードをtidyverseを用いて書き換えてみることが効果的だと思います。既に動くことが保証されているレガシーコードがあれば、それと同じ処理内容や結果を再現するtidyverseのコードを書いてみましょう[^5]。勿論、「レガシー」でなくてもbase Rで書かれた既存のコードであれば何でも構いません。正解があるので、取り組みやすいはずです。

なお、base Rからtidyverseへの書き換えの具体例については、別の記事を書きたいと思います（冬休みの宿題）。 -> [春休みになりましたが、書きました！](https://qiita.com/yutakanzawa/items/9f4df8d65edcb21930b9)

## まとめ
tidyverseを用いた分析フローがデファクトスタンダードになる日は遠くありません。base Rに慣れ、base Rを使って分析をしているbase R nativeな人も是非tidyverse adaptiveなRユーザーになりましょう:)

Enjoy!

[^1]: [_'The tidyverse makes data science faster, easier and more fun.'_](https://www.tidyverse.org/)
[^2]: tidyverseにはdplyrの他にggplot2やreadrなどが含まれています。tidyverseはこれらを包括するメタ・パッケージです。
[^3]: ただし、Japan.R 2019の懇親会で得た情報では、大学で教員や先輩がbase R nativeである場合は（結果的に）学生もbase R nativeになる傾向があるようです。
[^4]: 厳密には`data.table::dcast()`はbase Rには含まれませんが、data.tableはdplyr登場以前から標準的に使われているライブラリーなので、base Rのようなものと考えています。
[^5]: レガシーコードのリファクタリングは別の問題です。