2017-10-04 6 views
0

arulesパッケージのapriori機能で使用するために、data.frameからトランザクションクラスに変換しようとしているトランザクション行が〜100万行あるデータセットがあります。データの大きなチャンクのために、これは非常に遅いです、しかしR集計 - トランザクションを高速に作成する

a_df3 <- data.frame(
TID = c(1,1,2,2,2,3), 
item=c("a","b","a","b","c", "b") 
) 
a_df3 
trans4 <- as(split(a_df3[,"item"], a_df3[,"TID"]), "transactions") 

:私は、マニュアルで議論フォームを使用しています。これをスピードアップする方法はありますか?

答えて

0

リスト(splitの結果)をパッケージMatrixから疎なngCMatrixに変換するのは高価です。主にこれは、指定されたトランザクションに重複した項目がないこと、およびトランザクション内の項目がソートされていることを確認できないためです。

最初のdata.frameをトランザクション

に直接変換する実験コードです
library("arules") 
library("Matrix") 

a_df <- data.frame(
    TID = c(1,1,2,2,2,3), 
    item=c("a","b","a","b","c", "b") 
) 

j <- as.integer(a_df$TID) 
item <- factor(a_df$item) 
i <- as.integer(item) 

ngT <- new("ngTMatrix", i = i-1L, j = j-1L, Dim = c(max(i), max(j)), 
    Dimnames = list(levels(item), NULL)) 
ngC <- as(ngT, "ngCMatrix") 
trans <- as(ngC, "transactions") 

inspect(trans) 

    items itemsetID 
[1] {a,b} 1   
[2] {a,b,c} 2   
[3] {b}  3 

1分ではなく100万回のトランザクションで数秒かかる。 arulesパッケージに入るまで注意して(入力データをチェックしないで)コードを使用してください。