library(igraph)
##
## 載入套件:'igraph'
## 下列物件被遮斷自 'package:stats':
##
## decompose, spectrum
## 下列物件被遮斷自 'package:base':
##
## union
# 建立有向圖
gg <- make_graph(
edges = c(3,4, 4,2, 4,5, 1,2, 5,1, 1,5,
1,10, 10,1, 10,6, 6,10, 6,9, 9,6,
7,6, 9,8, 7,8, 7,9),
directed = TRUE
)
# 計算中介中心性
node_centrality <- betweenness(gg, directed = TRUE)
# 找出擁有最大中介中心性的節點
max_centrality <- max(node_centrality)
important_nodes <- which(node_centrality == max_centrality)
# 設定節點顏色
node_colors <- ifelse(seq_along(V(gg)) %in% important_nodes, "red", "gray")
# 繪製圖
plot(gg,
vertex.color = node_colors,
vertex.size = 20,
vertex.label.color = "black",
vertex.label.cex = 1.2,
edge.arrow.size = 0.5
)
# 顯示每個節點的中介中心性
print(node_centrality)
## [1] 21 0 0 7 10 18 0 0 6 21
網絡中比較重要的node(s)以紅色標示,試說明為什麼這個(些)node(s)重要:
標示紅色之節點在於關注影響力最大的節點,採用中介中心性(Betweenness Centrality) 來判斷重要節點。中介中心性較高的節點,代表它在資訊傳遞中的關鍵程度較高。
# 取得鄰接矩陣
adj_matrix <- as_adjacency_matrix(gg, sparse = FALSE)
print(adj_matrix)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] 0 1 0 0 1 0 0 0 0 1
## [2,] 0 0 0 0 0 0 0 0 0 0
## [3,] 0 0 0 1 0 0 0 0 0 0
## [4,] 0 1 0 0 1 0 0 0 0 0
## [5,] 1 0 0 0 0 0 0 0 0 0
## [6,] 0 0 0 0 0 0 0 0 1 1
## [7,] 0 0 0 0 0 1 0 1 1 0
## [8,] 0 0 0 0 0 0 0 0 0 0
## [9,] 0 0 0 0 0 1 0 1 0 0
## [10,] 1 0 0 0 0 1 0 0 0 0
# 取得邊列表
edge_list <- get.edgelist(gg)
## Warning: `get.edgelist()` was deprecated in igraph 2.0.0.
## ℹ Please use `as_edgelist()` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
print(edge_list)
## [,1] [,2]
## [1,] 3 4
## [2,] 4 2
## [3,] 4 5
## [4,] 1 2
## [5,] 5 1
## [6,] 1 5
## [7,] 1 10
## [8,] 10 1
## [9,] 10 6
## [10,] 6 10
## [11,] 6 9
## [12,] 9 6
## [13,] 7 6
## [14,] 9 8
## [15,] 7 8
## [16,] 7 9
# 取得鄰接列表
V(gg)$name <- as.character(1:vcount(gg))
adj_list <- lapply(V(gg), function(v) neighbors(gg, v, mode = "out"))
names(adj_list) <- V(gg)$name
print(adj_list)
## $`1`
## + 3/10 vertices, named, from 202a53d:
## [1] 2 5 10
##
## $`2`
## + 0/10 vertices, named, from 202a53d:
##
## $`3`
## + 1/10 vertex, named, from 202a53d:
## [1] 4
##
## $`4`
## + 2/10 vertices, named, from 202a53d:
## [1] 2 5
##
## $`5`
## + 1/10 vertex, named, from 202a53d:
## [1] 1
##
## $`6`
## + 2/10 vertices, named, from 202a53d:
## [1] 9 10
##
## $`7`
## + 3/10 vertices, named, from 202a53d:
## [1] 6 8 9
##
## $`8`
## + 0/10 vertices, named, from 202a53d:
##
## $`9`
## + 2/10 vertices, named, from 202a53d:
## [1] 6 8
##
## $`10`
## + 2/10 vertices, named, from 202a53d:
## [1] 1 6
# 建立有向圖
ggg <- make_graph(
edges = c(1,2, 1,3, 2,4, 3,4, 4,5),
directed = TRUE
)
E(ggg)
## + 5/5 edges from 20922c4:
## [1] 1->2 1->3 2->4 3->4 4->5
library(magrittr)
ggg <- ggg %>% add_vertices(1) %>% add_edges(edges=c(3,6, 6,5))
E(ggg)
## + 7/7 edges from 2098341:
## [1] 1->2 1->3 2->4 3->4 4->5 3->6 6->5
V(ggg)$name <- c("A", "B", "C", "D", "E", "F")
V(ggg)$name
## [1] "A" "B" "C" "D" "E" "F"
# 計算中介中心性
node_centrality_2 <- betweenness(ggg, directed = TRUE)
# 找出擁有最大中介中心性的節點
max_centrality_2 <- max(node_centrality_2)
# 設定節點顏色
node_colors_2 <- ifelse(node_centrality_2 == max_centrality_2, "red","gray")
# 繪製圖
plot(ggg,
vertex.color = node_colors_2,
vertex.size = 20,
vertex.label.color = "black",
vertex.label.cex = 1.2,
edge.arrow.size = 0.5
)
# 顯示每個節點的中介中心性
print(node_centrality_2)
## A B C D E F
## 0.0000000 0.8333333 2.1666667 2.1666667 0.0000000 0.8333333
標示紅色之節點在於關注影響力最大的節點,採用中介中心性(Betweenness Centrality) 來判斷重要節點。中介中心性較高的節點,代表它在資訊傳遞中的關鍵程度較高。