【问题标题】:convert normal data set to market basket analysis process-able format将正常数据集转换为购物篮分析可处理格式
【发布时间】:2015-07-07 12:37:22
【问题描述】:

我创建了一个如下所示的数据集用于应用购物篮分析(apriori())

id  name
1   mango
1   apple
1   grapes
2   apple
2   carrot
3   mango
3   apple
4   apple
4   carrot
4   grapes
5   strawberry
6   guava
6   strawberry
6   bananas
7   bananas
8   guava
8   strawberry
8   pineapple
9   mango
9   apple
9   blueberries
10  black grapes
11  pomogranate
12  black grapes
12  pomogranate
12  carrot
12  custard apple

我应用了一些逻辑将其转换为可处理购物篮分析的数据。

library(arules)
fact <- data.frame(lapply(frt,as.factor))
trans <- as(fact, 'transactions') 

我也试过这个,但出错了。

trans1 = read.transactions(file = frt, format = "single", sep = ",",cols=c("id","name"))

Error in scan(file = file, what = "", sep = sep, quiet = TRUE, nlines = 1) : 
  'file' must be a character string or connection

我得到的输出不符合预期。 我得到的输出。

items                transactionID
1   {name=mango}                   1  
2   {name=apple}                   2  
3   {name=grapes}                  3  
4   {name=apple}                   4  
5   {name=carrot}                  5  
6   {name=mango}                   6  
7   {name=apple}                   7  
8   {name=apple}                   8  
9   {name=carrot}                  9  
10  {name=grapes}                  10 
11  {name=strawberry}              11 
12  {name=guava}                   12 
13  {name=strawberry}              13 
14  {name=bananas}                 14 

我的预期输出是

id  item
1  {mango,apple,grapes)
2  {apple,carrot}
3  {mango,apple}

诸如此类

所以任何人都可以帮助获得我预期的输出(如果可能的话)

这样它可以帮助我应用 apriori() 算法。

提前谢谢你。

【问题讨论】:

  • 这是arules 的问题吗? frt 是什么?
  • with(frt, aggregate(name ~ id, frt, toString))这样在R基础中收集水果会有帮助吗?

标签: r arules


【解决方案1】:

如果您在arules 中进行购物篮分析,则需要构造一个transactions。您可以从您的文本文件中执行此操作,例如:

write.csv(frt,file="temp.csv", row.names=FALSE) # say "temp.csv" is your text file
tranx <- read.transactions(file="temp.csv",format="single", sep=",", cols=c("id","name"))
inspect(tranx)
#     items           transactionID
# 1  {apple,                      
#     grapes,                     
#     mango}                    1 
# 2  {black-grapes}             10
# 3  {pomogranate}              11
# 4  {black-grapes,               
#     carrot,                     
#     custard-apple,              
#     pomogranate}              12

...,如果您已经将文本文件读入data.frame,您可以通过如下列表对象将其强制转换为transactions

tranx2 <- list()
for(i in unique(frt$id)){
  tranx2[[i]] <- unlist(frt$name[frt$id==i])
}

inspect(as(tranx2,'transactions'))

#   items          
# 1  {apple,        
#   grapes,       
#   mango}        
# 2  {apple,        
#   carrot}       
# 3  {apple,        
#   mango}        
# 4  {apple,        
#   carrot,       
#   grapes}       

【讨论】:

  • 非常感谢您的指导,这对我帮助很大。但是我无法理解的一件事是您的代码(程序)的第二部分需要什么,请您说一下。
  • @Dinesh 如果你从文本文件开始,你应该做第一部分。如果您从名为frt 的data.frame 开始,则应该执行第二部分。你的问题不清楚,所以我给了你选项。你不需要两者都做。
  • 非常感谢@C8H10N4O2
猜你喜欢
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多