R корреляционная сеть на основе атрибута вершины - PullRequest
0 голосов
/ 07 июня 2018

У меня есть сеть корреляции всех пользователей и того, как они связаны друг с другом на основе их ролей, и я сделал следующий сюжет:

plot(
    net,
    vertex.frame.color=ifelse(V(net)$Team==TeamName, "black",NA),
    vertex.size=ifelse(V(net)$Team==TeamName, 5, 0),
    vertex.label=ifelse(V(net)$Team==TeamName, NA, NA), 
    edge.arrow.mode=0,
    edge.lty=0,
    vertex.color=ifelse(V(net)$Team==TeamName, "skyblue", NA))

В результате: все пользователи, крометолько пользователи определенной команды окрашены Plot Что я хочу сделать, это добавить имена каждого изменения пользователя vertex.label, но это загромождает сюжет.поскольку пользователи так близко друг к другу.

plot(
    net,
    vertex.frame.color=ifelse(V(net)$Team==TeamName, "black",NA),
    vertex.size=ifelse(V(net)$Team==TeamName, 5, 0),
    vertex.label=ifelse(V(net)$Team==TeamName, V(net)$internalname, NA), 
    edge.arrow.mode=0,
    edge.lty=0,
    vertex.color=ifelse(V(net)$Team==TeamName, "skyblue", NA))

Другое дело, что мы чувствуем себя уменьшенными, было бы намного лучше, если бы сюжет был сосредоточен на видимых пользователях (ifelse(V(net)$Team==TeamName), я думалнасчет подграфов, но я не могу понять, как это сделать точно.И я не знаю, является ли это решением.

Я также пробовал это, этот график показывает мне, что все мои пользователи одинаково коррелированы, а предыдущий - нет.

tem <-delete.vertices(net,V(net)$Team!=TeamName)
plot(tem, vertex.label= round(closeness(tem, mode="all", weights=NA),2))

Некоторая дополнительная информация, так как я не могу поделиться личными данными

фрейм данных, который используется в качестве ребер (х - количество общих соединений)

 $ acentralacc: chr  
 $ bcentralacc: chr  
 $ x          : int

фрейм данных, который используется в качестве вершины

  $ CentralAccount: chr  
  $ internalname  : chr 
  $ Team          : Factor

Это должно сгенерировать пример данных

install.packages("plyr")
library(plyr)
#data1 (edges)
n<-100
acentralacc<- paste("user",sample(1:n, 1000,replace=TRUE)) #usera
bcentralacc<- paste("user",sample(1:n, 1000,replace=TRUE)) #userb
x<- sample(1:100, 1000,replace=TRUE) #x
data1 <- data.frame(acentralacc,bcentralacc,x)
head(data1)

#users (vertices)
centralacc <- unique(append(acentralacc, bcentralacc))
Team<- paste("Team",sample(1:round(n/3,0), length(centralacc),replace=TRUE))
users<-data.frame(centralacc,Team)
head(users)

другой код

users$Team <- iconv(users$Team, "ASCII", "UTF-8", sub="")
users$Team <- factor(users$Team)
#creating the igraph
net <- graph_from_data_frame(d=data1, vertices=users, directed=T) 
#the following should be igraph
    class(net) 
#removing fields with no links (0 degree)(users with no connections)
    length(net[1])
net <- delete.vertices(simplify(net), degree(net)==0)
    length(net[1])
#removing graphical loops etc users that have connections to them self
net <- simplify(net, remove.multiple = F, remove.loops = T)
...