r преобразовать игру в visNetwork

Я нашел способ конвертировать 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, поэтому результат также отличается.

Вопрос: это ошибка? или я допустил ошибку в своем коде? Любое предложение приветствуется. Спасибо!

0 ответов

Год спустя... но я уже все напечатал, может, тоже.

Если я правильно понимаю, это источник ваших неприятностей -

value = ig_df$vertices$lift # could change to lift or confidence

Самое простое решение - присвоить значения подъемной силы size потому что в visNetwork size: Number. Default to 25. The size is used to determine the size of node shapes that do not have the label inside of them. These shapes are: image, circularImage, diamond, dot, star, triangle, triangleDown, square and icon. Я не уверен какvalues здесь работает, но я думаю, вы могли бы использовать values если вы также предоставите соответствующие scaling. https://www.rdocumentation.org/packages/visNetwork/versions/2.0.9/topics/visNodes

Итак, решение:

size = ig_df$vertices$lift # could change to lift or confidence

Обратите внимание, что узлы с лифтом NA имеют размер 25 по умолчанию, а с лифтом размера 2 или 3 вы едва можете увидеть узлы. Вы можете увеличить размер подъема экспоненциально, что увеличит размер узлов и преувеличивает разницу в подъеме.

ig_df <- as_data_frame(ig, what = "both")
ig_df$vertices["lift"] <- ig_df$vertices["lift"] ** 3

И я не смог воспроизвести вашу проблему с подвижным столом, моя выглядела нормально, надеюсь, она решится сама собой!

Другие вопросы по тегам