Power BI - R 脚本视觉 - Apriori

Posted

技术标签:

【中文标题】Power BI - R 脚本视觉 - Apriori【英文标题】:Power BI - R Script Visual - Apriori 【发布时间】:2018-10-29 16:35:48 【问题描述】:

我在 PowerBI 中使用 r 脚本视觉对象。我可以在 R 中运行以下代码并且它可以工作,但是在 PowerBI 中运行时出现以下错误。我想以视觉形式显示先验结果。下面的两个测试都在 R 中运行良好,但在 PowerBI 的 R 脚本视觉效果中却没有。有什么想法吗?

如果我尝试#test2。

library(Matrix)
library(arules)
library(plyr)
library(gridExtra)

df_itemList <- ddply(dataset,c("SALESID"),function(df1)paste(df1$ITEMID))
#test1
#df_itemList  = sapply(df_itemList , function(x) gsub(" ", ",", x))
#basket_rules <- apriori(df_itemList, parameter = list(sup=0.1,conf=0.5,target="rules", maxlen=5));

#test2
txn = read.transactions(df_itemList, rm.duplicates = TRUE, format = "basket", sep = ",", cols = 1);
basket_rules <- apriori(txn, parameter = list(sup=0.1,conf=0.5,target="rules", maxlen=5));

df_basket <- as(basket_rules,"data.frame")
grid.table(df_basket)

错误信息: R 脚本错误。

附加包:'arules'

以下对象被 'package:base' 屏蔽:

abbreviate, write

readLines(file, encoding = encoding) 中的错误:“con”不是连接 调用:read.transactions -> lapply -> readLines 执行停止

如果我尝试#test1...

library(Matrix)
library(arules)
library(plyr)
library(gridExtra)

df_itemList <- ddply(dataset,c("SALESID"),function(df1)paste(df1$ITEMID))
#test1
df_itemList  = sapply(df_itemList , function(x) gsub(" ", ",", x))
basket_rules <- apriori(df_itemList, parameter = list(sup=0.1,conf=0.5,target="rules", maxlen=5));

#test2
#txn = read.transactions(df_itemList, rm.duplicates = TRUE, format = "basket", sep = ",", cols = 1);
#basket_rules <- apriori(txn, parameter = list(sup=0.1,conf=0.5,target="rules", maxlen=5));

df_basket <- as(basket_rules,"data.frame")
grid.table(df_basket)

然后我得到下面的错误。

错误信息: R 脚本错误。

附加包:'arules'

以下对象被 'package:base' 屏蔽:

abbreviate, write

asMethod(object) 中的错误: 第 2、3、4 列不符合逻辑或因素。首先离散列。 调用:apriori -> as -> asMethod 执行停止

【问题讨论】:

您发布的代码中的 read.transactions 调用已被注释掉,但您的错误消息包含该调用。注释掉的代码是您运行的代码的一部分吗?如果是这样,则该错误与 R 与 PowerBI 无关,仅仅是因为您没有将文件名传递给 read.transactions 调用而是一个数据帧。 @KonradRudolph 我正在运行 2 个测试...我更新了我的原始帖子。 我希望将此报告部署到 Powerbi 服务...我不能在不调用文件的情况下使用 apriori 吗?我不能只使用数据集吗? 我劝你read the arules vignette,它解释了如何正确调用apriori,特别是如何构造一个可以传递给apriori函数的“事务”对象(第 5.2 节;虽然您也可以直接传递数据帧)。 — 无论如何,这真的与 R 与 Power BI 无关。 我去看看。谢谢。 【参考方案1】:

在 PowerBI R 脚本中使用 read.transactions 的正确方法是将数据帧转换为矩阵,然后转换为事务类。这是通过将导出传递到 csv,然后读回 read.transactions... 参考 here

library(Matrix)
library(arules)
library(plyr)
library(dplyr)
library(gridExtra)

itemList <- dataset
#itemList <- read.csv("ItemListAll.csv", header=TRUE, sep=",")

# Converting to a Matrix ####
itemList$const = TRUE

# Remove duplicates
dim(itemList)
orders <- unique(itemList)
dim(itemList)

# Need to reshape the matrix
itemList_max_prep <- reshape(data = itemList,
                           idvar = "SALESID",
                           timevar = "ITEMID",
                           direction = "wide")

# Drop the SALESID
itemList_matrix <- as.matrix(itemList_max_prep[,-1])

# Clean up the missing values to be FALSE
itemList_matrix[is.na(itemList_matrix)] <- FALSE

# Clean up names
colnames(itemList_matrix) <- gsub(x=colnames(itemList_matrix),
                               pattern="const\\.", replacement="")

itemList_trans <- as(itemList_matrix,"transactions")

#inspect(itemList_trans)

basket_rules <- apriori(itemList_trans, parameter = list(sup=0.01,conf=0.5,target="rules", minlen=3));
df_basket <- as(basket_rules,"data.frame")
df_basket$support <- ceiling(df_basket$support * 100)
df_basket$confidence<- ceiling(df_basket$confidence * 100)
df_basket$lift<- round(df_basket$lift, digits = 2)
df_basket <- df_basket[rev(order(df_basket$support)),];
grid.table(head(df_basket));

【讨论】:

以上是关于Power BI - R 脚本视觉 - Apriori的主要内容,如果未能解决你的问题,请参考以下文章

Power BI 中动态变化的排名列

Power BI R 脚本正则表达式仅返回第一个匹配项

使用 Python 在 Power BI 中过滤 Python Script Visual 中的数据

从已发布的 Power BI 视觉对象中抓取数据

Power BI:需要根据切片器选择向表格视觉对象添加列

Power BI Chord 视觉对象:链接具有相同列名的表