• 검색 결과가 없습니다.

igraph 를이용한사회관계망그래프(SNA: Social Network Analysis) 연습#

N/A
N/A
Protected

Academic year: 2022

Share "igraph 를이용한사회관계망그래프(SNA: Social Network Analysis) 연습#"

Copied!
11
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

igraph 를 이용한 사회관계망 그래프 (SNA: Social Network Analysis) 연습

#아래의 사이트를 참조함

# http://www.datamarket.kr/xe/?mid=board_BoGi29&listStyle=viewer&document_srl=6479 install.packages("igraph")

library(igraph) setwd("c:/data_r")

ga.data<-read.csv("ga_edgelist.csv",header=T) ga.data

g<-graph.data.frame(ga.data,directed=FALSE) g

plot(g)

V(g)$label<-NA # 이름 삭제 V(g)$size<-degree(g)*5 plot(g)

clo<-closeness(g) # 근접중심성

clo.score<-round((clo-min(clo))*length(clo)/max(clo))+1 clo.colors<-rev(heat.colors(max(clo.score)))

V(g)$color<-clo.colors[clo.score]

plot(g)

btw<-betweenness(g) btw.score<-round(btw)+1

btw.colors<-rev(heat.colors(max(btw.score))) V(g)$color<-btw.colors[btw.score]

plot(g)

V(g)$label<-V(g)$name

V(g)$label.cex<-1 # label의 크기 plot(g)

예제다운로드

(2)

네트워크 분석

2

네트워크의 특성을 파악하기 위한 지표에는 각 노드가 어느 정도로 많은 관계를 맺고 있는 지를 나타내 는 연결척도 (degree), 한 점이 다른 모든 점들에 얼마나 가까운가를 나타내는 근접 (Closenesss), 연결망에서 한 노드가 다른 노드들 사이에 위치하는 정도를 나타내는 중개 (betweenness) 가 있다 . 각 지표는 중심성 (centrality) 과 중심화 (centralization) 관점으로 설명된다 .

중심성 : 네트워크를 구성하는 각각의 노드가 전체 연결망에서 어느 정도 중심에 위치하는 가를 나타내 며 , 연결정도의 중심성 , 근접 중심성 , 중개 중심성이 있다 .

중심화 : 네트워크 전체 연결망의 형태가 어느 정도 중앙에 집중되어 있는지를 나타내는 지표로 연결정 도 중심화 , 근접 중심화 , 중개 중심화가 있다 .

밀도 : 중심화와 같이 네트워크의 전체 특성을 나타내는 지표로 전체 노드가 서로 얼마나 많은 관계를

맺고 있는가를 알려준다 .

(3)

네트워크 분석 스타형 만들기

데이터분석및활용 세종대학교 부성순 3 (bakpak@empas.com)

# 네트워크 분석을 위한 igraph 패키지 설치

install.packages("igraph") library(igraph)

# 방향성이 없고 edges 와 노드 (n) 가 없는 igraph 생성

g_star<-graph(edges=NULL,n=NULL,directed=F)

plot(g_star) #노드가 없어 그래프가 생성되지 않음 .

# 그래프에 B,C,D,E,F 노드 추가 , 노드의 모양은 원 , 크기는 30

g_star<-g_star+vertex("B","C","D","E","F",shape="circle",size=30) plot(g_star)

# 그래프에 A 노드 추가 , 노드의 모양은 원 , 크기는 30, 색은 노랑

g_star<-g_star+vertex("A",shape="circle",size=30, color="yellow") plot(g_star)

# 그래프에 A 와 B 사이에 선추가 g_star<-g_star+edges("A","B") plot(g_star)

# A-C, A-D, A-E, A-F 네트워크 생성 g_star<-

g_star+edges("A","C","A","D","A","E","A","F")

plot(g_star)

(4)

네트워크 분석 Y 자형 만들기

# 네트워크 분석을 위한 igraph 패키지 설치

install.packages("igraph") library(igraph)

########## Y 자형 작성

g_Y<-graph(edges=NULL,n=NULL,directed=F)

g_Y<-g_Y+vertex("A","B","C","D","E","F",shape="circle",size=30, color="yellow") plot(g_Y)

# A 에 B,C,D 연결 , D 에 E 연결 ( 즉 A-B, A-C, A-D-E), E 에 F 연결 ( 즉 A-D-E-F)

g_Y<-g_Y+edges("A","B","A","C","A","D","D","E","E","F") plot(g_Y)

vcount(g_Y) #

네트워크내의 노드수 (A,B,C,D,E,F), 6 개

ecount(g_Y) #

노드간 연결된 에지의 총수 (a-b, a-c, a-d, d-e,e-f) 5 개

(5)

네트워크 분석 원형 (circle, Ring) 만들기

# 네트워크 분석을 위한 igraph 패키지 설치

install.packages("igraph") library(igraph)

########## 원형

g_R<-graph(edges=NULL,n=NULL,directed=F)

g_R<-g_L+vertex("A","B","C","D","E","F",shape="circle",size=30, color="yellow") plot(g_R)

# A-B, B-C, C-D, D-E, E-F, F-A 연결

g_R<-g_R+edges("A","B","B","C","C","D","D","E","E","F","F","A") plot(g_R)

vcount(g_R) #

네트워크내의 노드수 (A,B,C,D,E,F), 6 개

ecount(g_R) #

노드간 연결된 에지의 총수 (A-B, B-C, C-D, D-E, E-F, F-A) 6 개

(6)

네트워크 구조별 연결정도 비교

degree(g_star,normalized=TRUE) degree(g_Y,normalized=TRUE) degree(g_R,normalized=TRUE)

연결노드 연결노드수로 구 하는 정도중심성

A 5 5/(6-1)=1

B 1 1/(6-1)=0.2

C 1 1/(6-1)=0.2

D 1 1/(6-1)=0.2

E 1 1/(6-1)=0.2

F 1 1/(6-1)=0.2

연결노드 연결노드수로 구 하는 정도중심성

A 3 3/(6-1)=0.6

B 1 1/(6-1)=0.2

C 1 1/(6-1)=0.2

D 2 2/(6-1)=0.4

E 2 2/(6-1)=0.4

F 1 1/(6-1)=0.2

연결노드 연결노드수로 구 하는 정도중심성

A 2 2/(6-1)=0.4

B 2 2/(6-1)=0.4

C 2 2/(6-1)=0.4

D 2 2/(6-1)=0.4

E 2 2/(6-1)=0.4

F 2 2/(6-1)=0.4

StarY 형 원형

(7)

네트워크 구조별 연결정도 비교

#(n-1)(n-2) 이론적인 연결 정도 최대 충심화 계산

centralization.degree.tmax(g_star) centralization.degree.tmax(g_Y) centralization.degree.tmax(g_R)

연 결 노 드

연결노드수로 구하는 정도 중심성

연결중심성 (max-각노 드 )Max=5

A 5 5/(6-1)=1

5-5=0

B 1 1/(6-1)=0.2

5-1=4

C 1 1/(6-1)=0.2

5-1=4

D 1 1/(6-1)=0.2

5-1=4

E 1 1/(6-1)=0.2

5-1=4

F 1 1/(6-1)=0.2

5-1=4

A: 0+4+4+4+4+4 20

B: (n-1)(n-2) (6-1)(6-2)=20 연결정도중심화

A/B

1

StarY 형 원형

연 결 노 드

연결노드수로 구하는 정도 중심성

연결중심성 (max-각노 드 )Max=3

A

3 3/(6-1)=0.6 3-3=0

B

1 1/(6-1)=0.2 3-1=2

C

1 1/(6-1)=0.2 3-1=2

D

2 2/(6-1)=0.4 3-2=1

E

2 2/(6-1)=0.4 3-2=1

F

1 1/(6-1)=0.2 3-1=2

A: 0+4+4+4+4+4 8

B: (n-1)(n-2) (6-1)(6-2)=20 연결정도중심화

A/B

0.4

연 결 노 드

연결노드수로 구하는 정도 중심성

연결중심성 (max-각노 드 )Max=2

A

2 2/(6-1)=0.4 2-2=0

B

2 2/(6-1)=0.4 2-2=0

C

2 2/(6-1)=0.4 2-2=0

D

2 2/(6-1)=0.4 2-2=0

E

2 2/(6-1)=0.4 2-2=0

F

2 2/(6-1)=0.4 2-2=0

A: 0+4+4+4+4+4 0

B: (n-1)(n-2) (6-1)(6-2)=20 연결정도중심화

A/B

0

# 연결정도 중심화 측정

centralization.degree(g_star,normalized=FALS E)

centralization.degree(g_Y,normalized=FALSE) centralization.degree(g_R,normalized=FALSE)

centralization.degree(g_star,normalized=FALSE)$centralization/centralization.degree.tmax(g_star) centralization.degree(g_Y,normalized=FALSE)$centralization/centralization.degree.tmax(g_Y)

centralization.degree(g_R,normalized=FALSE)$centralization/centralization.degree.tmax(g_R)

(8)

꼭 워드클라우드와 SNA 연습할것 지금 실습하지 않고 아래 3,4 번 슬라이드

실습해도 됨

R 에서의 자료검색등 은 dplyr 패키지가 빠르고 간편함 .

파이썬에서 판다스 패키지와 동일하므로 당장은 R 에서

필요없으나 R 이 주 사용자인 경우에는 필수임

(9)

연습 1. 연관분석

install.packages("KoNLP") library(KoNLP)

useSejongDic( )

install.packages("arules") #연관분석 패키지 library(arules)

############연관분석 그래프 ###########

install.packages("tidyr") library(tidyr)

install.packages("arulesViz") library(arulesViz)

test<-c("반장 제주도 ", "제주도 귤 ", "강사 고향 제주도 ", "강사 강아지 봄 ", "강사 여자 ","한국 설 ") test #4개의 자료임

#################연관분석 ###################

연관분석 <-Map(extractNoun, test) 연관분석

연관분석중복제거 <- sapply( 연관분석 , unique) #한줄에서 중복단어 제거 연관분석중복제거 # 반장 , 고향 , 제주 , 제주 에서 제주가 한번만 나옴

연관분석형태변환 <- as( 연관분석중복제거 , "transactions") 연관분석형태변환

class(연관분석형태변환 ) inspect(연관분석형태변환 )

####### 문장분석후의 자료를 연관분석 단위로 변환하기 위한 과정임

연관분석단어가로세로집계 <- crossTable( 연관분석형태변환 ) 연관분석단어가로세로집계

class(연관분석단어가로세로집계 ) #가로세로의 숫자형태를 매트릭스 ( 행열 ) 형태라함

#######연관분석 시작

rules <- apriori(연관분석단어가로세로집계 , parameter=list(supp=0.1, conf=0.1)) rules

inspect(rules)

inspect(sort(rules,by="lift"))

##그래프

plot(rules,method="grouped") plot(rules,method="graph")

[ 연관분석에서의 데이터 전처리 , 단어제거등 ] http://blog.naver.com/PostView.nhn?

blogId=nonamed0000&logNo=220959156052

(10)

연습 1. 연관부석 앞 3 장에 이어서 (igraph 를 이용한 SNA)

# http://blog.naver.com/PostView.nhn?blogId=nonamed0000&logNo=220959156052

# (1) 데이터 구조 변경 : 연관규칙 결과 -> 행렬구조 변경 (matrix 또는 data.frame) rules. 그래프 <- labels(rules, ruleSep=" ") #rules 는 1 페이지에 기술된 연관분석자료임

# 문자열로 묶인 연관단어를 행렬구조 변경

rules. 그래프 <- sapply(rules. 그래프 , strsplit, " ", USE.NAMES=F)

# 행 단위로 묶어서 matrix 로 반환

rulemat <- do.call("rbind", rules. 그래프 )

# (2) 연관어 시각화를 위한 igraph 패키지 설치

install.packages("igraph") # graph.edgelist(), plot.igraph(), closeness() 함수 제공 library(igraph)

# (3) edgelist 보기 - 연관단어를 정점 형태의 목록 제공

ruleg <- graph.edgelist(rulemat[c(12:59),], directed=F) # [1,]~[11,] "{}" 제외 ruleg

# (4) edgelist 시각화

plot.igraph(ruleg, vertex.label=V(ruleg)$name,

vertex.label.cex=1.2, vertex.label.color='black',

vertex.size=20, vertex.color='green', vertex.frame.color='blue')

(11)

연습 2. 신라호텔 리뷰중 리뷰점수 1 점인 자료의 리뷰내용으로 분석

install.packages("KoNLP") library(KoNLP)

useSejongDic( )

install.packages("arules") #연관분석 패키지 library(arules)

############연관분석 그래프 ###########

install.packages("tidyr") library(tidyr)

install.packages("arulesViz") library(arulesViz)

tmp<-readLines("c:/data_r/서울 _ 신라호텔리뷰 .txt") #4개의 자료임 head(tmp)

test<-tmp[grep("리뷰 점수 : 1",tmp)-2] #리뷰점수보다 위로 2행위가 리뷰내용이므로 head(test)

#################연관분석 ###################

연관분석 <-Map(extractNoun, test) 연관분석

연관분석중복제거 <- sapply( 연관분석 , unique) #한줄에서 중복단어제거 연관분석중복제거

연관분석형태변환 <- as( 연관분석중복제거 , "transactions") 연관분석형태변환

class(연관분석형태변환 ) inspect(연관분석형태변환 )

####### 문장분석후의 자료를 연관분석 단위로 변환하기 위한 과정임 연관분석단어가로세로집계 <- crossTable( 연관분석형태변환 ) 연관분석단어가로세로집계

class(연관분석단어가로세로집계 ) #가로세로의 숫자형태를 매트릭스 ( 행열 ) 형태라함

#######연관분석 시작

rules <- apriori(연관분석단어가로세로집계 , parameter=list(supp=0.1, conf=0.1)) rules

inspect(rules)

inspect(sort(rules,by="lift"))

##그래프

plot(rules,method="grouped") plot(rules,method="graph")

참조

관련 문서

위하여 연결설정(SYN) 요청 à 위조된 IP 주소로 부터 응답(ACK)을 받을 때까지 대기 q 위조된 대량의 연결설정(SYN) 요청 패킷이 수신되면 서버의 대기

Quality An SNA user’s perception of the quality of functions (of the focal SNA) for the purposes of social networking, information exchange, identity management,

In the simple frequency analysis, TF-IDF analysis, and Topic analysis results, the meaning and social impact of future transport technology are explored, and

• 그래프 이론 (graph theory) : 그래프를 문제해결의

l 암호문의 통계적 특성과 암호 키 값과의 관계를 가능한 복잡하게 하는 l 암호문의 통계적 특성과 암호 키 값과의 관계를

l ISAKMP 메시지: 헤더, 보안연계 페이로드, 제안 페이로드(ISAKMP), 트랜스폼 페이로드(오클리 l ISAKMP 메시지: 헤더, 보안연계 페이로드,

q 등록기관: 인증서 신청자의 신원 확인 및 인증서 등록을 대행하는 기관 q 인증기관: 인증서를 발행하는 기관. q 인증기관:

§ 고속의 처리를 요구하는 IP 보안 프로토콜(IPSec)에 사용 l 암호키 관리: 네트워크에서 소요되는 전체 키의 개수가 많음 l 암호키 분배: 사전에 비밀키가 안전하게