botchy hack note

TypeScript、Ruby、Golang とか Macとかの備忘録です.間違いがあるとご指摘くださると嬉しいです.

Rのファイル読み込み速度比較 csvとrds

Rを使っているときにファイルの読み込み速度はボトルネックになることが多い。 同じスクリプトを何度も繰り返し実行するとき、ファイルの読み込みに膨大な時間がかかると、とてもストレスフルです。

できればデータなんてさっさと読み込んでデータと戯れたい…

そんなあなたにおすすめできるのがrdsというファイル形式でデータを扱うことです。

rdsはRのオブジェクトを保存しておくためのファイル形式。 Rに最適化されているためか、読み込みが早いらしい。

今回はこのrdsとcsvの読み込み速度にどれだけ差があるのか実験します。

実験方法

csvファイルを一度Rで読み込みrdsとして保存したファイル*1 と生のcsvの読み込み速度を比較します。

rdsはreadRDS、csvはfread関数を使って読み込む。

それぞれのファイルサイズは以下のとおり。

ファイル形式 ファイルサイズ
csv 839MB
rds 155MB

なんかもうすでに結果が見えてる感じがしてますが、このまま続けます。

読み込みだけなのでスクリプトは非常に単純。

# csvファイル読み込み速度確認用
start  = proc.time()
system.time(r_data<-fread("csv_file.csv"))
end = proc.time()
print(end - start)
# rdsファイル読み込み速度確認用
start  = proc.time()
system.time(r_data<-readRDS("rds_file.rds"))
end = proc.time()
print(end - start)

実験結果

上記のスクリプトを実行した結果を次の表に示します。

ファイル形式 user system elapsed
csv 21.128 0.448 21.579
rds 5.060 0.369 5.431

表のuser,elapsedを見るとだいたい4倍速くなっていることが分かります。

今までなんとなくで使っていましたが、rds形式を使うのは有効みたいです。 みなさんもぜひお試しあれ。

*1:csvを一度読み込んでオブジェクトにし、saveRDS関数でオブジェクトをrds形式で書き出す。