Создание нового графа на основе кластера anylise - R - PullRequest
0 голосов
/ 20 ноября 2018
library("network")
library("networkD3")
library("igraph")

df1 <- read.table(text = "src   target
                  cllient1  cllient2
                  cllient1  cllient4
                  cllient1  cllient6
                  cllient2  cllient3
                  cllient4  cllient1
                  cllient4  cllient3
                  cllient5  cllient6
                  cllient6  cllient5", header = TRUE)

lesmis <- graph_from_data_frame(df1)
wc <- cluster_walktrap(lesmis)
members <- membership(wc)
lesmis <- igraph_to_networkD3(lesmis, group = members)

D3_network_LM <- networkD3::forceNetwork(Links = lesmis$links, Nodes = lesmis$nodes, 
                                         Source = 'source', Target = 'target', 
                                         NodeID = 'name', Group = 'group', 
                                         opacity = 1,zoom = TRUE)
networkD3::saveNetwork(D3_network_LM, "test.html", selfcontained = TRUE)

Так близко, что у нас есть сеть.После этого мы создаем новый граф, объединяя несколько вершин в одну.В нашем случае те вершины, которые принадлежат конкретному сообществу.

lesmis <- graph_from_data_frame(df1)
cg <- contract.vertices(lesmis, members)
ay <- as_long_data_frame(cg)
View(ay)

мы получили новый граф,

from    to
1   2

Мы можем снова построить новый граф, где теперь эти узлы являются группами, но их имена 1 и 2, мой вопрос в том, как мыможете добавить имена клиентов к этому новому графику.Таким образом, при наведении мы можем получить не только номер узла (группы), но и список клиентов, принадлежащих этому новому узлу (группе).

1 Ответ

0 голосов
/ 21 ноября 2018

Ваш пример кода не работает по нескольким причинам (я немного отредактировал его, чтобы исправить некоторые очевидные проблемы), но я думаю, что следующее достигает того, что вы пытаетесь сделать ...

library(network)
library(networkD3)
library(igraph)

df <- read.table(header = TRUE, 
                 text = "src   target
                         cllient1  cllient2
                         cllient1  cllient4
                         cllient1  cllient6
                         cllient2  cllient3
                         cllient4  cllient1
                         cllient4  cllient3
                         cllient5  cllient6
                         cllient6  cllient5")

df_graph <- graph_from_data_frame(df)

wc <- cluster_walktrap(df_graph)
members <- membership(wc)

df_graph_cntrctd <- contract(df_graph, members, vertex.attr.comb = toString)

df_graph_cntrctd_D3 <- igraph_to_networkD3(df_graph_cntrctd)

networkD3::forceNetwork(Links = df_graph_cntrctd_D3$links, 
                        Nodes = df_graph_cntrctd_D3$nodes, 
                        Source = 'source', Target = 'target', 
                        NodeID = 'name', Group = 'name', 
                        opacity = 1, zoom = TRUE)

enter image description here

...