この記事はR Advent Calendar 2019の9日目です。筆者のJapan.R 2019でのLTの内容を基にしています。
TL;DR
- tidyverseを使って育ったRユーザーは増えていく。
- 一方で、base Rに慣れ親しんだRユーザーは多い。
- tidyverseに適応するには:
- 関数を使ってみる。
- パイプ演算子
%>%
に慣れる。 - レガシーコードを書き換える。
tidyverse native
tidyverseはRを用いた「データサイエンスをより早く・簡単に・楽しくする」1パッケージ(ライブラリー)の集合2です。その1つであるdplyrが最初にCRANにpublishされたのが2014年1月、tidyverse自体は2016年9月です。その直後からStack Overflowで質問が出現していることが見てとれます(図1)。そして、日本では2018年6月に『RユーザのためのRStudio[実践]入門』が出版されました(図2)。
- 図1 Stack Overflowにおけるtidyverse関連の質問の推移
ここ2、3年以内にRを学び始めた社会人や学生の中にはtidyverseを基礎として学んでいる人が多いと思います3。タナカケンタさんによるJapan.R 2019の初心者向けセッションでもtidyverseを使った分析フローが推奨されていました。そのような、tidyverseを用いたデータ分析を学んで育ったRユーザーは「tidyverse native」だと言えます。tidyverse nativeなRユーザーは今後益々増えていくことでしょう。
- 図2 『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への移行は着実に起こっています。ここでは、その例を挙げたいと思います。
セイバーメトリクスと呼ばれる野球のデータの統計的分析手法に関する書籍 Analyzing Baseball Data with R は、dplyr及びtidyverseの登場を挟んで初版と第2版が書かれ、内容が大きく変わったそうです。Pythonの野球界隈で有名なshinyorkeさんのブログ記事ともくもく会での会話で知りました。
初版では、Rを導入する章はベクトルから始まり、データフレームへと進んでいます(図3)。
- 図3 Analyzing Baseball Data with R, 1st Edition (Oct 2013)
一方、第2版では、tidyverseの紹介から始まり、次にtidyverseが基盤とするデータ形式であるデータフレームへと続き、その後にベクトルが来ています。
- 図4 Analyzing Baseball Data with R, 2nd Edition (Nov 2018)
更に、Rの導入だけでなく、データの加工や解析に関する章でもbase Rを用いたコードからtidyverseを用いたものに変わっているそうです。5年を経て、base Rからtidyverseへと最新の動向にキャッチアップしています。
tidyverse adaptive
それでは、私のようなbase R nativeなRユーザーはどのようにtidyverseに適応したら(tidyverse ataptiveになるにはどうしたら)良いのでしょうか?
1. tidyverseの便利なパッケージや関数を使ってみる。
私は以下のtidyverseの関数をよく使います。
-
dplyr::coalesce()
- SQLの
coalesce
関数と同じ処理をデータフレームのカラムに対して行うことができます。
- SQLの
-
tidyr::separate()
- 指定した区切り文字で文字列カラムを複数に分割してくれます。
この他にも、tidyverseには便利な関数が沢山あります。それらを使うことを通じて、まずはtidyverseに触れてみてはいかがでしょうか?
2. パイプ演算子%>%
の記法に慣れる。
個人的に、base Rからの移行で一番大事だと思うのは、パイプ演算子を使いこなすことです。これは修行を積むしかないと思います。初めのうちは、関数の入れ子に慣れ親しんだ頭を切り替えるのが大変でした。
3. レガシーコードを書き換えてみる。
tidyverseに限らず、新しいライブラリや言語、技術を学習する際には道しるべが必要です。私の経験では、base R nativeなRユーザーがtidyverseに慣れ親しむには、base Rで書かれたレガシーコードをtidyverseを用いて書き換えてみることが効果的だと思います。既に動くことが保証されているレガシーコードがあれば、それと同じ処理内容や結果を再現するtidyverseのコードを書いてみましょう5。勿論、「レガシー」でなくてもbase Rで書かれた既存のコードであれば何でも構いません。正解があるので、取り組みやすいはずです。
なお、base Rからtidyverseへの書き換えの具体例については、別の記事を書きたいと思います(冬休みの宿題)。 -> 春休みになりましたが、書きました!
まとめ
tidyverseを用いた分析フローがデファクトスタンダードになる日は遠くありません。base Rに慣れ、base Rを使って分析をしているbase R nativeな人も是非tidyverse adaptiveなRユーザーになりましょう:)
Enjoy!
-
'The tidyverse makes data science faster, easier and more fun.' ↩
-
tidyverseにはdplyrの他にggplot2やreadrなどが含まれています。tidyverseはこれらを包括するメタ・パッケージです。 ↩
-
ただし、Japan.R 2019の懇親会で得た情報では、大学で教員や先輩がbase R nativeである場合は(結果的に)学生もbase R nativeになる傾向があるようです。 ↩
-
厳密には
data.table::dcast()
はbase Rには含まれませんが、data.tableはdplyr登場以前から標準的に使われているライブラリーなので、base Rのようなものと考えています。 ↩ -
レガシーコードのリファクタリングは別の問題です。 ↩