0

さまざまなユーザー (USER) のデータ フレームがあります。各ユーザーには異なるアイテム (ITEM) があります。

USER DATE ITEM
A 1 alpha
A 1 beta
A 1 gamma
A 2 alpha
A 2 gamma
A 4 beta
A 4 gamma
B 1 alpha
B 1 beta
...

さまざまな長さのアイテムのさまざまな組み合わせについて、特定の組み合わせを持つユーザーの数を数えたいと思います。

出力は次のようになります。

amount_of_users combination_of_items
2 (alpha,beta)
1 (alpha,gamma)
1 (beta,gamma)
1 (alpha, beta, gamma)

ユーザーがアイテム alpha を持っている場合、2、3、4 アイテムの任意の組み合わせがカウントされ、他のアイテムと一緒にアイテムを獲得したことは明らかであるため、同じ日に表示されるはずです。

更新: DWin が正しく述べたように、私が達成しようとしていることは明確ではありませんでした。1 人のユーザーにアルファ、ベータ、ガンマのアイテムを持たせます。次に、このユーザーをそのサブセットの各カウントに追加する必要があります。つまり、(alpha,beta) (beta,gamma) (alpha,gamma) と最後に (alpha, beta, gamma) の組み合わせはすべて count+1 になります。

それまでの間、私の主なターゲット (アルファなどの特定の ITEM に追加される、最も顕著な ITEMS を確認したい) については、テーブルと colSums を使用して、ユーザーの数を数えることができると考えました。非常に悪い解決策ですが、最も多く追加されているアイテムを示しています。

levels(x$TARGETGROUP)[c(8,15:17,39,41,57,58,61)] <- c("HOME")
levels(x$TARGETGROUP)
dings <- table(x[,1],x[,3])
str(dings)
#i saw, that the 8th column contains item I needed.
haeuf <- colSums(dings[dings[,8]!=0, ]) 
4

3 に答える 3

2

arulesパッケージを使用することもできます。

# Data
d0<- read.delim( textConnection("USER DATE ITEM
A 1 alpha
A 1 beta
A 1 gamma
A 2 alpha
A 2 gamma
A 4 beta
A 4 gamma
B 1 alpha
B 1 beta"), sep=" ")

# Reshape the data and compute all the itemsets
library(arules)
library(reshape2)
d <- dcast( USER ~ ITEM, data = d0 )[,-1] > 0
r <- apriori( d, par = list(target="frequent itemsets", support = 0, minlen=2) )

# Display the results
inspect(r)
as( r, "data.frame" )
within( as( r, "data.frame" ), { count = support * nrow(d) } )
#                items support count
# 1       {beta,gamma}     0.5     1
# 2      {alpha,gamma}     0.5     1
# 3       {alpha,beta}     1.0     2
# 4 {alpha,beta,gamma}     0.5     1

これは日付を考慮しません。アイテムセットを日付とユーザーで分けたい場合:

d <- dcast( USER + DATE ~ ITEM, data = d0, fun.aggregate=length )[,-(1:2)] > 0
r <- apriori( d, par = list(target="frequent itemsets", support = 0, minlen=2) )
within( as( r, "data.frame" ), { count = support * nrow(d) } )
#                items support count
# 1       {alpha,beta}    0.50     2
# 2      {alpha,gamma}    0.50     2
# 3       {beta,gamma}    0.50     2
# 4 {alpha,beta,gamma}    0.25     1
于 2013-08-21T10:10:08.993 に答える
0

これは必要なものですか?

 aggregate(dd$ITEM, 
            by= dd[, c('USER','DATE')], 
            FUN=function(x) list(as.character(x)) )

  USER DATE                  x
1    A    1 alpha, beta, gamma
2    B    1        alpha, beta
3    A    2       alpha, gamma
4    A    4        beta, gamma

(最後の段落は私には意味がありませんでした。)

于 2013-08-21T08:36:09.760 に答える