【R】fst

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
fst0.1674.8
saveRDS20.8953.3
fwrite1.65206.7

4. さいごに

データフレームのシリアライズは、あまり使わないのですが、こういう情報は後々有効かも。

Add a Comment

メールアドレスが公開されることはありません。