2016-05-24 13 views
2

現在、市場バスケット分析を行うためにarulesパッケージを使用しています。私の私はこのようなルックスで読み出したデータ(しかし、より多くの行を持つ):小包を使用したRの重複商品による市場バスケット分析

>data 
    transaction_id item 
1    1 beer 
2    1 beer 
3    1 soda 
4    2 beer 
5    3 beer 
6    3 fries 
7    3 candy 
8    4 soda 
9    4 fries 

私はその後、dcastを使用して、それを変換し、トランザクションIDの列削除:

> Trans_Table <- dcast(data, transaction_id ~ item) 
> Trans_Table$transaction_id <- NULL 

をして、それは次のようになります。

beer candy fries soda 
1 2  0  0 1 
2 1  0  0 0 
3 1  1  1 0 
4 0  0  1 1 

が、私はアプリオリ機能を使用することができますので、私は「取引」クラスにそれを作るときに、それは1

にビールの下に2を変換し、 0
> Transactions <- as(as.matrix(Trans_Table), "transactions") 
Warning message: 
In asMethod(object) : 
    matrix contains values other than 0 and 1! Setting all entries != 0 to 1. 

マーケットバスケット分析を実行し、その2を維持する方法はありますか?言い換えれば、私は{ビール} => {ビール}、{ビール、ビール} => {ソーダ}、{ビール、ソーダ} => {ビール}のルールを見たいと思っています。 2回購入された場合でも各トランザクションごとに

誰でもこれを手助けできますか?

答えて

2

市場バスケット分析は、特定の商品の頻度ではなく、一緒に購入した別個の商品を見ています。しかし、本当に同じアイテムを別々のものとして扱いたい場合は、次の方法を使用して新しいアイテム名を生成することができます。ライブラリdplyrを使用して

、あなたはそれが起こる回数のIDが付加される項目名を変異させ、そしてあなたのarules処理であることを使用することができます。

library(dplyr) 
df <- df %>% 
     group_by(transaction_id, item) %>% 
     mutate(newitem = paste(item, row_number(), sep = '')) 
as.matrix(table(df$transaction_id, df$newitem)) 

出力は次のとおりです。

beer1 beer2 candy1 fries1 soda1 
    1  1  1  0  0  1 
    2  1  0  0  0  0 
    3  1  0  1  1  0 
    4  0  0  0  1  1 

特定のフォーマットスタイルに合わせて出力を微調整する方法はいくつかあります。

関連する問題