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
И я не смог воспроизвести вашу проблему с подвижным столом, моя выглядела нормально, надеюсь, она решится сама собой!