Rで解析:データ要約の処理時間が速い!「bigtabulate」パッケージ
公開日: Rとアクセス解析に役に立つ記事 効率化
data.frameやmatrixの要約はtableやsplit,listコマンドを組み合わせることで可能ですが、本パッケージは処理の高速化とメモリ利用の効率化が考えられています。
10,000,000 * 3のデータの処理時間をtableコマンドと比較すると約2.8倍速いです。
パッケージバージョンは1.1.4。実行コマンドはR version 3.2.2で確認しています。
パッケージのインストール
下記、コマンドを実行してください。
#パッケージのインストール
install.packages("bigtabulate")
実行コマンド
詳細はコメント、パッケージのヘルプを確認してください。
#パッケージの読み込み
library("bigtabulate")
###データ例の作成#####
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))
########
#データ内容の確認
TestData
Group Data1 Data2
1 Group2 3 11
2 Group1 4 12
3 Group1 2 14
4 Group2 4 13
5 Group1 2 11
6 Group3 3 13
7 Group1 4 13
8 Group1 3 14
9 Group3 2 11
10 Group3 4 15
########
#データからテーブルを作成:bigtable
#対象データ列と区分データ列の指定:ccolsオプション
#ccol = (対象データ列, 区分データ列)
BTData <- bigtable(TestData, ccols = c(2, 1))
#classの確認
class(BTData)
[1] "matrix"
#内容の確認
BTData
1 2 3
2 2 0 1
3 1 1 1
4 2 1 1
#基本コマンドで再現:tableコマンド
TData <- table(TestData[, 2], TestData[, 1])
#classの確認
class(TData)
[1] "table"
#内容の確認
TData
Group1 Group2 Group3
2 2 0 1
3 1 1 1
4 2 1 1
#データの組み合わせの位置を検出:bigsplitコマンド
BSData <- bigsplit(TestData, ccols = c(2, 1))
#該当する結果がなければnumeric(0)が返される
BSData
$`2:1`
[1] 3 5
$`3:1`
[1] 8
$`4:1`
[1] 2 7
$`2:2`
numeric(0)
#以下省略
#基本コマンドで再現:splitコマンド
split(TestData[,1], list(Data1 = factor(TestData[,2]), Data2 = TestData[,1]))
$`2.Group1`
[1] Group1 Group1
Levels: Group1 Group2 Group3
$`3.Group1`
[1] Group1
Levels: Group1 Group2 Group3
$`4.Group1`
[1] Group1 Group1
Levels: Group1 Group2 Group3
$`2.Group2`
factor(0)
Levels: Group1 Group2 Group3
#以下省略
###参考,n = 10,000,000のデータ処理時間
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コマンド
system.time(BTData <- bigtable(BigData, ccols = c(2, 1)))
ユーザ システム 経過
1.101 0.039 1.144
#tableコマンド
system.time(TData <- table(BigData[, 2], BigData[, 1]))
ユーザ システム 経過
2.808 0.164 2.978
少しでも、あなたのウェブや実験の解析が楽になりますように!!
関連記事
-
-
Rとウェブ解析:コード可読性向上!「%>%」(パイプ)でつなげるmagrittrパッケージ
Rでは変数へのデータを代入する方法として「%」(パイプ)でコードをつなげることで、可読性が向上するの
-
-
Rでお遊び:シャーロット第11話「シャーロット」感想と色使い
OPで示されていた謎のキーワードや軌道図の意味が「明らか」となった回でした。もう、残された伏線はほと
-
-
Rでインタラクティブなネットワーク図:networkD3パッケージの紹介
ネットワーク図をインタラクティブに操作できる「networkD3」を紹介します。使えそうなパッケージ
-
-
Rで遺伝子網羅解析:PubMedのエビデンスを利用して抽出
マイクロアレイで発現変動を示した遺伝子の中からPubMedから入手したエビデンスリストに含まれる遺伝
-
-
Rでお遊び:いつかは役に立つかも?オーストラリア大陸をプロットする「oz」パッケージの紹介
オーストラリア大陸に興味がある方へオススメしたい、オーストラリア大陸のプロットに特化した「oz」パッ