R을 통해 역사적 인물들의 관계를 분석하는 네트워크를 생성하는 것을 목적으로 진행하게된 이번 워크샾에서는 R에서 제공하는 visNetwork패키지(https://datastorm-open.github.io/visNetwork/)를 사용하여 네트워크 시각화에서 각 요소의 특징을 바꾸는 것으로 시작하여 실제 역사 데이터를 활용하여 네트워크를 생성하는 전반적인 과정을 다루고자 한다.
# install.packages("visNetwork")
library(visNetwork, quietly = TRUE)
네트워크 시각화를 생성하기 위해 우선 visNetwork패키지를 설치하고 불러온다.
nodes <- data.frame(id = 1:8)
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8))
visNetwork(nodes, edges, width = "100%")
노드는 각각의 원을 의미하며, 엣지는 원들사이에 연결된 선을 의미한다.
노드에서는 각원들의 정보를 정의하고 엣지는 원들간의 관계를 선으로
연결한다. 그리고 visNetwork를 통해 네트워크를 생성한다.
코드를 실행하면 8개의 원들과 원들사이의 정보를 나타내는 네트워크가
생성된다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8));nodes
## id label
## 1 1 Node 1
## 2 2 Node 2
## 3 3 Node 3
## 4 4 Node 4
## 5 5 Node 5
## 6 6 Node 6
## 7 7 Node 7
## 8 8 Node 8
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8));edges
## from to
## 1 1 5
## 2 6 3
## 3 2 5
## 4 3 7
## 5 4 7
## 6 7 1
## 7 1 4
## 8 6 2
## 9 1 8
visNetwork(nodes, edges, width = "100%")
노드에 이름을 지정하여 원 위에 각 노드의 정보를 나타낼 수 있다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8), shape = c("square", "triangle", "box", "dot", "star", "ellipse", "database", "diamond"));nodes
## id label shape
## 1 1 Node 1 square
## 2 2 Node 2 triangle
## 3 3 Node 3 box
## 4 4 Node 4 dot
## 5 5 Node 5 star
## 6 6 Node 6 ellipse
## 7 7 Node 7 database
## 8 8 Node 8 diamond
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8));edges
## from to
## 1 1 5
## 2 6 3
## 3 2 5
## 4 3 7
## 5 4 7
## 6 7 1
## 7 1 4
## 8 6 2
## 9 1 8
visNetwork(nodes, edges, width = "100%")
노드에 모양을 지정하여 노드의 모양을 원이 아닌 다른 형태로 변경할 수 있다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8), shape = c("square", "triangle", "box", "dot", "star", "ellipse", "database", "diamond"), group = c("A","B","A","B","A","B","A","B"));nodes
## id label shape group
## 1 1 Node 1 square A
## 2 2 Node 2 triangle B
## 3 3 Node 3 box A
## 4 4 Node 4 dot B
## 5 5 Node 5 star A
## 6 6 Node 6 ellipse B
## 7 7 Node 7 database A
## 8 8 Node 8 diamond B
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8));edges
## from to
## 1 1 5
## 2 6 3
## 3 2 5
## 4 3 7
## 5 4 7
## 6 7 1
## 7 1 4
## 8 6 2
## 9 1 8
visNetwork(nodes, edges, width = "100%")
그룹을 지정하여 노드의 색상을 그룹에 따라 표시할 수 있다. 네트워크에서 노드들이 속한 집단을 표시 할 때 효과적이다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8), shape = c("square", "triangle", "box", "dot", "star", "ellipse", "database", "diamond"), color = c("darkred", "grey", "orange", "darkblue", "purple","red","blue","pink"));nodes
## id label shape color
## 1 1 Node 1 square darkred
## 2 2 Node 2 triangle grey
## 3 3 Node 3 box orange
## 4 4 Node 4 dot darkblue
## 5 5 Node 5 star purple
## 6 6 Node 6 ellipse red
## 7 7 Node 7 database blue
## 8 8 Node 8 diamond pink
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8));edges
## from to
## 1 1 5
## 2 6 3
## 3 2 5
## 4 3 7
## 5 4 7
## 6 7 1
## 7 1 4
## 8 6 2
## 9 1 8
visNetwork(nodes, edges, width = "100%")
노드의 색상도 지정하여 변경할 수 있다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8), shape = c("square", "triangle", "box", "dot", "star", "ellipse", "database", "diamond"), group = c("A","B","A","B","A","B","A","B"), color = c("darkred", "grey", "orange", "darkblue", "purple","red","blue","pink"));nodes
## id label shape group color
## 1 1 Node 1 square A darkred
## 2 2 Node 2 triangle B grey
## 3 3 Node 3 box A orange
## 4 4 Node 4 dot B darkblue
## 5 5 Node 5 star A purple
## 6 6 Node 6 ellipse B red
## 7 7 Node 7 database A blue
## 8 8 Node 8 diamond B pink
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8));edges
## from to
## 1 1 5
## 2 6 3
## 3 2 5
## 4 3 7
## 5 4 7
## 6 7 1
## 7 1 4
## 8 6 2
## 9 1 8
visNetwork(nodes, edges, width = "100%")
그룹과 색상을 같이 사용할 경우 색상이 그룹보다 우선을 적용된다. 두 요소를 같이 사용하는 것보다 따로 사용하는 것이 좋다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8), shape = c("square", "triangle", "box", "dot", "star", "ellipse", "database", "diamond"), color = c("darkred", "grey", "orange", "darkblue", "purple","red","blue","pink"), shadow = c(FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE));nodes
## id label shape color shadow
## 1 1 Node 1 square darkred FALSE
## 2 2 Node 2 triangle grey TRUE
## 3 3 Node 3 box orange FALSE
## 4 4 Node 4 dot darkblue TRUE
## 5 5 Node 5 star purple TRUE
## 6 6 Node 6 ellipse red TRUE
## 7 7 Node 7 database blue FALSE
## 8 8 Node 8 diamond pink TRUE
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8));edges
## from to
## 1 1 5
## 2 6 3
## 3 2 5
## 4 3 7
## 5 4 7
## 6 7 1
## 7 1 4
## 8 6 2
## 9 1 8
visNetwork(nodes, edges, width = "100%")
노드의 그림자도 지정하여 변경할 수 있다.
nodes <- data.frame(id = 1:8);nodes
## id
## 1 1
## 2 2
## 3 3
## 4 4
## 5 5
## 6 6
## 7 7
## 8 8
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8), label = paste("Edge", 1:9));edges
## from to label
## 1 1 5 Edge 1
## 2 6 3 Edge 2
## 3 2 5 Edge 3
## 4 3 7 Edge 4
## 5 4 7 Edge 5
## 6 7 1 Edge 6
## 7 1 4 Edge 7
## 8 6 2 Edge 8
## 9 1 8 Edge 9
visNetwork(nodes, edges, width = "100%")
엣지에 이름을 지정하여 선 위에 각 엣지의 정보를 나타낼 수 있다.
nodes <- data.frame(id = 1:8);nodes
## id
## 1 1
## 2 2
## 3 3
## 4 4
## 5 5
## 6 6
## 7 7
## 8 8
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8), label = paste("Edge", 1:9), length = c(100,200,300,400,300,200,100,500,100));edges
## from to label length
## 1 1 5 Edge 1 100
## 2 6 3 Edge 2 200
## 3 2 5 Edge 3 300
## 4 3 7 Edge 4 400
## 5 4 7 Edge 5 300
## 6 7 1 Edge 6 200
## 7 1 4 Edge 7 100
## 8 6 2 Edge 8 500
## 9 1 8 Edge 9 100
visNetwork(nodes, edges, width = "100%")
각 엣지의 길이도 변경 할 수 있다. 네트워크에서 노드간의 유사성이 높은 경우 엣지의 길이를 짧게, 노드간의 유사성이 낮은 경우 엣지의 길이를 길게 시각화한다.
nodes <- data.frame(id = 1:8);nodes
## id
## 1 1
## 2 2
## 3 3
## 4 4
## 5 5
## 6 6
## 7 7
## 8 8
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8), label = paste("Edge", 1:9), length = c(100,200,300,400,300,200,100,500,100),width = c(4,1,3,2,4,1,2,3,4));edges
## from to label length width
## 1 1 5 Edge 1 100 4
## 2 6 3 Edge 2 200 1
## 3 2 5 Edge 3 300 3
## 4 3 7 Edge 4 400 2
## 5 4 7 Edge 5 300 4
## 6 7 1 Edge 6 200 1
## 7 1 4 Edge 7 100 2
## 8 6 2 Edge 8 500 3
## 9 1 8 Edge 9 100 4
visNetwork(nodes, edges, width = "100%")
각 엣지의 굵기도 변경 할 수 있다. 네트워크에서 노드간의 유사성이 높은 경우 엣지의 굵기를 굵게, 노드간의 유사성이 낮은 경우 엣지의 굵기를 얇게 시각화한다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8));nodes
## id label
## 1 1 Node 1
## 2 2 Node 2
## 3 3 Node 3
## 4 4 Node 4
## 5 5 Node 5
## 6 6 Node 6
## 7 7 Node 7
## 8 8 Node 8
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8), label = paste("Edge", 1:9), length = c(100,200,300,400,300,200,100,500,100),width = c(4,1,3,2,4,1,2,3,4),arrows = c("to", "from", "middle", "middle;to","to", "from", "middle", "middle;to","middle"));edges
## from to label length width arrows
## 1 1 5 Edge 1 100 4 to
## 2 6 3 Edge 2 200 1 from
## 3 2 5 Edge 3 300 3 middle
## 4 3 7 Edge 4 400 2 middle;to
## 5 4 7 Edge 5 300 4 to
## 6 7 1 Edge 6 200 1 from
## 7 1 4 Edge 7 100 2 middle
## 8 6 2 Edge 8 500 3 middle;to
## 9 1 8 Edge 9 100 4 middle
visNetwork(nodes, edges, width = "100%")
노드들 사이의 관계의 방향성을 지정 할 수 있다. - to:
노드 1 -> 노드 5 - from: 노드 3 -> 노드 6 -
middle: 노드 2 -> 노드 5 (기본적인 화살표 방향은 to와
같지만 엣지의 중간에 에로우를 생성한다.) - middle;to: 노드
3 -> 노드 7 (기본적인 화살표 방향은 to와 같고 엣지의 중간과 끝 부분에
에로우를 생성한다.)
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8));nodes
## id label
## 1 1 Node 1
## 2 2 Node 2
## 3 3 Node 3
## 4 4 Node 4
## 5 5 Node 5
## 6 6 Node 6
## 7 7 Node 7
## 8 8 Node 8
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8), label = paste("Edge", 1:9), length = c(100,200,300,400,300,200,100,500,100),width = c(4,1,3,2,4,1,2,3,4),arrows = c("to", "from", "middle", "middle;to","to", "from", "middle", "middle;to","middle"), dashes = c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE));edges
## from to label length width arrows dashes
## 1 1 5 Edge 1 100 4 to FALSE
## 2 6 3 Edge 2 200 1 from FALSE
## 3 2 5 Edge 3 300 3 middle FALSE
## 4 3 7 Edge 4 400 2 middle;to FALSE
## 5 4 7 Edge 5 300 4 to FALSE
## 6 7 1 Edge 6 200 1 from FALSE
## 7 1 4 Edge 7 100 2 middle FALSE
## 8 6 2 Edge 8 500 3 middle;to TRUE
## 9 1 8 Edge 9 100 4 middle FALSE
visNetwork(nodes, edges, width = "100%")
엣지들중 중요한 역할을 하는 엣지를 표시하기 위해 해당 선을 점선으로 바꾸어 시각화 할 수 있다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8));nodes
## id label
## 1 1 Node 1
## 2 2 Node 2
## 3 3 Node 3
## 4 4 Node 4
## 5 5 Node 5
## 6 6 Node 6
## 7 7 Node 7
## 8 8 Node 8
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8), label = paste("Edge", 1:9), length = c(100,200,300,400,300,200,100,500,100),width = c(4,1,3,2,4,1,2,3,4),arrows = c("to", "from", "middle", "middle;to","to", "from", "middle", "middle;to","middle"), dashes = c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE), shadow = c(FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE));edges
## from to label length width arrows dashes shadow
## 1 1 5 Edge 1 100 4 to FALSE FALSE
## 2 6 3 Edge 2 200 1 from FALSE TRUE
## 3 2 5 Edge 3 300 3 middle FALSE FALSE
## 4 3 7 Edge 4 400 2 middle;to FALSE TRUE
## 5 4 7 Edge 5 300 4 to FALSE FALSE
## 6 7 1 Edge 6 200 1 from FALSE TRUE
## 7 1 4 Edge 7 100 2 middle FALSE FALSE
## 8 6 2 Edge 8 500 3 middle;to TRUE TRUE
## 9 1 8 Edge 9 100 4 middle FALSE TRUE
visNetwork(nodes, edges, width = "100%")
엣지의 그림자도 지정하여 변경할 수 있다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8));nodes
## id label
## 1 1 Node 1
## 2 2 Node 2
## 3 3 Node 3
## 4 4 Node 4
## 5 5 Node 5
## 6 6 Node 6
## 7 7 Node 7
## 8 8 Node 8
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8), label = paste("Edge", 1:9), length = c(100,200,300,400,300,200,100,500,100),width = c(4,1,3,2,4,1,2,3,4),arrows = c("to", "from", "middle", "middle;to","to", "from", "middle", "middle;to","middle"), dashes = c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE), shadow = c(FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE), color = c("darkred", "grey", "orange", "darkblue", "purple","red","blue","pink","darkgray"));edges
## from to label length width arrows dashes shadow color
## 1 1 5 Edge 1 100 4 to FALSE FALSE darkred
## 2 6 3 Edge 2 200 1 from FALSE TRUE grey
## 3 2 5 Edge 3 300 3 middle FALSE FALSE orange
## 4 3 7 Edge 4 400 2 middle;to FALSE TRUE darkblue
## 5 4 7 Edge 5 300 4 to FALSE FALSE purple
## 6 7 1 Edge 6 200 1 from FALSE TRUE red
## 7 1 4 Edge 7 100 2 middle FALSE FALSE blue
## 8 6 2 Edge 8 500 3 middle;to TRUE TRUE pink
## 9 1 8 Edge 9 100 4 middle FALSE TRUE darkgray
visNetwork(nodes, edges, width = "100%")
엣지의 컬러도 지정해서 변경이 가능하다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8), shape = c("square", "triangle", "box", "dot", "star", "ellipse", "database", "diamond"), group = c("A","B","A","B","A","B","A","B"), shadow = c(FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE));nodes
## id label shape group shadow
## 1 1 Node 1 square A FALSE
## 2 2 Node 2 triangle B TRUE
## 3 3 Node 3 box A FALSE
## 4 4 Node 4 dot B TRUE
## 5 5 Node 5 star A TRUE
## 6 6 Node 6 ellipse B TRUE
## 7 7 Node 7 database A FALSE
## 8 8 Node 8 diamond B TRUE
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8), label = paste("Edge", 1:9), length = c(100,200,300,400,300,200,100,500,100),width = c(4,1,3,2,4,1,2,3,4),arrows = c("to", "from", "middle", "middle;to","to", "from", "middle", "middle;to","middle"), dashes = c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE), shadow = c(FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE), color = c("darkred", "grey", "orange", "darkblue", "purple","red","blue","pink","darkgray"));edges
## from to label length width arrows dashes shadow color
## 1 1 5 Edge 1 100 4 to FALSE FALSE darkred
## 2 6 3 Edge 2 200 1 from FALSE TRUE grey
## 3 2 5 Edge 3 300 3 middle FALSE FALSE orange
## 4 3 7 Edge 4 400 2 middle;to FALSE TRUE darkblue
## 5 4 7 Edge 5 300 4 to FALSE FALSE purple
## 6 7 1 Edge 6 200 1 from FALSE TRUE red
## 7 1 4 Edge 7 100 2 middle FALSE FALSE blue
## 8 6 2 Edge 8 500 3 middle;to TRUE TRUE pink
## 9 1 8 Edge 9 100 4 middle FALSE TRUE darkgray
visNetwork(nodes, edges, main = "R을 사용한 네트워크 시각화", width = "100%")
visNetwork의 요소중 main기능에 텍스트를
추가하면 제목이 생성된다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8), shape = c("square", "triangle", "box", "dot", "star", "ellipse", "database", "diamond"), group = c("A","B","A","B","A","B","A","B"), shadow = c(FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE));nodes
## id label shape group shadow
## 1 1 Node 1 square A FALSE
## 2 2 Node 2 triangle B TRUE
## 3 3 Node 3 box A FALSE
## 4 4 Node 4 dot B TRUE
## 5 5 Node 5 star A TRUE
## 6 6 Node 6 ellipse B TRUE
## 7 7 Node 7 database A FALSE
## 8 8 Node 8 diamond B TRUE
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8), label = paste("Edge", 1:9), length = c(100,200,300,400,300,200,100,500,100),width = c(4,1,3,2,4,1,2,3,4),arrows = c("to", "from", "middle", "middle;to","to", "from", "middle", "middle;to","middle"), dashes = c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE), shadow = c(FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE), color = c("darkred", "grey", "orange", "darkblue", "purple","red","blue","pink","darkgray"));edges
## from to label length width arrows dashes shadow color
## 1 1 5 Edge 1 100 4 to FALSE FALSE darkred
## 2 6 3 Edge 2 200 1 from FALSE TRUE grey
## 3 2 5 Edge 3 300 3 middle FALSE FALSE orange
## 4 3 7 Edge 4 400 2 middle;to FALSE TRUE darkblue
## 5 4 7 Edge 5 300 4 to FALSE FALSE purple
## 6 7 1 Edge 6 200 1 from FALSE TRUE red
## 7 1 4 Edge 7 100 2 middle FALSE FALSE blue
## 8 6 2 Edge 8 500 3 middle;to TRUE TRUE pink
## 9 1 8 Edge 9 100 4 middle FALSE TRUE darkgray
visNetwork(nodes, edges, main = "R을 사용한 네트워크 시각화", submain = "조선시대사학회", width = "100%")
visNetwork의 요소중 submain기능에 텍스트를
추가하면 부제목이 생성된다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8), shape = c("square", "triangle", "box", "dot", "star", "ellipse", "database", "diamond"), group = c("A","B","A","B","A","B","A","B"), shadow = c(FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE));nodes
## id label shape group shadow
## 1 1 Node 1 square A FALSE
## 2 2 Node 2 triangle B TRUE
## 3 3 Node 3 box A FALSE
## 4 4 Node 4 dot B TRUE
## 5 5 Node 5 star A TRUE
## 6 6 Node 6 ellipse B TRUE
## 7 7 Node 7 database A FALSE
## 8 8 Node 8 diamond B TRUE
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8), label = paste("Edge", 1:9), length = c(100,200,300,400,300,200,100,500,100),width = c(4,1,3,2,4,1,2,3,4),arrows = c("to", "from", "middle", "middle;to","to", "from", "middle", "middle;to","middle"), dashes = c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE), shadow = c(FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE), color = c("darkred", "grey", "orange", "darkblue", "purple","red","blue","pink","darkgray"));edges
## from to label length width arrows dashes shadow color
## 1 1 5 Edge 1 100 4 to FALSE FALSE darkred
## 2 6 3 Edge 2 200 1 from FALSE TRUE grey
## 3 2 5 Edge 3 300 3 middle FALSE FALSE orange
## 4 3 7 Edge 4 400 2 middle;to FALSE TRUE darkblue
## 5 4 7 Edge 5 300 4 to FALSE FALSE purple
## 6 7 1 Edge 6 200 1 from FALSE TRUE red
## 7 1 4 Edge 7 100 2 middle FALSE FALSE blue
## 8 6 2 Edge 8 500 3 middle;to TRUE TRUE pink
## 9 1 8 Edge 9 100 4 middle FALSE TRUE darkgray
visNetwork(nodes, edges, footer = "Fig.1 R을 사용한 네트워크 시각화", width = "100%")
visNetwork의 요소중 footer기능에 텍스트를
추가하면 시각화의 아래쪽에 텍스트가 생성되고 캡션의 역할을 할 수
있다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8), shape = c("square", "triangle", "box", "dot", "star", "ellipse", "database", "diamond"), group = c("A","B","A","B","A","B","A","B"), shadow = c(FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE));nodes
## id label shape group shadow
## 1 1 Node 1 square A FALSE
## 2 2 Node 2 triangle B TRUE
## 3 3 Node 3 box A FALSE
## 4 4 Node 4 dot B TRUE
## 5 5 Node 5 star A TRUE
## 6 6 Node 6 ellipse B TRUE
## 7 7 Node 7 database A FALSE
## 8 8 Node 8 diamond B TRUE
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8), label = paste("Edge", 1:9), length = c(100,200,300,400,300,200,100,500,100),width = c(4,1,3,2,4,1,2,3,4),arrows = c("to", "from", "middle", "middle;to","to", "from", "middle", "middle;to","middle"), dashes = c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE), shadow = c(FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE), color = c("darkred", "grey", "orange", "darkblue", "purple","red","blue","pink","darkgray"));edges
## from to label length width arrows dashes shadow color
## 1 1 5 Edge 1 100 4 to FALSE FALSE darkred
## 2 6 3 Edge 2 200 1 from FALSE TRUE grey
## 3 2 5 Edge 3 300 3 middle FALSE FALSE orange
## 4 3 7 Edge 4 400 2 middle;to FALSE TRUE darkblue
## 5 4 7 Edge 5 300 4 to FALSE FALSE purple
## 6 7 1 Edge 6 200 1 from FALSE TRUE red
## 7 1 4 Edge 7 100 2 middle FALSE FALSE blue
## 8 6 2 Edge 8 500 3 middle;to TRUE TRUE pink
## 9 1 8 Edge 9 100 4 middle FALSE TRUE darkgray
visNetwork(nodes, edges, width = "100%") %>% visLegend()
dplyr에서 지원하는 파이프를 사용하여
visLegend()를 visNetwork()와 같이 실행하면
자동으로 노드의 그룹에 따라 범례를 생성하여 준다.
nodes <- data.frame(id = 1:8, label = paste("Node", 1:8), shape = c("square", "triangle", "box", "dot", "star", "ellipse", "database", "diamond"), group = c("A","B","A","B","A","B","A","B"), shadow = c(FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE));nodes
## id label shape group shadow
## 1 1 Node 1 square A FALSE
## 2 2 Node 2 triangle B TRUE
## 3 3 Node 3 box A FALSE
## 4 4 Node 4 dot B TRUE
## 5 5 Node 5 star A TRUE
## 6 6 Node 6 ellipse B TRUE
## 7 7 Node 7 database A FALSE
## 8 8 Node 8 diamond B TRUE
edges <- data.frame(from = c(1,6,2,3,4,7,1,6,1), to = c(5,3,5,7,7,1,4,2,8), label = paste("Edge", 1:9), length = c(100,200,300,400,300,200,100,500,100),width = c(4,1,3,2,4,1,2,3,4),arrows = c("to", "from", "middle", "middle;to","to", "from", "middle", "middle;to","middle"), dashes = c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE), shadow = c(FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE), color = c("darkred", "grey", "orange", "darkblue", "purple","red","blue","pink","darkgray"));edges
## from to label length width arrows dashes shadow color
## 1 1 5 Edge 1 100 4 to FALSE FALSE darkred
## 2 6 3 Edge 2 200 1 from FALSE TRUE grey
## 3 2 5 Edge 3 300 3 middle FALSE FALSE orange
## 4 3 7 Edge 4 400 2 middle;to FALSE TRUE darkblue
## 5 4 7 Edge 5 300 4 to FALSE FALSE purple
## 6 7 1 Edge 6 200 1 from FALSE TRUE red
## 7 1 4 Edge 7 100 2 middle FALSE FALSE blue
## 8 6 2 Edge 8 500 3 middle;to TRUE TRUE pink
## 9 1 8 Edge 9 100 4 middle FALSE TRUE darkgray
visNetwork(nodes, edges, width = "100%") %>% visLegend(position = "right", main = "범례")
visLegend()의 요소인 position과
main을 통해 범례의 위치와 제목을 생성할 수 있다.
nodes <- jsonlite::fromJSON("https://raw.githubusercontent.com/datastorm-open/datastorm-open.github.io/master/visNetwork/data/nodes_miserables.json")
edges <- jsonlite::fromJSON("https://raw.githubusercontent.com/datastorm-open/datastorm-open.github.io/master/visNetwork/data/edges_miserables.json")
visNetwork(nodes, edges, height = "700px", width = "100%")
실제 데이터(data.frame)에서 각 노드와 엣지에서 사용하는 요소들로 열을
만들고 visNetwork()에 데이터를 적용하여 네트워크를 생성 할
수 있다.
visNetwork(nodes, edges, height = "700px", width = "100%") %>% visOptions(selectedBy = "group")
visOptions()을 통해 그룹 별로 네트워크를 확인 할 수 있는
옵션을 생성할 수 있다.
visNetwork(nodes, edges, height = "700px", width = "100%") %>% visOptions(selectedBy = "group", highlightNearest = TRUE)
visOptions()을 통해 흥미로운 노드와 그 노드와 직접적으로
관계를 맺는 주변 노드를 확인하는 기능을 highlightNearest를
통해 구현 할 수 있다.
visNetwork(nodes, edges, height = "700px", width = "100%") %>% visOptions(selectedBy = "group", highlightNearest = TRUE, nodesIdSelection = TRUE)
nodesIdSelection을 통해 노드의 이름을 선택하는 옵션을
생성하고 이 기능을 통해 선택된 노드와 그 노드와 직접적으로 관계를 맺는
주변 노드를 확인 할 수 있다.
visNetwork(nodes, edges, height = "700px", width = "100%") %>% visOptions(selectedBy = "group", highlightNearest = TRUE, nodesIdSelection = TRUE) %>% visPhysics(stabilization = FALSE)
visPhysics()에서 stabilization을
FALSE로 지정하면 네트워크가 초기 생성될때 노드간의 상호
중력을 계산하는 과정을 모두 볼 수 있어 네트워크에 더 동적인 효과를 줄 수
있다.
# getwd()
# setwd("/Users/seongminmun/Desktop/Development/Rprogram/R_Script/data/")
# dir()
현재 R과 연결된 자신의 작업 환경 경로를 확인하고 데이터가 있는 경로로 지정한다.
node <- read.csv("node_teajo.csv", header=TRUE, fileEncoding="UTF-8"); head(node)
## X id label group city
## 1 0 0 태조 0 개경
## 2 1 1 신혜왕후유씨_태조1 1 정주
## 3 2 2 유천궁 1 정주
## 4 3 3 정덕왕후유씨_태조6 1 정주
## 5 4 4 유덕영 1 정주
## 6 5 5 장화왕후오씨_태조2 2 나주
필요하지 않은 정보들도 포함되어 있는 것을 확인 할 수 있다.
node <- node[,c(2,3,4)]; head(node)
## id label group
## 1 0 태조 0
## 2 1 신혜왕후유씨_태조1 1
## 3 2 유천궁 1
## 4 3 정덕왕후유씨_태조6 1
## 5 4 유덕영 1
## 6 5 장화왕후오씨_태조2 2
필요없는 열은 제거하고 데이터를 저장한다.
edge <- read.csv("edge_teajo.csv", header=TRUE, fileEncoding="UTF-8"); head(edge)
## X from to from_kor to_kor
## 1 0 0 1 태조 신혜왕후유씨_태조1
## 2 1 0 2 태조 유천궁
## 3 2 1 2 신혜왕후유씨_태조1 유천궁
## 4 3 0 3 태조 정덕왕후유씨_태조6
## 5 4 0 4 태조 유덕영
## 6 5 3 4 정덕왕후유씨_태조6 유덕영
필요하지 않은 정보들도 포함되어 있는 것을 확인 할 수 있다.
edge <- edge[,c(2,3)]; head(edge)
## from to
## 1 0 1
## 2 0 2
## 3 1 2
## 4 0 3
## 5 0 4
## 6 3 4
필요없는 열은 제거하고 데이터를 저장한다.
visNetwork(node, edge, height = "700px", width = "100%") %>% visOptions(selectedBy = "group", highlightNearest = TRUE, nodesIdSelection = TRUE) %>% visPhysics(stabilization = FALSE)
실제 가공된 역사 데이터(data.frame)에서 고려 초기 태조
왕건이 어떤 지방 호적들과 혼인 네트워크를 형성하였는지 확인할 수
있다.