r преобразовать игру в visNetwork - PullRequest
0 голосов
/ 23 января 2019

Я нашел способ конвертировать 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), ]

распечатать все правила в табличном формате (сортировка по лифту)

enter image description here

Составьте топ-10 правил ассоциации с помощью igraph

ig <- plot(rules, method="graph", control=list(type="items"))

enter image description here

Примечание: На основании правил ассоциации я строю диаграмму сети с помощью 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 enter image description here

Примечание: Для диаграммы visNetwork размер узла перехвата указывает «подъем», чем выше подъем, тем больше размер узла перехвата; в отличие от диаграммы igraph, размер узла перехвата означает «поддержка», а цвет узла перехвата - «подъем».

Давайте сравним igraph и visNetwork

enter image description here Ссылаясь на правила ассоциации в табличном формате, правила № 10 (правила с наименьшим «подъемом»), предположим, что размер узла перехвата является наименьшим, но в итоге он не самый маленький.

Проблемы

Я попытался углубиться в ig_df <- get.data.frame( ig, what = "both" ), и нашел в таблице ig_df$vertices что-то странное, сгенерированное из функции as_data_frame из library(igraph). enter image description here Я обнаружил, что assoc10 (узел перехвата для правил ассоциации № 10) на самом деле имел NA для всех переменных (то есть «поддержка», «уверенность», «лифт» и «счет»), точнее измерение для столбцов «поддержка» "," доверие "," лифт "и" количество "в ig_df$vertices поднимаются на один ряд вверх! Пожалуйста, поправьте меня, если я ошибаюсь ..

Заключение Поскольку ключ для преобразования igraph в visNetwork состоит в том, чтобы использовать as_data_frame для извлечения всех данных из igraph и преобразования этих данных в dataframe, затем создайте график visNetwork, используя данные из извлеченного dataframe. Но из-за проблема извлечения при использовании as_data_frame для извлечения данных из igraph, поэтому результат также отличается.

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

...