【R】fst
2021年4月1日
1. はじめに
fst
は、高速に簡単に柔軟にデータフレームをシリアライズしてくれるパッケージです。
2. インストール
CRANからインストールできます。
install.packages("fst")
3. 使ってみる
では、本当に速いのか、比較的大きなデータフレームを作って試してみます。
まずは、データの準備
library(tidyverse) library(tictoc) library(data.table) library(fst) no_rows <- 1e7 df <- data.frame( Logical = sample(c(TRUE, FALSE, NA), prob = c(0.5, 0.48, 0.02), no_rows, replace=TRUE), Integer = sample(1L:500L, no_rows, replace=TRUE), Real = sample(sample(1:10000, 20) / 100, no_rows, replace=TRUE), Factor = as.factor(sample(labels(diamonds$cut), no_rows, replace=TRUE)) )
tictocパッケージを使って書き込みの実行時間を計測してみます。
tic() write.fst(df, "dataset.fst") toc()
> tic()
> write.fst(df, "dataset.fst")
> toc()
0.16 sec elapsed
おお、早い!
続いて、saveRDS
にて書き込んでみます。
tic() saveRDS(df, file = "dataset.obj") toc()
> tic()
> saveRDS(df, file = "dataset.obj")
> toc()
20.89 sec elapsed
う、遅い。。。
最後にfwrite
を使ってみます。
tic() fwrite(df, "dataset.dat") toc()
> tic()
> fwrite(df, "dataset.dat")
> toc()
1.65 sec elapsed
なかなかの速さ。
結果的には、fstが最も速かったです。
ファイルサイズも含めて比べると、以下の通り。時間とファイルサイズのバランスでどれを使うか決めるべきですね。
書き込み時間 sec | ファイルサイズ MB | |
fst | 0.16 | 74.8 |
saveRDS | 20.89 | 53.3 |
fwrite | 1.65 | 206.7 |
4. さいごに
データフレームのシリアライズは、あまり使わないのですが、こういう情報は後々有効かも。