データを小さく保存するだけでなく、取り込みも素早いファイル形式で保存が可能なパッケージの紹介です。大変便利だと思います。
なお、実行コマンドを実行する際はデータ例の作成のnを小さくしないと大変時間がかかります。そのまま実行するのはオススメしません。注意してください。
パッケージバージョンは0.9.4。パッケージのバージョンは0.4.0。実行コマンドはwindows 11のR version 4.1.2で確認しています。
パッケージのインストール
下記コマンドを実行してください。
#パッケージのインストール
install.packages("fst")
実行コマンド
詳細はコマンド、パッケージのヘルプを確認してください。
パッケージの読み込み
library("fst")
###データ例の作成#####
n <- 5000000
TestData <- data.frame("Group" = sample(paste0("Group", 1:3), n, replace = TRUE),
"Data1" = sample(rnorm(10), n, replace = TRUE),
"Data2" = sample(LETTERS[1:10], n, replace = TRUE),
"Data3" = sample(rnorm(10), n, replace = TRUE))
########
###ファイルの保存場所を指定#####
library("tcltk")
setwd(paste(as.character(tkchooseDirectory(title = "ファイルの保存場所を選択"),
sep = "", collapse ="")))
########
###以下コマンドの説明です#####
#fstファイルで保存:write.fstコマンド
#圧縮率を設定:compressオプション;0-100の範囲
#write.fst(x = "オブジェクトを指定", "Test.fst", compress = 0)
#fstファイルの読込み:write.fstコマンド
#対象ファイルの保存場所を指定:pathオプション
#結果をdata.table classにする:as.data.tableオプション;初期値:FALSE
#read.fst(path = "ファイルパス", columns = NULL, from = 1, to = NULL,
# as.data.table = FALSE)
########
###参考:TestDataオブジェクト,エクセルファイル,fstファイルのサイズ比較#####
#TestDataオブジェクトのサイズ
print(object.size(TestData), units = "b")
160001816 bytes
#エクセルファイルで出力した場合のサイズ
#openxlsxパッケージを利用した場合
#install.packages("openxlsx")
library("openxlsx")
write.xlsx(TestData, file = "Test.xlsx", sheetName = "TestData")
#確認;結果はbytes
file.size(file.choose())
[1] 81409417
#write.fstコマンドで出力した場合のサイズ
#compress = 0の場合
file.info(file.choose())[, 1]
[1] 90000284
#compress = 100の場合
#オリジナルの約1/10のサイズ
file.info(file.choose(), compress = 100)[, 1]
[1] 11827144
########
###参考:エクセルファイル,fstファイルの読込み時間比較#####
#エクセルファイルでの読込み時間
#openxlsxパッケージを利用した場合
library("tcltk")
library("openxlsx")
#xlsxファイルファイルを選択
XLPath <- paste0(as.character(tkgetOpenFile(title = "エクセルファイルを選択",
filetypes = '{"エクセルファイル" {"*.*"}}',
initialfile = c("*.*"))), collapse = " ")
#xlsxファイルの読み込み:read.xlsxコマンド
#読み込むシートを指定:sheetオプション
system.time(XLData <- read.xlsx(XLPath, sheet = 1))
ユーザ システム 経過
77.57 6.74 84.63
#fstファイルの読み込み
FSTPath <- paste0(as.character(tkgetOpenFile(title = "fstファイルを選択",
filetypes = '{"fstファイル" {"*.*"}}',
initialfile = c("*.*"))), collapse = " ")
#compress = 0の場合
system.time(FSTData <- read.fst(path = FSTPath, columns = NULL,
from = 1, to = NULL,
as.data.table = FALSE))
ユーザ システム 経過
0.02 0.02 0.03
#compress = 100の場合
ユーザ システム 経過
0.14 0.00 0.14
#compress = 0の場合で同等性の確認
identical(all.equal(TestData, FSTData), TRUE)
[1] TRUE
参考:作業した環境
なお、ディスクドライブはSamsung SSD 750 EVOを使用しています。
あなたの解析がとっても楽になりますように!!