R에서 그래프 서식 지정

Nov 22 2020

R에서 만든 그래프에 쉽게 액세스하고 조작하는 방법을 찾으려고합니다.

다음 데이터로 시작하면. 그래프를 만들고 몇 가지 그래프 클러스터링을 실행 한 다음 첫 번째 클러스터를 플로팅합니다.

#libraries
 library(igraph)
 library(igraphdata)
 data(karate)

#cluster
 cfg <- cluster_fast_greedy(karate)
 plot(cfg, karate)
cfg

IGRAPH clustering fast greedy, groups: 3, mod: 0.43
+ groups:
  $`1` [1] "Actor 9" "Actor 10" "Actor 15" "Actor 16" "Actor 19" "Actor 21" "Actor 23" "Actor 24" "Actor 25" "Actor 26" "Actor 27" [12] "Actor 28" "Actor 29" "Actor 30" "Actor 31" "Actor 32" "Actor 33" "John A" $`2`
   [1] "Mr Hi"    "Actor 2"  "Actor 3"  "Actor 4"  "Actor 8"  "Actor 12" "Actor 13" "Actor 14" "Actor 18" "Actor 20" "Actor 22"
  
  $`3`
  [1] "Actor 5"  "Actor 6"  "Actor 7"  "Actor 11" "Actor 17"
  
#make a plot of the first community
 a = induced_subgraph(karate, cfg[[1]])
 plot(a)

#biggest graph https://stackoverflow.com/questions/15103744/r-igraph-how-to-find-the-largest-community
 x <- which.max(sizes(cfg))
 subg <- induced.subgraph(karate, which(membership(cfg) == x))

사용자 G5W는 각 클러스터의 크기를 포함하는 테이블을 만드는 방법을 보여주었습니다.

 my_table =  table(cfg$membership)

또한 모든 관찰을 해당 커뮤니티로 "압축"(계약, 축소) 한 다음 플롯을 만드는 방법도 알아 냈습니다.

contracted <- simplify(contract(karate,membership(cfg)))
plot(contracted)

세 개의 클러스터를 함께 연결하는 두 개의 "선"이있는 것으로 보입니다.

이 줄이 "정말 의미가 있는지"아는 사람이 있습니까? 이 선이 자연스럽게 발생합니까? 이 선이이 3 개의 클러스터를 연결하는 기준은 무엇입니까?

내 네트워크 데이터를 시뮬레이션하고 그래프 클러스터링을 실행하고 결과를 클러스터별로 축소 한 다음 플롯을 생성했습니다.

library(igraph)
library(dplyr)
library(visNetwork)

set.seed(1234)

#create file from which to sample from
x5 <- sample(1:10000, 10000, replace=T)
#convert to data frame
x5 = as.data.frame(x5)

#create first file (take a random sample from the created file)
a = sample_n(x5, 9000)
#create second file (take a random sample from the created file)
b = sample_n(x5, 9000)

#combine
c = cbind(a,b)
#create dataframe
c = data.frame(c)
#rename column names
colnames(c) <- c("a","b")

#create graph
graph <- graph.data.frame(c, directed=F)
graph <- simplify(graph)
cfg <- cluster_fast_greedy(graph)

#contract clusters
contracted <- simplify(contract(graph, membership(cfg), vertex.attr.comb=toString))

#visnetwork plot
visIgraph(contracted) %>% visOptions (highlightNearest = TRUE) %>% visIgraphLayout(layout = "layout_with_fr") %>%
    visOptions(highlightNearest = TRUE, nodesIdSelection = TRUE) %>% 
    visInteraction(navigationButtons = TRUE)

#without visnetwork
plot(contracted)

일부 클러스터는 여전히 서로 연결되어 있고 일부는 격리되어 있습니다. 이것이 왜인지 아는 사람이 있습니까?

감사

답변

2 G5W Nov 23 2020 at 01:41

각 클러스터의 크기가 포함 된 테이블을 가져 오려면 다음을 사용하십시오.

table(cfg$membership)
 1  2  3 
18 11  5 

이 선은 그룹 1의 일부 사람들이 그룹 2의 일부와 이야기하고 그룹 3의 일부 사람들은 그룹 2의 사람들과 이야기하지만 그룹 1의 누구도 그룹 3의 누구와도 이야기하지 않음을 의미합니다. 예를 들어 Mr Hi (그룹 2) Actor 5 (그룹 1) 및 Actor 32 (그룹 3)와 대화합니다.

다른 예는 연결되어 있지 않습니다. 여러 개의 연결된 구성 요소가 있습니다.

table(COMP$membership)
   1    2    3    4    5    6    7    8    9   10   11
6196    4    7    5    2    2    2    8    2    1    3

   13   14   15   16  17   18 
    2    2    2    2   2    2

물론 축소 된 그래프에서는 이러한 구성 요소에 대한 링크가 없습니다.