読者です 読者をやめる 読者になる 読者になる

俺たちのtidyverseはこれからだ!

※この投稿はR Advent Calendar 2016の6日目の記事です。

11/27のJapan.R 2016でLTしたtidyverseについて書きます。スライドは以下です。

(ちなみに、この投稿のタイトルは@siero5335さんのツイートがエモくてすてきだったので勝手に拝借しました。すみません)

tidyverseとは

単に「tidyverse」と言ったときに、この言葉が指す対象はいくつかあります。

  1. 概念
  2. パッケージ
  3. GitHub上の)組織

あと、誰が運営しているのか分からない謎のTwitterアカウントとかもあるんですが、あれはたぶんただの脇役なので捨ておきましょう。以下、順番に説明していきます。

tidyverse(概念)

tidyverseというのは、R界の神として崇められるHadley Wickhamが作ったパッケージ群を指す言葉です。かつては「Hadleyverse」と呼ばれていましたが、今年半ばごろ?にHadleyはこの言葉を使い始めました

「tidy」は、Hadley信者であれば「tidy data」という言葉を連想するかもしれません。tidy dataって??という方は以下の記事をご参照ください。

連想するかもしれませんが、tidyverseの「tidy」はデータだけにとどまりません。データ分析に使うツールのデザインをもっと「tidy」にしていこう、という野望です。

The tidy tools manifesto

ではどういうツールが「tidy」なのでしょう。Hadleyは、現時点での考えを「The tidy tools manifesto」というドキュメントにまとめています。ここには、以下の4つの点が原則として掲げられています。

1. Reuse existing data structures.

tidy dataをつくって使いましょう、という話です。パッケージ内で独自のデータ構造をつくるよりも既存のデータ構造を使いまわすことを推奨しています。

2. Compose simple functions with the pipe.

これは%>%を使いましょう、という話です。いくつもの処理をひとつの関数に詰め込むよりも、処理ごとに関数を作って%>%で繋ぐことができる(=つまりデータを第一引数に取る)ようにしておくほうが使い勝手がいいよね、みたいなことを言っています。

3. Embrace functional programming.

関数型言語脳になりましょう、という話です。Rは関数型言語なんだから、強情を張るのはやめてもう関数型言語脳になっちゃいなよ、と。Rは果たして関数型言語なのか?という点に関しては、黒めだかさんのアドベントカレンダーの記事にまとまっているのでぜひご参照ください。

4. Design for humans.

人間にわかりやすいようにしましょう、という話です。命名もわかりやすく、短くするよりはわかりやすさを取りましょう、みたいなことが書かれています。

tidyなツールの例

なるほど、原則はわかりました。では実際に、これらを満たすパッケージにはどのようなものがあるのでしょうか。

...ありません。

Hadleyは、The tidy tools manifestoに

Currently no packages precisely meet the design goals, and while the underlying ideas are stable, I expect their expression in prose will change substantially as I struggle to make explicit my process and thinking.

と書いています。まだまだHadleyの理想を満たすパッケージはなく、その理想自体も今後アップデートされていきます。上に挙げた4原則も、半年後くらいに見るとまったく変わっているかもしれません。

tidyverse(パッケージ)

さて、ここまでは概念としての紹介でしたが、tidyverseというパッケージがあります。これは、tidyverseに含まれるパッケージをまとめてインストールするためのパッケージです(え、さっきまでtidyverseの原則を満たすパッケージはないって言ってたじゃん??というツッコミは置いておきましょう)。library(tidyverse)とすれば、tidyverseの主要な(すべてではない)パッケージをまとめて読み込むこともできます。

CRAN - Package tidyverse

ただそれだけのパッケージなんですが、これがリリースされたことで、tidyverseは概念から実態があるものになりました。「tidyverseといえばtidyverseに入っているパッケージ」という線引きができたのです。今年の9月くらいのことです。上で紹介したThe tidy tools manifestoは、実はこのパッケージのvignetteとして書かれたものです。

blog.rstudio.org

tidyverseに(今のところ)含まれているパッケージ

現在のところ、以下のパッケージがtidyverseに含まれています。

データの読み込み
データの前処理・変形
  • tibble: data.frameを扱いやすくする
  • tidyr: データをtidyにする
  • dplyr: データを変形する
  • forcats: factorを扱いやすくする
  • lubridate, hms: 時刻型を扱いやすくする
  • stringr: 文字列を扱いやすくする
可視化
  • ggplot2
関数型プログラミング
モデリング

tidyverse(組織)

そして、いつの間にかGitHub上の組織もできました。ggplot2やtidyrなど、様々なパッケージがここに移されていっています。(dplyrとかpurrrとかはまだですね。どういう基準で移管するパッケージを選んでいるのかは謎...)

ここで気づいていただきたい点は、tidyverseに含まれているパッケージは必ずしもHadleyが作者ではない、ということです。たとえばmagrittrは@stefanbache氏、broomは@drob氏が作者です。stringrは、(デザインの基礎をつくったのはstringrですが、)今はstringiが土台になっています。Hadleyが作ったパッケージも、今は主要なメンテナが他の人に移っているものもあります。

いまやtidyverseはHadley一人の力によって支えられているのではありません。その意味で、これはやっぱりもう「hadley」verseではないと私は思うのです。

個人的にそれを実感したのは、ちょっと用事でggplot2のissueの議論を追っていた時です。hadleyの書き込みの右上を見ると「Collaborator」になっていて、ああもうほんとにhadleyひとりのtidyverseではないんだなあと感じました。

f:id:yutannihilation:20161203135648p:plain

俺たちのtidyverseはこれからだ!

そうは言ってもこれからもHadleyはR界の神として君臨し続けるでしょう。そしていろんなものを作り出し、それをカジュアルに壊したりするでしょう。でも、tidyverseには、みんなのための宇宙はちゃんとみんなでつくっていこう、という意思を(ほんのりですが)感じます。めげずにGitHubにissueを報告したりpull requestを投げたりコントリビュートして、住みよいR界をつくっていきましょう!*1

明日のR Advent Calendarの担当は、アヒル口アヒルアイコンでおなじみ@berobero11さんです!

*1:英語で投げるのはちょっと...、ということであれば、私でよければへたくそな英語で代理で投げたりしますのでr-wakalangあたりにご相談ください!