我找到了一种将 igraph 转换为 visNetwork 的方法(请参阅Interactive arules with arulesViz 和 visNetwork)。假设从 igraph 转换为 visNetwork 之前和之后应该是相同的,但是我的结果显示转换为 visNetwork 之后,结果是不同的。
我将尝试使用data("Groceries")
来自Library(arules)
.
#Pre-defined library
library(arules)
library(arulesViz)
library(visNetwork)
library(igraph)
#Get sample data & get association rules
data("Groceries")
rules <- apriori(Groceries, parameter=list(support=0.01, confidence=0.4))
rules <- head(sort(rules, by="lift"), 10)
#Convert rules to data.table
library(data.table)
rules_dt <- data.table( lhs = labels( lhs(rules) ),
rhs = labels( rhs(rules) ),
quality(rules) )[ order(-lift), ]
以表格格式打印所有规则(按电梯排序)
通过使用 igraph 绘制前 10 条关联规则
ig <- plot(rules, method="graph", control=list(type="items"))
注意:根据关联规则,我使用 igraph 绘制网络图,一切都是正确的。接下来我将尝试将现有的 igraph 转换为 visNetwork,然后我们比较结果。
tf <- tempfile( )
saveAsGraph(rules, file = tf, format = "dot" )
# clean up temp file if desired
#unlink(tf)
# Convert igraph to dataframe
ig_df <- as_data_frame(ig, what = "both")
# Plot visNetwork
visNetwork(
nodes = data.frame(
id = ig_df$vertices$name
,value = ig_df$vertices$lift # could change to lift or confidence
,title = ifelse(ig_df$vertices$label == "",ig_df$vertices$name,
ig_df$vertices$label)
,ig_df$vertices
),
edges = ig_df$edges
) %>%
visEdges(arrows ="to") %>%
visOptions( highlightNearest = T )
注意:对于visNetwork图,拦截节点的大小表示“提升”,提升越高,拦截节点的大小越大;与 igraph 图不同,拦截节点的大小表示“支持”,而拦截节点的颜色表示“提升”。
让我们比较一下 igraph 和 visNetwork
参考表格形式的关联规则,第10条规则(“提升”最小的规则),假设截取节点的大小是最小的,但最终它不是最小的。
问题
我试图进一步深入研究,我在桌子ig_df <- get.data.frame( ig, what = "both" )
上发现了一些奇怪的东西,它是从.
我发现 assoc10(第 10 号关联规则的拦截节点)实际上具有所有变量(即“支持”、“信心”、“提升”和“计数”),更准确地说是“支持”、“信心”,“提升”和“计数”在上升一排!如果我错了请纠正我..ig_df$vertices
as_data_frame
library(igraph)
NA
ig_df$vertices
结论
由于将 igraph 转换为 visNetwork 的关键是使用它as_data_frame
从 igraph 中提取所有数据并将这些数据转换为数据帧,然后使用提取的数据帧中的数据绘制 visNetwork。但由于使用 igraph 提取数据时存在提取问题as_data_frame
,因此结果也不同。
问题:这是一个错误吗?还是我的代码出错了?欢迎任何建议。谢谢!