Chapter 10 Network Analysis (W11-1)


Social Network Analysis: 소셜네트워크 분석


소셜네트워크의 기본적인 분석에 대해 알아보자.

10.1 Node & Edge

노드: 점 (연결점) 앳지: 선 (연결점을 연결하는 선, 즉 노드간의 관계)

10.2 시각화 (igraph)

10.2.1 igraph: Vector

library(igraph)   #igraph 패키지 불러오기
## 
## Attaching package: 'igraph'
## The following objects are masked from 'package:stats':
## 
##     decompose, spectrum
## The following object is masked from 'package:base':
## 
##     union
g1 <- graph(c(1,2, 2,3, 2,4, 1,4, 5,5, 3,6))   #g1에 수동으로 벡터 생성
plot(g1)   #그래프 그리기

str(g1)    #관계 출력 
## IGRAPH D--- 6 6 -- 
## + edges:
## [1] 1->2 2->3 2->4 1->4 5->5 3->6

10.2.2 igraph: Data frame

데이터프레임으로 데이터 입력

name <- c("서진수 대표이사", "일지매 부장", "김유신 과장", 
    "손흥민 대리", "노정호 대리", "이순신 부장", 
    "유관순 과장", "신사임당 대리", "강감찬 부장", 
    "광개토 과장", "정몽주 대리")
pemp <- c("서진수 대표이사", "서진수 대표이사", 
    "일지매 부장", "김유신 과장", "김유신 과장", 
    "서진수 대표이사", "이순신 부장", "유관순 과장", 
    "서진수 대표이사", "강감찬 부장", "광개토 과장")
emp <- data.frame(Name = name, Supervisor = pemp)
emp
##               Name      Supervisor
## 1  서진수 대표이사 서진수 대표이사
## 2      일지매 부장 서진수 대표이사
## 3      김유신 과장     일지매 부장
## 4      손흥민 대리     김유신 과장
## 5      노정호 대리     김유신 과장
## 6      이순신 부장 서진수 대표이사
## 7      유관순 과장     이순신 부장
## 8    신사임당 대리     유관순 과장
## 9      강감찬 부장 서진수 대표이사
## 10     광개토 과장     강감찬 부장
## 11     정몽주 대리     광개토 과장

그래프 출력

  • 한글 깨짐 해결, 옵션추가하기
    • Mac: vertex.label.family=“AppleGothic”
    • Windows: vertex.label.family=“MalgunGothic”
g <- graph.data.frame(emp, directed = T)
plot(g, layout = layout.fruchterman.reingold, vertex.size = 8, 
    edge.arrow.size = 0.5, vertex.label.family = "AppleGothic")

str(g)
## IGRAPH DN-- 11 11 -- 
## + attr: name (v/c)
## + edges (vertex names):
##  [1] 서진수 대표이사->서진수 대표이사 일지매 부장    ->서진수 대표이사
##  [3] 김유신 과장    ->일지매 부장     손흥민 대리    ->김유신 과장    
##  [5] 노정호 대리    ->김유신 과장     이순신 부장    ->서진수 대표이사
##  [7] 유관순 과장    ->이순신 부장     신사임당 대리  ->유관순 과장    
##  [9] 강감찬 부장    ->서진수 대표이사 광개토 과장    ->강감찬 부장    
## [11] 정몽주 대리    ->광개토 과장

화살표와 이름 숨기기

g3 <- graph.data.frame(emp, directed = F)
plot(g3, layout = layout.fruchterman.reingold, vertex.size = 8, 
    edge.arrow.size = 0.5, vertex.label = NA)

Save (저장하기)

# savePlot('network.png', type'png'>

10.2.3 igraph 군집분석

csv파일 불러오기

g <- read.csv("/Users/jace/GoogleDrive/R/WorkingDirectory/data/군집분석.csv", 
    head = T, stringsAsFactors = FALSE, fileEncoding = "euc-kr")
head(g)  #csv 파일을 head함수를 써서 상위 6개만 출력해 보기
##   학생 교수
## 1 S272   T1
## 2 S282   T1
## 3 S336   T1
## 4 S344   T1
## 5 S242   T2
## 6 S315   T2
graph <- data.frame(student = g$학생, professor = g$교수)
head(graph)  #데이터프레임으로 변환된 데이터 상위 6개만 출력해 보기
##   student professor
## 1    S272        T1
## 2    S282        T1
## 3    S336        T1
## 4    S344        T1
## 5    S242        T2
## 6    S315        T2
g <- graph.data.frame(graph, directed = T)
plot(g, layout = layout.fruchterman.reingold, vertex.size = 2, 
    edge.arrow.size = 0.5, vertex.color = "green", vertex.label = NA)

모양 바꾸기

plot(g, layout = layout.kamada.kawai, vertex.size = 2, edge.arrow.size = 0.5, 
    vertex.label = NA)

10.2.4 다이나믹한 시각화 (d3Network)

데이터 시각화를 화려하게 해주는 d3를 R 패키지로 만든 것
d3Network 패키지 사용해보기

# install.packages('devtools') library(devtools)
# install_github('christophergandrud/d3Network') #Cran 에
# 없고 github에 있는 패키지 설치
library(RCurl)
## Loading required package: bitops
library(d3Network)
name <- c("Angela Bassett", "Jessica Lange", "Winona Ryder", 
    "Michelle Pfeiffer", "Whoopi Goldberg", "Emma Thompson", 
    "Julia Roberts", "Sharon Stone", "Meryl Streep", "Susan Sarandon", 
    "Nicole Kidman")
pemp <- c("Angela Bassett", "Angela Bassett", "Jessica Lange", 
    "Winona Ryder", "Winona Ryder", "Angela Bassett", "Emma Thompson", 
    "Julia Roberts", "Angela Bassett", "Meryl Streep", "Susan Sarandon")

그래프 출력
경로로 지정한 곳에 가서 파일을 클릭하거나, 인터넷 주소창에 복붙하기: C:/Users/jace/d3.html

emp <- data.frame(Name = name, Supervisor = pemp)
d3SimpleNetwork(emp, width = 600, height = 600, file = "/Users/jace/GoogleDrive/R/WorkingDirectory/_SNS_Graph.html")  #저장할 위치 지정