この投稿の目的は以下を比較することです:
-
utils
read.csv
は、RでCSVファイルを読み取る標準的な方法です。 -
read_csv
readr
で以前のメソッドを置き換えました -
readRDS
からのload
とreadRDS
-
read_feather
fread
。
データ
まず、いくつかのランダムデータを生成します。
set.seed(123) df <- data.frame(replicate(10, sample(0:2000, 15 * 10^5, rep = TRUE)), replicate(10, stringi::stri_rand_strings(1000, 5)))
ファイルをディスクに保存して、ダウンロード時間を推定します。
csv
形式に加えて、
feather
、
RDS
および
Rdata
も必要
Rdata
。
path_csv <- '../assets/data/fast_load/df.csv' path_feather <- '../assets/data/fast_load/df.feather' path_rdata <- '../assets/data/fast_load/df.RData' path_rds <- '../assets/data/fast_load/df.rds' library(feather) library(data.table) write.csv(df, file = path_csv, row.names = F) write_feather(df, path_feather) save(df, file = path_rdata) saveRDS(df, path_rds)
次に、ファイルサイズを確認します。
files <- c('../assets/data/fast_load/df.csv', '../assets/data/fast_load/df.feather', '../assets/data/fast_load/df.RData', '../assets/data/fast_load/df.rds') info <- file.info(files) info$size_mb <- info$size/(1024 * 1024) print(subset(info, select=c("size_mb"))) ## size_mb ## ../assets/data/fast_load/df.csv 1780.3005 ## ../assets/data/fast_load/df.feather 1145.2881 ## ../assets/data/fast_load/df.RData 285.4836 ## ../assets/data/fast_load/df.rds 285.4837
ご覧のとおり、両方のファイル形式、
csv
、および
feather
、より多くのディスク容量を占有します。
Csv
-6倍、
feather
-
RDS
および
RData
4倍以上。
性能試験
10ラウンドの読み取り時間を比較するために、
microbenchmark
ライブラリが
microbenchmark
。 方法
- utils :: read.csv
- リーダー:: read_csv
- data.table :: fread
- ベース::ロード
- ベース:: readRDS
- フェザー:: read_feather
library(microbenchmark) benchmark <- microbenchmark(readCSV = utils::read.csv(path_csv), readrCSV = readr::read_csv(path_csv, progress = F), fread = data.table::fread(path_csv, showProgress = F), loadRdata = base::load(path_rdata), readRds = base::readRDS(path_rds), readFeather = feather::read_feather(path_feather), times = 10) print(benchmark, signif = 2) ##Unit: seconds ## expr min lq mean median uq max neval ## readCSV 200.0 200.0 211.187125 210.0 220.0 240.0 10 ## readrCSV 27.0 28.0 29.770890 29.0 32.0 33.0 10 ## fread 15.0 16.0 17.250016 17.0 17.0 22.0 10 ## loadRdata 4.4 4.7 5.018918 4.8 5.5 5.9 10 ## readRds 4.6 4.7 5.053674 5.1 5.3 5.6 10 ## readFeather 1.5 1.8 2.988021 3.4 3.6 4.1 10
そして勝者は …
feather
です! ただし、
feather
を使用するには、ファイルをこの形式に予備変換する必要があります。
load
または
readRDS
を使用すると、パフォーマンス(速度の点で2位と3位)を改善できます。小さな/圧縮ファイルを保存することも利点です。 どちらの場合も、最初にファイルを適切な形式に変換する必要があります。
csv
形式からの読み取りに関しては、
fread
は
read_csv
および
read.csv
よりも大幅に優れているため、
csv
ファイルからの読み取りに最適なオプションです。
この場合、
csv
からこの形式への変換は使い捨てであり、ファイルサイズに厳密な制限はなかったため、
feather
ファイルを使用することにし
RData
。したがって、
RData
または
RData
は考慮しませんでした。
アクションの最終シーケンスは次のとおりです。
-
fread
を使用して顧客から提供されたcsv
ファイルを読み取り、 -
write_feather
を介してこのファイルをfeather
書き込みます。 -
read_feather
を使用して、アプリケーションの起動時にfeather
ファイルをロードします。
最初の2つのタスクは、一度実行され、Shinyアプリケーションのコンテキスト外で実行されました。
Rでファイルを読み取るための別の興味深いパフォーマンステストがあります。残念なことに、記事で指定された関数を使用すると、文字列型のオブジェクトを取得し、最も広く頻繁に使用される文字列データを処理する前に文字列データの処理を実行する必要がありますデータフレーム