[withR]소셜네트워크분석 — 네트워크의 표현

Neo Jeong
신나는연구소
Published in
5 min readOct 17, 2019

#사회네트워크분석 입문 — 허명회 저. 참조

R에서 네트워크 행렬을 만들기 위해서는 matrix()행렬을 이용해서 연결관계를 모두 입력하는 방식이 있다.

이번에는 연결선 list 행렬을 사용해보자.

L.w.edgelist <- matrix(c(1,4,1.0,
2,4,0.5,
3,4,0.5,
4,1,1.0,
4,2,0.5,
4,3,0.5,
4,5,1.0,
5,4,1.0,
5,6,1.0,
6,5,1.0,
6,7,0.5,
7,6,0.5,
7,8,0.25,
8,7,0.25,
8,9,0.25,
9,8,0.25),ncol=3,byrow=T)

먼저 edgelist, 연결선 리스트를 matrix()함수를 이용해 입력한다. 첫번째 열이 나오는 노드, 두번째 열이 들어오는 노드, 그리고 세번째 열이 각각의 경우의 가중치 정보를 가지고 있다.

다음은 속성을 부여하는 함수 attr()을 사용하자.

attr(L.w.edgelist, “n”)<-9

이렇게 하면 이제 네트워크 분석에 연결선 list로서 사용할수 있는 데이터가 된것이다.

library(sna)

gplot(L.w.edgelist,displaylabels=T,vertex.cex=2,label.cex=1.5,
label.pos=3,boxed.labels=F, arrowhead.cex=1, mode=”kamadakawai”)

gplot()함수를 이용해 그래프가 그려지는 것을 확인 할수 있을 것이다.

또 closeness()와 betweenness()함수 등도 사용가능하다.

L.edgelist <- L.w.edgelist
L.edgelist[,3] <- 1
attr(L.edgelist,”n”) <- 9
gplot(L.edgelist,displaylabels=T,vertex.cex=2,label.cex=1.5,edge.col=”red”,
label.pos=3,boxed.labels=F, arrowhead.cex=1, mode=”kamadakawai”)

이번엔 sna패키지의 symmertrize()함수를 사용해봐. 우선 행렬 A를 생성하자.

A <- matrix(c(0,1,1,0,1,
0,0,1,0,0,
1,0,0,1,0,
0,0,0,0,0,
1,0,0,0,0),byrow=T,nrow=5)
rownames(A) <- c(“M1”,”M2",”M3",”M4",”M5")
colnames(A) <- c(“M1”,”M2",”M3",”M4",”M5")
A

행렬 A는 방향 네트워크를 이루고 있다.

이번엔 symetrize()함수를 사용하여 무방향 네트워크로 변형시켜 볼 것이다.

B <- symmetrize(A, rule=”weak”)
rownames(B) <- c(“M1”,”M2",”M3",”M4",”M5")
colnames(B) <- c(“M1”,”M2",”M3",”M4",”M5")
B

M1 M2 M3 M4 M5
M1 0 1 1 0 1
M2 1 0 1 0 0
M3 1 1 0 1 0
M4 0 0 1 0 0
M5 1 0 0 0 0

rule=”weak”는 M1에서 M2로 가는 연결선이 존재하거나 or M2에서 M1으로 가는 연결선이 존재한다면 관계는 1이라는 규칙이다.

C <- symmetrize(A, rule=”strong”)
rownames(C) <- c(“M1”,”M2",”M3",”M4",”M5")
colnames(C) <- c(“M1”,”M2",”M3",”M4",”M5")
C

M1 M2 M3 M4 M5
M1 0 0 1 0 1
M2 0 0 0 0 0
M3 1 0 0 0 0
M4 0 0 0 0 0
M5 1 0 0 0 0

rule=”strong”는 M1에서 M2로 가는 연결선이 존재하거나 and M2에서 M1으로 가는 연결선이 존재한다면 관계는 1이라는 규칙이다.

따라서 B와C는 다른 형태의 네트워크가 되는 것을 볼수 있다.

또 무방향 네트워크 에서는 행렬의 대각선 위와 대각선 아래의 형태가 대비를 이루고 있다는 것을 알고 있을 것이다. 따라서 위의 상삼각부분만 입력하거나, 아래 하삼각부분만 입력해도 정보는 충분하다.

E <- matrix(c(1,2,1,
1,3,1,
1,5,1,
2,3,1,
3,4,1),byrow=T,nrow=5,ncol=3)
attr(E,”n”) <- 5
F <- symmetrize(E,rule=”upper”)
rownames(F) <- c(“M1”,”M2",”M3",”M4",”M5")
colnames(F) <- c(“M1”,”M2",”M3",”M4",”M5")
F

M1 M2 M3 M4 M5
M1 0 1 1 0 1
M2 1 0 1 0 0
M3 1 1 0 1 0
M4 0 0 1 0 0
M5 1 0 0 0 0

rule=”upper”를 하면 상삼각 부분만 입력되어있는 연결선 정보임을 뜻한다.

rule=”lower”를 하면 하삼각 부분만 입력되어있음을 뜻한다. 네트워크 행렬을 형성할때 sna패키지의 함수를 적절히 사용하면 편리하게 생성가능하다.

--

--

Neo Jeong
신나는연구소

#Data Analyst #세상을 보는 데이터 분석가 #책을 읽는 몽상가