R 네트워크 자료의 표현 - 1
네트워크 표현형식은 아래와 같이 2가지로 표현이 가능하다.
A | B | C | |
A | 0 | 1 | 1 |
B | 0 | 0 | 1 |
C | 0 | 1 | 0 |
from | to |
A-> | B |
A-> | C |
B-> | C |
C-> | B |
차이는 사회행렬을 엣지(인접)형태로 표현하게 되면 저장공간이 매우 효율화 된다.
네트워크 객체 정보
네트워크 자료형에서 노드와 엣지는 반드시 필요하지만, 추가적인 정보를 더 담을 수 있다.
구성요소 | 설명 | 필수여부 |
---|---|---|
노드 | 노드 혹은 Vertex라고 불리며 네트워크 노드를 구성 | 필수 |
엣지 | 엣지 혹은 링크, Tie라고 불리며 네트워크 연결을 담당 | 필수 |
노드 속성 | 노드 속성을 표현, 노드가 사람인 경우 성별 등 | 옵션 |
엣지 속성 | 엣지 속성을 표현, 엣지가 금융거래의 경우 거래금액 등 | 옵션 |
메타데이터 | 전체 네트워크에 대한 정보를 포함 | 옵션 |
네트워크 객체 생성
- SocioMatrix
> library(network) > netmat1 <- rbind(c(0,1,1,0,0), c(0,0,1,1,0), c(0,1,0,0,0), c(0,0,0,0,0), c(0,0,1,0,0)) > rownames(netmat1) <- c("A","B","C","D","E") > colnames(netmat1) <- c("A","B","C","D","E") > net1 <- network(netmat1, matrix.type="adjacency") > summary(net1)
- 엣지리스트
- 엣지리스트의 경우 network.vertex.names(net2) <- c(“A”,”B”,”C”,”D”,”E”) 를 사용해서 라벨을 붙인다.
> library(sna) # 1로 세팅된 자표만 R bind 시킨다. > netmat2 <- rbind(c(1,2), c(1,3), c(2,3), c(2,4), c(3,2), c(5,3)) > net2 <- network(netmat2,matrix.type="edgelist") > network.vertex.names(net2) <- c("A","B","C","D","E") > summary(net2)
- 엣지리스트의 경우 network.vertex.names(net2) <- c(“A”,”B”,”C”,”D”,”E”) 를 사용해서 라벨을 붙인다.
시각화
> par(mfrow=c(1,2))
> gplot(net1, vertex.col = 2, displaylabels = TRUE, main="사회행렬(SocioMatrix)")
> gplot(net2, vertex.col = 2, displaylabels = TRUE, main="엣지리스트(Edgelist)")
네트워크 노드 속성
# net1에 노드에 대한 속성 gender 추가
> set.vertex.attribute(net1, "gender", c("F", "F", "M", "F", "M"))
# net1에 노드 내부에 degree() 속성을 추가 , 노드로 들어 오는 경로가 몇개인지 확인
> net1 %v% "alldeg" <- degree(net1)
# 노드에 대한 속성 확인
> list.vertex.attributes(net1)
[1] "alldeg" "gender" "na" "vertex.names"
※ set.vertex.attribute는 library(network) 에 있는 function을 사용
# 추가된 gender 속성확인
> get.vertex.attribute(net1, "gender")
[1] "F" "F" "M" "F" "M"
네트워크 엣지 속성
> set.edge.attribute(net1,"rndval", runif(network.size(net1),0,1))
> list.edge.attributes(net1)
> summary(get.edge.attribute(net1,"rndval"))
- 엣지속성은 SNS같은 네트워크를 표현할 때 자주 등장
- SNS에서 좋아요(like)를 표현할때 요긴함
- ignore.eval=FALSE, names.eval=“like” 인자로 표현하게 되면 네트워크 엣지에 0, 1 대신 실제 값(좋아요 갯수) 사용이 가능
-
사용예시
> netval1 <- rbind(c(0,2,3,0,0), c(0,0,3,1,0), c(0,1,0,0,0), c(0,0,0,0,0), c(0,0,2,0,0)) > netval1 <- network(netval1,matrix.type="adjacency", ignore.eval=FALSE,names.eval="like") > network.vertex.names(netval1) <- c("A","B","C","D","E") > list.edge.attributes(netval1) > summary(netval1)
댓글남기기