Я нашел способ конвертировать igraph в visNetwork (см. Интерактивные arules с 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), ]
распечатать все правила в табличном формате (сортировка по лифту)
Составьте топ-10 правил ассоциации с помощью igraph
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 )
Составьте топ-10 правил ассоциации с помощью visNetwork
Примечание: Для диаграммы visNetwork размер узла перехвата указывает «подъем», чем выше подъем, тем больше размер узла перехвата; в отличие от диаграммы igraph, размер узла перехвата означает «поддержка», а цвет узла перехвата - «подъем».
Давайте сравним igraph и visNetwork
Ссылаясь на правила ассоциации в табличном формате, правила № 10 (правила с наименьшим «подъемом»), предположим, что размер узла перехвата является наименьшим, но в итоге он не самый маленький.
Проблемы
Я попытался углубиться в ig_df <- get.data.frame( ig, what = "both" )
, и нашел в таблице ig_df$vertices
что-то странное, сгенерированное из функции as_data_frame
из library(igraph)
.
Я обнаружил, что assoc10 (узел перехвата для правил ассоциации № 10) на самом деле имел NA
для всех переменных (то есть «поддержка», «уверенность», «лифт» и «счет»), точнее измерение для столбцов «поддержка» "," доверие "," лифт "и" количество "в ig_df$vertices
поднимаются на один ряд вверх! Пожалуйста, поправьте меня, если я ошибаюсь ..
Заключение
Поскольку ключ для преобразования igraph в visNetwork состоит в том, чтобы использовать as_data_frame
для извлечения всех данных из igraph и преобразования этих данных в dataframe, затем создайте график visNetwork, используя данные из извлеченного dataframe. Но из-за проблема извлечения при использовании as_data_frame
для извлечения данных из igraph, поэтому результат также отличается.
Вопрос: это ошибка? или я допустил ошибку в своем коде? Любое предложение приветствуется. Спасибо!