|
1 사회연결망 분석이란?
영어로는 Social Network Analysis 라고 하며, 줄여서 SNA 라고도 합니다.
사회연결망 분석은 개인과 집단들 간의 관계를 노드와 링크로서 모델링해 그것의 구조나, 확신 및 진화과정을 계량적으로 분석하는 방법론 입니다.
이때, 노드란 분석하고자 하는 객체로서, 사람이나 사물 등을 말하는 것입니다.
그리고 이 노드들의 관계를 나타내는, 즉 연결하는 것을 링크라고 하며 링크는, 단순히 노드A와 노드B를 연결만한 무방향성이 될 수도 있고,
혹은 노드A에서 노드B로의 방향성을 가질 수도 있습니다.
노드에 연결된 링크의 수를 Degree 라고 합니다. 그림에서 볼 수 있듯이, 어떠한 노드에 링크가 5개가 연결돼 있으면 이 노드의 Degree는 5가 되는 것입니다.
2 네트워크 데이터 구조
기본적인 네트워크 데이터 표현 형식은 다음과 같은 사회행렬(SocioMatrix) 자료구조를 갖는다.
|
A |
B |
C |
D |
E |
A |
0 |
1 |
1 |
0 |
0 |
B |
0 |
0 |
1 |
1 |
0 |
C |
0 |
1 |
0 |
0 |
0 |
D |
0 |
0 |
0 |
0 |
0 |
E |
0 |
0 |
1 |
0 |
0 |
즉 각 노드간에 관계가 있냐 없냐를 없으면 0, 연결관계가 있다면 1로 표현한다. 하지만, 이와 같이 표현을 하게 되면 네트워크가 큰 경우 거의 대부분의 관계가 0으로 없음에도 불구하고 이를 사회행렬로 표현하게 되어, 저장공간 낭비가 엄청 심하게 된다.
노드가 10, 100, 1000 이며, 평균 연결수가 3 인 경우 1000개 노드를 갖는 네트워크를 사회행렬로 표현할 경우 997,000 개의 빈셀을 갖게 된다. 이런 이유로 엣지리스트(Edgelist) 로 네트워크를 데이터로 표현할 경우 동일한 네트워크를 효과적으로 표현할 수 있다.
노드 |
평균 연결수 |
엣지 |
밀도 |
빈셀 |
10 |
3 |
15 |
0.33 |
70 |
100 |
3 |
150 |
0.03 |
9,700 |
1,000 |
3 |
1,500 |
0.00 |
997,000 |
상기 사회행렬을 엣지리스트로 표현하면 다음과 같다. 소규모 네트워크에서는 데이터에 큰 차이가 없지만, 중소규모, 대규모로 네트워크 규모가 커지면 네트워크 표현에 대한 효과를 체험하게 된다.
From |
To |
A |
B |
A |
C |
B |
C |
B |
D |
C |
B |
E |
C |
2.1. 네트워크 객체에 저장되는 정보
노드와 엣지는 네트워크 자료형으로 꼭 필요하지만, 추가적인 정보를 더 담을 수 있고, 담아야 한다. 노드와 엣지 외에도 노드 속성, 엣지 속성, 네트워크 메타데이터가 네트워크 자료형을 구성하고 있다.
구성요소 |
설명 |
필수여부 |
노드 |
노드 혹은 Vertex라고 불리며 네트워크 노드를 구성 |
필수 |
엣지 |
엣지 혹은 링크, Tie라고 불리며 네트워크 연결을 담당 |
필수 |
노드 속성 |
노드 속성을 표현, 노드가 사람인 경우 성별 등 |
선택옵션 |
엣지 속성 |
엣지 속성을 표현, 엣지가 금융거래의 경우 거래금액 등 |
선택옵션 |
메타데이터 |
전체 네트워크에 대한 정보를 포함 |
네트워 |
networkD3
데이터를 모두 준비하고 나면
forceNetwork 함수로 그래프를 생성할 수 있다
함수의 동작을 위해 최소한 필요한 옵션은 다음과 같다
Links에는 link가 담긴 data.frame
Nodes에는 node가 담긴 data.frame
Source에는 Links에서 source의 index가 담긴 열 이름
Target에는 Links에서 target의 index가 담긴 열 이름
NodeID에는 Nodes에서 node이름이 담긴 열 이름
Group은 Nodes에서 group이름이 담긴 열 이름(없으면 NodeID와 동일하게)
# plot
D3_network_LM<-forceNetwork(Links = MisLinks, Nodes = MisNodes,
Source = 'source', Target = 'target',
NodeID = 'name', Group = 'group',opacityNoHover = TRUE,
zoom = TRUE, bounded = TRUE,
fontSize = 15,
linkDistance = 75,
opacity = 0.9)
D3_network_LM
###################전체 코드################################
library(networkD3)
library(dplyr)
# data set 소설 레미제라블 인물 관계도
data(MisLinks, MisNodes)
head(MisNodes)
head(MisLinks)
# plot
D3_network_LM<-forceNetwork(Links = MisLinks, Nodes = MisNodes,
Source = 'source', Target = 'target',
NodeID = 'name', Group = 'group',opacityNoHover = TRUE,
zoom = TRUE, bounded = TRUE,
fontSize = 15,
linkDistance = 75,
opacity = 0.9)
D3_network_LM
# html 발사
networkD3::saveNetwork(D3_network_LM, "D3_LM.html", selfcontained = TRUE)
|
첫댓글 D3_network_LM<-forceNetwork(Links = link_df,
Nodes = node_df,
Source = 'source_idx', Target = 'target_idx',
NodeID = 'node', Group = 'idx',
opacityNoHover = TRUE, zoom = TRUE,
bounded = TRUE,
fontSize = 15,
linkDistance = 75,
opacity = 0.9)
D3_network_LM
forceNetwork(Links = link_df, Nodes = node_df,
Source = 'source_idx', Target = 'target_idx',
NodeID = 'node', Group = 'idx',
bounded = TRUE,
opacityNoHover = TRUE,
zoom = TRUE,
fontSize = 15,
linkDistance = 75,
opacity = 0.9)