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 # 인물들끼리 연결망
반응형