Rで解析:データサイズを小さく保存、素早く読み込み「fst」パッケージ


データを小さく保存するだけでなく、取り込みも素早いファイル形式で保存が可能なパッケージの紹介です。大変便利だと思います。

なお、実行コマンドを実行する際はデータ例の作成のnを小さくしないと大変時間がかかります。そのまま実行するのはオススメしません。注意してください。

パッケージバージョンは0.7.2。windows 10のR version 3.3.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") 120002488 bytes #エクセルファイルで出力した場合のサイズ #openxlsxパッケージを利用した場合 #install.packages("openxlsx") library("openxlsx") write.xlsx(TestData, file = "Test.xlsx", sheetName = "TestData") #確認;結果はbytes file.size(file.choose()) [1] 115281889 #write.fstコマンドで出力した場合のサイズ #compress = 0の場合 file.info(file.choose())[, 1] [1] 90000284 #compress = 100の場合 #オリジナルの約1/10のサイズ [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 ######## [/code]


参考:作業した環境

なお、ディスクドライブはSamsung SSD 750 EVOを使用しています。


あなたの解析がとっても楽になりますように!!

スポンサードリンク

関連コンテンツ


スポンサードリンク