[實作1]: 建立台灣縣市相鄰矩陣,利用Rigraph(or sna)繪製各縣市的相鄰網絡圖
[.設定所需的函式庫(libraries)以及載入資料]
library(igraph)
setwd("D:/Rdata Practice/SNA/HW_NetViz")
data<- "TW_county_el.csv" #這是台灣縣市的鄰近矩陣
el<-read.table(data, header=T, sep=",", encoding="utf-8")
el
data<- "Party.csv" #這是政檔屬性資料表
p<-read.table(data, header=T, sep=",", encoding="utf-8") #P是一個dataframe,但排列順序一定跟上面的el不同
nrow(p)
1-1.基本資料呈現
g=graph.data.frame(el,directed=FALSE)
plot(g)
V(g) #有幾個節點
E(g) #有幾條tie
V(g)$name
[實習2]: 建立台灣縣市首長的黨籍屬性(藍、綠或無黨),利用矩陣運算建立image matrix,並說明該矩陣所表示的意涵。
2-1.將igraph 轉成 matrix,才方便後續計算
m<-get.adjacency(g) #get.adjacency為把igraph --> matrix
m #這是矩陣,但是是稀疏矩陣,所以要轉成正常的矩陣
str(m)
m2<-as.matrix(m) #轉成正常的矩陣
2-2.建新的欄位名稱
# DPP[i] <- p$DPP[V(g)$name[i]==p$X] 後面這一串是屬性資料,把p$X 之DPP的欄位放到新的欄位
for(i in 1:19){
V(g)$DPP[i] <- p$DPP[V(g)$name[i]==p$X]
V(g)$KMT[i] <- p$KMT[V(g)$name[i]==p$X]
V(g)$N[i] <- p$N[V(g)$name[i]==p$X]
}
d <- seq(1,57,1) #建一個新的矩陣
Mparty<-matrix(d, nrow=19, ncol=3, byrow=T) #19行、3個col
Mparty[,1] <- V(g)$DPP
Mparty[,2] <- V(g)$KMT
Mparty[,3] <- V(g)$N
2-3.轉置矩陣
R<- t(Mparty) %*% m2 %*% Mparty #t(Mparty)轉置矩陣
colnames(R)<-rownames(R)<-c("DPP", "KMT", "N")
R #R是最後答案
2-4.畫圖
g1=graph.adjacency(R,mode="undirected",weighted=TRUE)
?graph.adjacency
V(g1); E(g1)
E(g1)$weight
plot(g1, vertex.color="yellow", edge.color="black", edge.width=E(g1)$weight/2, vertex.size=20, main='Taiwan Party Graph')
#edge.width是線段粗細。weight/2只是為了畫面好看