LoginSignup
9
8

More than 3 years have passed since last update.

tidyverse(再)入門

Last updated at Posted at 2019-12-08

この記事は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)。

ここ2、3年以内にRを学び始めた社会人や学生の中にはtidyverseを基礎として学んでいる人が多いと思います3。タナカケンタさんによるJapan.R 2019の初心者向けセッションでもtidyverseを使った分析フローが推奨されていました。そのような、tidyverseを用いたデータ分析を学んで育ったRユーザーは「tidyverse native」だと言えます。tidyverse nativeなRユーザーは今後益々増えていくことでしょう。

  • 図2 『RユーザのためのRStudio[実践]入門』
    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)
    1st Edition

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

  • 図4 Analyzing Baseball Data with R, 2nd Edition (Nov 2018)
    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への書き換えの具体例については、別の記事を書きたいと思います(冬休みの宿題)。 -> 春休みになりましたが、書きました!

まとめ

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

Enjoy!


  1. 'The tidyverse makes data science faster, easier and more fun.' 

  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. レガシーコードのリファクタリングは別の問題です。 

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8