R: tidyverse or data.tableどちらを使いますか?

Tidyverseの出現によってRは易行(いぎょう)になったと思っていて、最近はもっぱらtidyverseを使っています。

でも、ネット上では、tidyverse versus data.tableのようなタイトルを見かけることよくあり、「datata.tableって何?」、「どこがtidyverseより優れてるの?」と思っていました。

調べたところ、大変わかりやすい説明がありました。

 

Tidy Data: Why It Matters, the data.table Way

 

それでも、tidyverseをご存知ない方にはわかりにくかと思いますので、少し補足して解説します。

ところで、次は、両者のスクリプトが左右に対比されて、違いがよくわかります。

 

A data.table and dplyr tour

 

I.Data.tableでサンプルデータを作成

 

海辺で毎日船の数を数えて色で分けたデータを作ります。

 

 

作成されたテーブル

 

 

II.Tidyverseで処理

 

1.テーブルをtibbleに変更

 

Tidyverseでは、テーブルを扱いやすいtibbleの形にします。式はas_tibble(データ名)と簡単です。

 

# convert data.table to tibble
boats_tibble <- as_tibble(boats)
# show the data
boats_tibble
 

 

data.tableと同じ数値ですが、tibbleなので各列のデータの種類が表示されています。

 

 

さらに、tidyverseで扱うには、データを次の条件に合った形にする必要があります。

 

1. Each variable must have its own column.
2. Each observation must have its own row.
3. Each value must have its own cell.

 

上にしたがい、テーブルの後ろの列3行をcolorとcountにまとめます。いわゆる横長のデータの縦長データへの変換です。

 

boats_tibble_tidy <- boats_tibble %>%
gather("clor", "count", 3:5)
boats_tibble_tidy
 

 

次のようにtibbleの形で表示されます。

 

 

上の形にしておくと簡単な式でグラフにできます。

 

ggplot(tidy_boats_tibble,
aes(x=date, y=count, col=color, group=color)) +
geom_line() +
labs(x='', y='boats', title = 'Boats counted in Oslo')
 

 

 

III.処理速度

 

次は、dtata.tableとtidyverse(dplyr)とPythonのpandasのベンチマーク・テスト結果を比較しています。

 

Benchmarks : Grouping

 

IV.結論

 

覚えやすいので、できればtidyverseを使いたい。そうすると、大きなデータを扱うならdata.table、そうでないならtidyverseかな?

 

全スクリプト

 

# install libraries
library(data.table)
library(tidyverse)
# create a sample data with data.table
set.seed(5)
date <- seq.Date(as.Date('2001-08-01'),as.Date('2001-08-14'),by='day')
dayname <- weekdays(date)
red <- sample(50:100,14)
green <- sample(20:40,14)
blue <- sample(40:80,14)
boats <- data.table(date, dayname, red, green, blue)
# show the data
boats
# show the structure
str(boats)

# convert data.table to tibble
boats_tibble <- as_tibble(boats)
# show the data
boats_tibble

# convert wide to long
boats_tibble_tidy <- boats_tibble %>% 
  gather("color", "count", 3:5)
# create a muliple line graph
ggplot(tidy_boats_tibble,
       aes(x=date, y=count, col=color, group=color)) +
       geom_line() +
       labs(x='', y='boats', title = 'Boats counted in Oslo')

 

Please follow and like us:
error

About shibatau

I was born and grown up in Kyoto. I studied western philosophy at the University and specialized in analytic philosophy, especially Ludwig Wittgenstein at the postgraduate school. I'm interested in new technology, especially machine learning and have been learning R language for two years and began to learn Python last summer. Listening toParamore, Sia, Amazarashi and MIyuki Nakajima. Favorite movies I've recently seen: "FREEHELD". Favorite actors and actresses: Anthony Hopkins, Denzel Washington, Ellen Page, Meryl Streep, Mia Wasikowska and Robert DeNiro. Favorite books: Fyodor Mikhailovich Dostoyevsky, "The Karamazov Brothers", Shinran, "Lamentations of Divergences". Favorite phrase: Salvation by Faith. Twitter: @shibatau

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.