1. 미디어 네트워크 데이터 1

Katya Ognyanova 박사는 친절하게 네트워크 데이터에 대한 좋은 교육 내용과 함께 데이터도 인터넷에 공유해 주었다.

tidyverse 팩키지 read_csv() 함수를 통해 결점과 연결선 데이터를 불러오고 나서 이를 igraph 팩키지 graph_from_data_frame() 함수로 igraph 그래프 객체로 변환시킨다. 그리고 나서 plot 함수로 데이터가 정상적으로 들어왔는지 시각적으로 확인을 한다.

# 0. 환경설정 --------------
library(tidyverse)
library(igraph)
library(threejs) # devtools::install_github("bwlewis/rthreejs")
library(htmlwidgets)
library(crosstalk)
library(DT)

# 1. 데이터 가져오기 --------------
## 1.1. 데이터 읽어들이기
media_vert <- read_csv("data/Dataset1-Media-Example-NODES.csv")

media_edge <- read_csv("data/Dataset1-Media-Example-EDGES.csv")

## 1.2. 네트워크 데이터 변환
media_ng <- graph_from_data_frame(d = media_edge, vertices = media_vert, directed = FALSE)

plot(media_ng)

2. 동적 네트워크 시각화

네트워크 데이터 시각화는 결국 결점(Vertex, Node)연결선(Edge)을 통해 다양한 시각적인 효과를 구현할 수 있다. 다만, 인터랙티브 네트워크 시각화는 다양한 자바스크립트 기반 팩키지와 함께 종류가 많다. 인터랙티브 네트워크 시각화에 사용되는 팩키지는 다음이 있다.

2.1. 네트워크 데이터 전처리

igraph2graphjs를 활용하여 igraph 객체를 threejs 객체로 바꿔 작업하는 것도 가능하지만, 윈도우에서는 여러가지 제약이 있다.

# 2. 네트워크 데이터 전처리 --------------
## 2.1. 네트워크 간략화 
media_sng <- simplify(media_ng, remove.multiple = TRUE, remove.loops = FALSE, 
                      edge.attr.comb=c(weight="sum", type="ignore"))

# media_sng_js <- igraph::igraph2graphjs(media_sng)

3. 인터랙티브 네트워크 시각화

3.1. 라벨 크기 조정

인터랙티브 네트워크 시각화를 위해서 set_vertex_attrshape를 지정하면 라벨을 직접 결점에 붙일 수 있을 뿐만아니라 결점 속성 크기도 라벨에 반영이 가능하다.

# 3. 인터랙티브 네트워크 간략화 --------------
## 3.1. 라벨 -----
media_sng <- set_vertex_attr(media_sng, "color", value = "dodgerblue")
media_sng <- set_vertex_attr(media_sng, "size", value = V(media_sng)$audience.size / 10)
media_sng <- set_vertex_attr(media_sng, "shape", value = V(media_sng)$media)

media_sng <- set_edge_attr(media_sng, "color", value = "lightblue")

graphjs(media_sng,
        brush = TRUE,
         main = "인터랙티브 네트워크")

3.2. 결점 크기 조정

인터랙티브 네트워크 시각화를 위해서 set_vertex_attrsize를 지정하면 결점 크기도 변경할 수 있고, 연결선 색상도 변경이 가능하다. 다만, threejs는 네트워크 데이터 시각화 속도에 방점을 찍어 개발되었기 때문에 연결선 선폭은 속성에 따라 선폭조정은 아직 지원하고 있지 않다.

## 3.2. 결점 크기 -----
media_sng <- set_vertex_attr(media_sng, "color", value = "dodgerblue")
media_sng <- set_vertex_attr(media_sng, "size", value = V(media_sng)$audience.size / 3)

media_sng <- set_edge_attr(media_sng, "color", value = "lightblue")

graphjs(media_sng,
        vertex.label = V(media_sng)$media, 
        brush = TRUE,
        main = "")

4. 크로스토크(Crosstalk)

RStudio Crosstalkgraphjs와 함께 연결하여 사용하는 것이 가능하다.

# 4. Crosstalk 네트워크 --------------

sd  <- SharedData$new(media_vert)

print(bscols(
    graphjs(media_sng,
            vertex.label = V(media_sng)$media, 
            brush=TRUE, 
            crosstalk=sd,
            main = ""),
    DT::datatable(sd, rownames=FALSE, options=list(dom='tp'))
))

  1. Ognyanova, K. (2017) Network visualization with R. Retrieved from www.kateto.net/network-visualization.