練習2

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

練習3

# 建立有向圖
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) 來判斷重要節點。中介中心性較高的節點,代表它在資訊傳遞中的關鍵程度較高。