可视化从 .csv 文件导入的关联规则

问题描述 投票:0回答:1

我使用 R 中的 apriori 算法生成关联规则。通常,我可以使用下面的代码可视化生成的规则:

# Load the arules package
library(arules)
library(arulesViz)

# Generate example transaction data
example_transactions <- list(
  c("item1", "item2", "item3"),
  c("item1", "item3"),
  c("item2", "item4"),
  c("item1", "item2", "item4"),
  c("item2", "item3")
)

# Convert the transaction data to a transactions object
example_transactions <- as(example_transactions, "transactions")

# Mine association rules
example_rules <- apriori(example_transactions, 
                         parameter = list(support = 0.02, confidence = 0.2),
                         control = list(verbose = FALSE))

# Plot the association rules using the "paracoord" method
plot(example_rules, method = "paracoord")

我将规则导出到 CSV 并使用提升增加标准 (LIC) 执行手动规则选择,因为我无法在 R 中执行此操作。应用 LIC 标准导致规则数量减少(LIC 涉及选择经历过的规则)当将新项目添加到父规则左侧的预先存在的项目时,其父规则的提升会增加(按特定阈值)。

现在,我想再次将手动选择的规则导入到 R 中,并使用plot()将它们可视化。但是,当我这样做时,代码无法正常工作。

write(example_rules,
      file = "rules.csv",
      sep = ",",
      quote = TRUE,
      row.names = FALSE)


# Read the CSV file into a data frame
rules_df <- read.csv("rules.csv")

# Create a rules object
rules <- as(rules_df, "rules")

收到的错误是“

Error in as(rules_df, "rules") : 
  no method or default for coercing “data.frame” to “rules”

我也尝试过将数据帧转换为事务,但这也不起作用。

rules_df <- read.csv("rules.csv")

rules_df <- as.data.frame(unlist(rules_df))
rules_trans <- as(rules_df, "transactions")
plot(rules_trans, method = "paracoord")

我注意到apriori函数创建的对象的结构和数据框是不同的。但我怎样才能解决这个问题并生成情节呢?

> str(example_rules)
Formal class 'rules' [package "arules"] with 4 slots
  ..@ lhs    :Formal class 'itemMatrix' [package "arules"] with 3 slots
  .. .. ..@ data       :Formal class 'ngCMatrix' [package "Matrix"] with 5 slots
  .. .. .. .. ..@ i       : int [1:22] 3 0 3 1 2 0 2 1 0 1 ...
  .. .. .. .. ..@ p       : int [1:21] 0 0 0 0 0 1 2 3 4 5 ...
  .. .. .. .. ..@ Dim     : int [1:2] 4 20
  .. .. .. .. ..@ Dimnames:List of 2
  .. .. .. .. .. ..$ : NULL
  .. .. .. .. .. ..$ : NULL
  .. .. .. .. ..@ factors : list()
  .. .. ..@ itemInfo   :'data.frame':   4 obs. of  1 variable:
  .. .. .. ..$ labels: chr [1:4] "item1" "item2" "item3" "item4"
  .. .. ..@ itemsetInfo:'data.frame':   0 obs. of  0 variables
  ..@ rhs    :Formal class 'itemMatrix' [package "arules"] with 3 slots
  .. .. ..@ data       :Formal class 'ngCMatrix' [package "Matrix"] with 5 slots
  .. .. .. .. ..@ i       : int [1:20] 3 2 0 1 0 3 1 3 0 2 ...
  .. .. .. .. ..@ p       : int [1:21] 0 1 2 3 4 5 6 7 8 9 ...
  .. .. .. .. ..@ Dim     : int [1:2] 4 20
  .. .. .. .. ..@ Dimnames:List of 2
  .. .. .. .. .. ..$ : NULL
  .. .. .. .. .. ..$ : NULL
  .. .. .. .. ..@ factors : list()
  .. .. ..@ itemInfo   :'data.frame':   4 obs. of  1 variable:
  .. .. .. ..$ labels: chr [1:4] "item1" "item2" "item3" "item4"
  .. .. ..@ itemsetInfo:'data.frame':   0 obs. of  0 variables
  ..@ quality:'data.frame': 20 obs. of  5 variables:
  .. ..$ support   : num [1:20] 0.4 0.6 0.6 0.8 0.2 0.2 0.4 0.4 0.4 0.4 ...
  .. ..$ confidence: num [1:20] 0.4 0.6 0.6 0.8 0.5 ...
  .. ..$ coverage  : num [1:20] 1 1 1 1 0.4 0.6 0.4 0.8 0.6 0.6 ...
  .. ..$ lift      : num [1:20] 1 1 1 1 0.833 ...
  .. ..$ count     : int [1:20] 2 3 3 4 1 1 2 2 2 2 ...
  ..@ info   :List of 5
  .. ..$ data         : symbol example_transactions
  .. ..$ ntransactions: int 5
  .. ..$ support      : num 0.02
  .. ..$ confidence   : num 0.2
  .. ..$ call         : chr "apriori(data = example_transactions, parameter = list(support = 0.02, confidence = 0.2), control = list(verbose = FALSE))"
> str(rules_df)
'data.frame':   20 obs. of  6 variables:
 $ rules     : chr  "{} => {item4}" "{} => {item3}" "{} => {item1}" "{} => {item2}" ...
 $ support   : num  0.4 0.6 0.6 0.8 0.2 0.2 0.4 0.4 0.4 0.4 ...
 $ confidence: num  0.4 0.6 0.6 0.8 0.5 ...
 $ coverage  : num  1 1 1 1 0.4 0.6 0.4 0.8 0.6 0.6 ...
 $ lift      : num  1 1 1 1 0.833 ...
 $ count     : int  2 3 3 4 1 1 2 2 2 2 ...

有谁知道如何处理这个问题吗?我非常感谢您的支持。

r plot visualization apriori arules
1个回答
0
投票

一旦使用

write()
以人类可读的形式编写规则,就无法轻松读回它们,因为大量信息丢失了。一种选择是使用 PMML(参见
write.PMML
)。但是,结果是一个无法在 Excel 中使用的 XML 文件。

使用包中的LIC很容易过滤

arules

example_rules[!is.redundant(example_rules, measure = "lift")]

将删除所有带有 LIC 的规则 <= 1. It technically uses improvement, but that has the same effect.

© www.soinside.com 2019 - 2024. All rights reserved.