R中的arules的序列事务类

时间:2015-02-23 23:14:52

标签: r data-mining rules sequences arules

尝试在R中使用arulesSequences个包。遇到问题我见过很多人遇到但没有好的答案:从数据框架或矩阵到事务数据类型。

我已经完成了这个,正如文档明确指出的那样,arules:

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")

工作正常。但是如果我尝试对3列数据帧做同样的事情,那么一切都变得混乱:

a_df4<-data.frame(SEQUENCEID=c("1","1","1","2","2","3","3"),
                  EVENTID=c("1","2","3","1","2","1","2"),
                  ITEM=c("a","b","a","c","a","a","b"))
a_df4
   SEQUENCEID EVENTID ITEM
1    1         1      a
2    1         2      b
3    1         3      a
4    2         1      c
5    2         2      a
6    3         1      a
7    3         2      b

是的,有重复但这恰恰是重点,不是吗? (找到频繁的序列集)。

所以,现在我强迫这样:

seqt<-as(split(myseq[,"ITEM"],myseq[,"SEQUENCEID"],myseq[,"EVENTID"]),"transactions")

我得到了:

Error in asMethod(object) : 
   can not coerce list with transactions with duplicated items

我到处都试图通过这个简单的障碍:

  1. 更改拆分顺序
  2. 将所有内容都改为因素
  3. 将所有内容更改为矩阵
  4. 直接将数据框输入arules函数
  5. 导出为.txt,导入为read.transactions
  6. 导出为.txt,导入为“basket”
  7. 尝试“解决方案”:hereherehere(read_baskets是一个函数?)
  8. 所有错误都是上面描述的错误,或者当我没有得到任何错误时,我得到一个包含两列的事务对象,arulesSequences无法读取OF COURSE,因为它需要三列:1)SEQUENCE- ID,EVENT-ID,ITEMS。

    我认为我的数据库结构不会更清晰。顺序是“客户编号”,事件ID将是购买编号和项目,以及项目。

    请任何帮助,包括结构“as()”想要看到它正确地进行强制。

3 个答案:

答案 0 :(得分:2)

试试这个:

trans4 <- as(a_df3[,"item"], "transactions")
trans4@itemsetInfo$sequnceID = a_df3$SEQUENCEID
trans4@itemsetInfo$eventID = a_df3$EVENTID

transSeq = as(trans4, "timedsequences")

答案 1 :(得分:0)

arules将事务视为而不是序列

它可以检测频繁项,但可能不是序列

检查重复项是防止错误使用它的一种保护措施:它会忽略多重性和顺序,因此有多个相同类型的项目 会丢失信息。

  

transactions类表示用于挖掘项集或规则的事务数据。它是class itemMatrix的直接扩展,用于存储二进制关联矩阵,项标签以及可选的事务ID和用户ID。

(来自文档,重点补充)

答案 2 :(得分:0)

这个问题被问到了一段时间了,但无论如何我都会试着回答它。该错误似乎是因为存在以下类型的相同记录

  SEQUENCEID EVENTID ITEM
1    1         1      a
3    1         1      a
4    2         1      c 

如果在拆分和转换为事务之前检查不同的记录,这可能会解决问题。