首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >大数据集上的市场桶分析

大数据集上的市场桶分析
EN

Stack Overflow用户
提问于 2018-06-09 01:08:37
回答 1查看 76关注 0票数 0

我正在一个包含2列(OrderID和产品)的大型数据集上创建一个市场桶分析。集合中有超过一百万行,通过使用apriori包,我能够使用较小的数据子集创建一个有效的规则列表,但是当尝试使用全集时,我无法使用split函数按OrderID聚合数据。有没有另一个功能与split类似的函数可以处理这么多的数据?下面列出了代码:

MyData <- read.csv("C:/Market Basket Analysis/BOD16-Data.csv") #Abreviated for proprietary reasons
View(MyData)

library(arules)
summary(MyData)

#Using the split function, we are able to aggregate the transactions, so that each
#product on the transaction is grouped into its respective, singular, transID

start.time <- Sys.time() #Timer used to measure run time on the split function
aggregateData <- split(MyData$Product, MyData$OrderID)
end.time<- Sys.time()

time.taken = end.time- start.time
time.taken


#Using the split function, we are able to aggregate the transactions, so that each
#product on the transaction is grouped into its respective, singular, transID
aggregateData <- split(MyData$Product, MyData$OrderID)
head(aggregateData)

#Need to convert the aggregated data into a form that 'Arules' package 
#can accept
txns <- as(aggregateData, "transactions")
#txns <- read.transactions("Trans", format = "basket", sep=",", rm.duplicates=TRUE)
summary(txns)


#Apriori Algorithem generates the rules 
Rules <- apriori(txns,parameter=list(supp=0.0025,conf=0.4,target="Rules",minlen=2))
inspect(Rules)

编辑:我的数据如下:

OrderId     Product
1       1234
1       1357
1       2468
1       1324
2       1234
2       2468
3       4321
4       5432
5       1357

AggregateData should be:

[1]
1234,1357,2468,1324

[2]
1234, 2468

[3]
4321

[4]
5432

[5]
1357

目前我正在使用split函数来实现这些结果,但是当将它应用于更大的集合时,在我停止脚本之前运行时间超过了30分钟。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-09 02:41:04

这对你来说是不是更快?

library(dplyr) 

df <- tribble(
    ~OrderId, ~Product,
    1,       1234,
    1,       1357,
    1,       2468,
    1,       1324,
    2,       1234,
    2,       2468,
    3,       4321,
    4,       5432,
    5,       1357
    )

    df %>% 
         group_by(OrderId) %>% 
         summarize(Product = list(Product)) %>% 
         mutate(Product = purrr::set_names(Product, OrderId)) %>% 
         pull(Product)

因此,对于您的代码,您应该能够执行以下操作:

library(dplyr)

MyData <- read.csv("C:/Market Basket Analysis/BOD16-Data.csv")


 aggregateData <-   MyData %>% 
          group_by(OrderId) %>% 
          summarize(Product = list(Product)) %>% 
          mutate(Product = purrr::set_names(Product, OrderId)) %>% 
          pull(Product)

这应该与做以下事情相同(希望更快):

MyData <- read.csv("C:/Market Basket Analysis/BOD16-Data.csv")

aggregateData <- split(MyData$Product, MyData$OrderID)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50765474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档