Study/class note

R / 사회적 연결망2

chanzae 2022. 3. 8. 10:20

문제440. 소설 레미제라블에 나오는 인물 관계도를 사회적 연결망 그래프로 시각화 하시오.

# 1. 데이터를 로드

node_df <- read.csv("c:\\data\\mis_node.csv")
link_df <- read.csv("c:\\data\\mis_link.csv")

node_df2 <- node_df[ , c("name","group") ]
link_df2 <- link_df[ , c("source","target") ]

# 2. 시각화

# install.packages("networkD3")
# install.packages("dplyr")
library(networkD3)
library(dplyr)

network5 <- forceNetwork( Links = link_df2,          
                          Nodes = node_df2,         
                          Source = 'source',         
                          Target = 'target',        
                          NodeID = 'name',               
                          Group = 'group',                   
                          opacityNoHover = TRUE,                 # 정적일 때 불투명 정도
                          zoom = TRUE,                 # FALSE 로 하면 해당 노드의 동그라미만 보이고
                          # TRUE로 하면 연관된 화사들이 선명하게 보임
                          bounded = TRUE,                 # 그래프가 화면 밖으로 빠져나가지 않게
                          fontSize = 15,                  # 글자크기
                          linkDistance = 200,             # 연결선길이
                          opacity = 0.9 )                   # 불투명 정도

network5        # 인물들끼리 연결망

문제441. 사원 테이블의 사회적 연결망을 3D network 그래프로 시각화하시오.

3D network 그래프를 그릴려면 node_df와 link_df 데이터 프레임을 생성하면 됨.

#1. 원본데이터 로드
emp <- read.csv("c:\\data\\emp2.csv", header = T)
emp

#2. 0번부터 시작하는 번호를 emp데이터 프레임에 rownum이라는 컬럼으로 생성
emp$rownum <- 0:13
emp

#3. 노드에 대한 정보(노드명:사원이름, 노드번호:rownum)를 담는 emp_node라는 데이터 프레임을 생성
emp_node <- emp[, c("ename", "rownum")]
emp_node

#4. 링크에 대한 정보(사원이름, 관리자이름, 사원의 rownum, 관리자의 rownum)을 담는 emp_link라는 이름의 데이터 프레임을 생성
x <- merge(emp, emp, by.x='mgr', by.y = 'empno')
x

emp_link <- x[,c("ename.x","ename.y","rownum.x","rownum.y")]
emp_link

#5. emp_node의 컬럼명을 node와 idx로 변경
colnames(emp_node) <- c("node","idx")
emp_node

#6. emp_link의 컬럼명을 source, target, source_idx, target_idx로 변경
colnames(emp_link) <- c("source", "target", "source_idx","target_idx" )
emp_link

#7. emp_link와 emp_node를 이용해 3D network로 사회적연결망 그래프 그리기
library(networkD3)
library(dplyr)

network6 <- forceNetwork( Links = emp_link,          
                          Nodes = emp_node,         
                          Source = 'source_idx',         
                          Target = 'target_idx',        
                          NodeID = 'node',               
                          Group = 'idx',                   
                          opacityNoHover = TRUE,                 # 정적일 때 불투명 정도
                          zoom = TRUE,                 # FALSE 로 하면 해당 노드의 동그라미만 보이고
                          # TRUE로 하면 연관된 화사들이 선명하게 보임
                          bounded = TRUE,                 # 그래프가 화면 밖으로 빠져나가지 않게
                          fontSize = 15,                  # 글자크기
                          linkDistance = 100,             # 연결선길이
                          opacity = 0.9 )                   # 불투명 정도

network6        # 인물들끼리 연결망

 

반응형