Rで解析:データ要約の処理時間が速い!「bigtabulate」パッケージ

Rの解析に役に立つ記事
スポンサーリンク

data.frameやmatrixの要約はtableやsplit,listコマンドを組み合わせることで可能ですが、本パッケージは処理の高速化とメモリ利用の効率化が考えられています。
10,000,000 * 3のデータの処理時間をtableコマンドと比較すると約2.8倍速いです。

パッケージバージョンは1.1.9。実行コマンドはR version 4.2.2で確認しています。

スポンサーリンク

パッケージのインストール

下記、コマンドを実行してください。

#パッケージのインストール
install.packages("bigtabulate")

実行コマンド

詳細はコメント、パッケージのヘルプを確認してください。

#パッケージの読み込み
library("bigtabulate")

###データ例の作成#####
set.seed(1234)
n <- 10
TestData <- data.frame(Group = sample(paste0("Group", 1:3), n, replace = TRUE),
                       Data1 = sample(1:5, n, replace = TRUE),
                       Data2 = sample(11:15, n, replace = TRUE))
########

#&#12487;&#12540;&#12479;&#12363;&#12425;&#12486;&#12540;&#12502;&#12523;&#12434;&#20316;&#25104;:bigtable&#12467;&#12510;&#12531;&#12489;
#&#23550;&#35937;&#12487;&#12540;&#12479;&#21015;&#12392;&#21306;&#20998;&#12487;&#12540;&#12479;&#21015;&#12398;&#25351;&#23450;:ccols&#12458;&#12503;&#12471;&#12519;&#12531;
#ccol = (&#23550;&#35937;&#12487;&#12540;&#12479;&#21015;, &#21306;&#20998;&#12487;&#12540;&#12479;&#21015;)
BTData <- bigtable(TestData, ccols = c(2, 1))
#class&#12398;&#30906;&#35469;
class(BTData)
[1] "matrix"
#&#20869;&#23481;&#12398;&#30906;&#35469;
BTData

#&#22522;&#26412;&#12467;&#12510;&#12531;&#12489;&#12391;&#20877;&#29694;:table&#12467;&#12510;&#12531;&#12489;
TData <- table(TestData[, 2], TestData[, 1])
#class&#12398;&#30906;&#35469;
class(TData)
[1] "table"
#&#20869;&#23481;&#12398;&#30906;&#35469;
TData

#&#12487;&#12540;&#12479;&#12398;&#32068;&#12415;&#21512;&#12431;&#12379;&#12398;&#20301;&#32622;&#12434;&#26908;&#20986;:bigsplit&#12467;&#12510;&#12531;&#12489;
BSData <- bigsplit(TestData, ccols = c(2, 1), splitcol = 1)
#&#35442;&#24403;&#12377;&#12427;&#32080;&#26524;&#12364;&#12394;&#12369;&#12428;&#12400;numeric(0)&#12364;&#36820;&#12373;&#12428;&#12427;
#&#30906;&#35469;
BSData


#&#22522;&#26412;&#12467;&#12510;&#12531;&#12489;&#12391;&#20877;&#29694;:split&#12467;&#12510;&#12531;&#12489;
split(TestData[,1], list(Data1 = factor(TestData[,2]), Data2 = TestData[,1]))

###&#21442;&#32771;,n = 10,000,000&#12398;&#12487;&#12540;&#12479;&#20966;&#29702;&#26178;&#38291;
n <- 10000000
BigData <- data.frame(Group = sample(paste0("Group", 1:3), n, replace = TRUE),
                      Data1 = sample(1:5, n, replace = TRUE),
                      Data2 = sample(11:15, n, replace = TRUE))

#bigtable&#12467;&#12510;&#12531;&#12489;
system.time(BTData <- bigtable(BigData, ccols = c(2, 1)))
&#12518;&#12540;&#12470;   &#12471;&#12473;&#12486;&#12512;       &#32076;&#36942;  
1.101      0.039      1.144

#table&#12467;&#12510;&#12531;&#12489;
system.time(TData <- table(BigData[, 2], BigData[, 1]))
&#12518;&#12540;&#12470;   &#12471;&#12473;&#12486;&#12512;       &#32076;&#36942;  
2.808      0.164      2.978 

少しでも、あなたの解析が楽になりますように!!

タイトルとURLをコピーしました