/*

 http://sosal.kr/
 * made by so_Sal
 */

 


 

- Graph data

그래프 데이터의 표현방식은 다양하다.

 

1. Adjacency matrix (인접행렬)

# 데이터는 아무런 의미가 없는, 제가 마음대로 만든 matrix 입니다.

 

ALK

AMN DMRTA1 SOX2 PCDHA8 OR52A5 IQCB1

ALK

0 1 0 1 0 1 0
AMN 1 0 1 1 0 1 0
DMRTA1 0 1 0 0 0 0 0
SOX2 1 1 0 0 1 1 0
PCDHA8 0 0 0 1 0 1 0

OR52A5

1 1 0 1 1 0 1
IQCB1 0 0 0 0 0 1 0

 

인접행렬은 column, row의 구성이 같아야 하며 n by n matrix를 이룬다.

따라서 column, row에 있는 목록이 곧 vertex가 되며, n-Adjacency matrix의 경우 n개의 vertex가 존재할 것이다.

Vij가 곧 vertex를 연결하는 direct를 의미하며,

 

예제파일 (위의 matrix를 csv로 변환한 파일입니다.)

adjacency_matrix.csv

 

 

 

> library(igraph)

# 라이브러리 설치가 안됐다면, install.packages("igraph") 로 간단하게 설치 가능

> dat <- read.csv("adjacency_matrix.csv", header=TRUE, row.names=1,sep=",")

 

 

> m_dat <- as.matrix(dat)
> g <- graph.adjacency( dat, mode="undirected", weighted=NULL) 

> plot(g)

 

 

2. Edge list 

V1 V2

ALK AMN
ALK SOX2
ALK OR52A5
AMN ALK
AMN DMRTA1
AMN SOX2
DMRTA1 OR52A5
DMRTA1 IQCb1
SOX2 AMN
PCDHA8 SOX2
QR52A5 DMRTA1
IQCB1 AMN
IQCB1 DMRTA1
IQCB1 QR52A5

 

예제파일 (위의 matrix를 csv로 변환한 파일입니다.)

edge_list.csv

 

> dat=read.csv("edge_list.csv",header=TRUE)

 

> m_dat <- as.matrix(dat)

> g = graph.edgelist( m_dat, directed = TRUE)

> plot(g)

 

 

 

 

3. bipartite graph

Stack overflow에서 간단한 예제를 수정하여 가져왔다.

http://stackoverflow.com/questions/31366066/how-to-plot-a-bipartite-graph-in-r

 

> V1 <- sample(LETTERS[1:10], size = 10, replace = TRUE)
> V2 <- sample(1:10, size = 10, replace = TRUE)
> d <- data.frame(V1 = V1, V2 = V2, weights = runif(10))

 

 

 
> g <- graph_from_data_frame(d, directed = FALSE)
> V(g)$label <- V(g)$name # set labels.
 
> V(g)$type <- 1
> V(g)[name %in% 1:10]$type <- 2
> col <- c("steelblue", "orange", "green")
> shape <- c("circle", "square", "circle")
> plot(g, vertex.color = col[V(g)$type], vertex.shape = shape[V(g)$type], edge.width = E(g)$weights * 5)

 # optional, plot edges width proportional to weights.
 

 

 

 

 

사실 이 bipartite graph에서는 Vertex1과 Vertex2를 이름으로 구분했는데,

유전자 네트워크의 경우 V1과 V2에 같은 유전자가 존재할 수 있으므로 이 방법은 사용하기 쉽지 않다.

어떤 방식으로 V1과 V2를 독립적인 vertex로 type을 지정할 수 있을 지 좀더 공부가 필요하다.

저작자 표시 비영리 변경 금지
신고
Posted by sosal sosal

댓글을 달아 주세요

  1. 2015.09.20 14:07 신고

    안녕하세요 제가 지금 과제를 하고있는데요 R은 한번도 안써본거라서요... 이게 무슨말인지 도져히 감이 안잡혀서요~ 데이터를 어떻게 뽑으며 표현하라는지를;;;; 한번봐주시겠어요?
    Compute the following quantities for the ArXiv High Energy Physics paper citation network
    in SNAP: Stanford Large Network Dataset Collection:
    • Rank order the 10 pairs of articles possessing the highest cocitation.
    • Rank order the 10 pairs of articles possessing the highest bibliographic coupling.
    Use a suitable software package to visually represent the cocitation and bibliographic coupling
    of this network