R igraph 네트워크 자료의 표현 - 2
igraph 네트워크 객체로 표현하면 노드속성과 엣지속성을 표현하는데 장점이 많다.
네트워크 구성을 위한 Data 설명
- 네트워크 구성을 위한 데이터는 start와 end로 이루어진 두개의 컬럼을 가진 데이터 프레임으로 정의 하는 경우
- graph_from_data_frame를 활용해서 네트워크 데이터로 변환
- 하나의 컬럼을 가진 벡터 데이터의 경우는 c(첫번째,두번째,두번째,세번째,세번째,네번째) 구성되어야 하며, 내부 꼭지점의 ID로 해석된다
- 이 경우는 graph( edges=c(첫번째,두번째,두번째,세번째,세번째,네번째), n=3, directed=TRUE) 를 활용해서 네트워크 데이터로 변환
- 네트워크에 사용된 노드들에서 유니크 한 값을 추출 하는 경우는 V()라는 함수로 찾아 볼수 있다. Ex: V(g1)
네트워크의 속성
네트워크를 구성한 다음은 네트워크가 어떤 특성을 가졌는지 분석해야 하고 이 경우 해당 노드가 가지는 중요도을 수치화 해야 한다.
1) Shortest.paths(g) , shortest_paths(g,from=’사과’,to=’배’) : 최적경로를 산출해준다. 2) degree (g), degree (g, mode=’in’), degree (g, mode=’out’)
- 해당노드가 몇개의 경로가 들어오는지 를 보여주는 수치이다.
- mode 옵션으로 확인할 수 있다 3) eccentricity, diameter, radius
- 3가지는 전부 노드간 거리와 관련된 지표이다.
- eccentricity는 해당 노드가 자신 이외의 노드와의 거리 중 가장 큰값, 별도 옵션이 없으면 undirected가 기준이 되며, mode 옵션으로 들어오는 거리, 나가는 거리를 확인 할 수 있다. 4) Centrality
- 노드별로 중요한 정도를 표시하는 척도로서 degree, betweeness, closeness가 있다.
- betweeness : 노드가 엣지와 엣지 사이에 얼마나 많이 등장하는지를 나타내고 값이 클수록 두 노드 사이에 연관될 가능성이 높다.
- closeness : 해당 노드에서 다른 노드들로 가기까지의 거리가 얼마나 되는를 나타내는 척도
Plot에 적용되는 파리미터
사용예: Plot(g, layout=layout.fruchterman.reingold, vertex.size=8, edge.arrow.size=0.5,… )
1) layout 옵션
파라미터 | 의미 | 파라미터 | 의미 | 파라미터 | 의미 |
---|---|---|---|---|---|
layout.random | 무작위 | layout.cicle | 원위에 배치 | layout.fruchterman.reingold | Fruchterman Reingold 배치 알고리즘 |
layout.kamada.kawai | kamada Kawai 배치 알고리즘 | layout.lgl | 대규모 네트워크 |
2) 엣지관련
파라미터 | 의미 | 파라미터 | 의미 | 파라미터 | 의미 |
---|---|---|---|---|---|
E(g).color | 선색상 | E(g).width | 폭 | E(g).arrow.size | 화살크기 |
E(g).arrow.width | 화살폭 | E(g).arrow.mode | 화살 머리 유형 | E(g).lty | 선 유형.solid, dashed, dotted |
E(g).label.font | 라벨폰트,serif, sans, mono | E(g).label.color | 라벨색상 |
3) 노드관련
파라미터 | 의미 | 파라미터 | 의미 | 파라미터 | 의미 |
---|---|---|---|---|---|
vertex.size | 점크기 | vertex.frame.color | 점 윤곽의 색 | vertex.label | 점 레이블 |
vertex.label.font | 폰트 | vertex.label.dis | 점 중심과의 거리 | vertex.label.color | 점 레이블 색상 |
vertex.color | 점의 색 지정 | vertex.shape | 점의 형태 | vertex.label.family | 점 레이블 종류 |
vertex.label.cex | 점 레이블 크기 | vertex.label.gegree | 점 레이블 방향 |
네트워크 Visulalization Example
#---------------------------------------------
# 기본생성, 필요라이브러리 : library(igraph)
#---------------------------------------------
> g1 <- graph( edges=c(1,2, 2,3, 3,1), n=3, directed=FALSE)
# plot(g1, vertex.size=5,vertex.label=V(g1)$name, vertex.label.cex=1.2, vertex.label.dist=2, vertex.label.color="black") - 라벨 노드 밖, 글자 사이즈 조절 하는 경우
# plot(g1, vertex.label=NA) - 라벨을 없앨 경우
> plot(g1)
# 예제1 - node 사이즈 ,엣지 등 다양한 스타일 조절
> g1 <- graph( edges=c(1,2, 2,2, 3,1), n=3, directed=FALSE)
> E(g1)$color = 'black'; E(g1)[1]$color = 'red'
> E(g1)$width = 1; E(g1)[1]$width = 4
> plot(g1, vertex.size=40)
# 예제2 - 명칭으로 연결, directed = TRUE 화살표
> g1 <- graph( edges=c('사과','배','배','감', '감','감'), n=3, directed=TRUE)
> plot(g1, vertex.size=40)
> V(g1) # 유니크 값을 확인 해보려면
# 예제2 과 동일한 결과 이다.
df = data.frame(start=c('사과','배','감'), end=c('배','감', '감') )
g2 = graph_from_data_frame(df)
plot(g2, vertex.size=40)
> V(g2)
# 예제3 - 네트워크 속성확인
> g1 <- graph( edges=c('a','b','a','a','a','c', 'b','c','c','d','d','e','e','f','f','b','f','a','f','e' ), directed=TRUE)
> plot(g1, vertex.size=40) # plot(g1, vertex.size=40 , layout=layout.circle) 원 형태로 그리고자 할때
# Unique Node 확인
> V(g1)
# vertices(정점) 개수 확인
> vcount(g1)
# 최단경로 확인
> shortest.paths(g1)
> shortest_paths(g1, from='a', to='e')
# 노드로 들어 오는 경로가 몇개인지 확인
> degree(g1) # degree(g1,mode='in') or degree(g1,mode='out')
# 자기자신 향햐는 엣지을 제외한 엣지의 수
> eccentricity(g1) # eccentricity(g1,mode='in') or eccentricity(g1,mode='out')
# degree: 노드의 엣지에서 전체노드수 -1 만큼 나눠서 계산
# betweeness : 노드가 엣지와 엣지 사이에 얼마나 많이 등장하는지
# closeness : 해당 노드가 다른 노드로 가기까지의 거리 , 각 노드의 근접 중심성( 또는 정규화된 근접 중심성)
data.frame( degree = degree(g1) / (length(names(V(g1))) -1), between=betweenness(g1), close=closeness(g1,normalized=F))
# V(g1) 결과
+ 6/6 vertices, named, from 50ebeac:
[1] a b c d e f
# vcount(g1) 결과
[1] 6
# 최단경로 결과
a b c d e f
a 0 1 1 2 2 1
b 1 0 1 2 2 1
c 1 1 0 1 2 2
d 2 2 1 0 1 2
e 2 2 2 1 0 1
f 1 1 2 2 1 0
# a - > e 경로 확인 (방향성이 고려됨)
$vpath
$vpath[[1]]
+ 4/6 vertices, named, from dc4dad0:
[1] a c d e
# degree 의 결과
a b c d e f
5 3 3 2 3 4
# eccentricity 의 결과
a b c d e f
2 2 2 2 2 2
# degree, between, close 결과
degree between close
a 1.0 2.5 0.09090909
b 0.6 2.5 0.06666667
c 0.6 9.0 0.07142857
d 0.4 9.0 0.07692308
e 0.6 10.0 0.08333333
f 0.8 10.0 0.12500000
댓글남기기