네트워크 데이터 연습문제 1 2

#---------------------------------------------------------------------------------------------
# 1. 연결되지 않은 5개 노드를 갖는 그래프를 생성하시오. 모든 노드는 노랑색이며, 형태는 구형태를 갖도록 한다.
#---------------------------------------------------------------------------------------------
library(igraph)
g <- make_empty_graph(n=5, directed=TRUE)
V(g)$color = "yellow"
V(g)$shape = "sphere"

plot(g)

#---------------------------------------------------------------------------------------------
# 2. 1->2, 1->3, 2->4, 3->4, 4->5 엣지연결을 갖는 그래프를 추가하시오.
#---------------------------------------------------------------------------------------------
g <- add_edges(g, c(1,2, 1,3, 2,4, 3,4, 4,5))

plot(g, edge.arrow.size=.05)

#---------------------------------------------------------------------------------------------
# 3. 노드를 추가하고 색상은 빨강, 형태는 구형태를 갖고, 해당 노드는 3->6, 6->5 엣지 연결을 시키시오.
#---------------------------------------------------------------------------------------------

g <- add_vertices(g, 1, color="red", shape="sphere")
g <- add_edges(g, c(3,6, 6,5))
plot(g, edge.arrow.size=.05)

#---------------------------------------------------------------------------------------------
# 4. 엣지 연결 1->3을 3->1로 교체하시오.
#---------------------------------------------------------------------------------------------

E(g)
+ 7/7 edges from d0ac3b4:
[1] 1->2 1->3 2->4 3->4 4->5 3->6 6->5
g <- delete_edges(g, c(2))
g <- add_edges(g, c(3,1))

plot(g, edge.arrow.size=.05)

#---------------------------------------------------------------------------------------------
# 5. 노드에 A-F 라벨을 붙이시오. 모든 노드와 엣지를 목록으로 출력하시오.
#---------------------------------------------------------------------------------------------

V(g)$name <- LETTERS[1:6]

V(g)
+ 6/6 vertices, named, from d0d8f1b:
[1] A B C D E F
E(g)
+ 7/7 edges from d0d8f1b (vertex names):
[1] A->B B->D C->D D->E C->F F->E C->A
plot(g, edge.arrow.size=.05)

#---------------------------------------------------------------------------------------------
# 6. 노드 A에서 노드 E로 최단거리를 구하시오.
#---------------------------------------------------------------------------------------------

shortest_paths(g, "A", "E", output="epath")$epath[1]
[[1]]
+ 3/7 edges from d0d8f1b (vertex names):
[1] A->B B->D D->E
## 시각화
short.path <- get.shortest.paths(g, V(g)["A"], V(g)["E"], mode="all", output="both")

# 엣지 변수 색상 생성:
ecol <- rep("gray80", ecount(g))
ecol[unlist(short.path$epath)] <- "orange"

# 엣지 변수 선폭 생성:
ew <- rep(2, ecount(g))
ew[unlist(short.path$epath)] <- 4

# 노드 색상변수 생성:
vcol <- rep("gray40", vcount(g))
vcol[unlist(short.path$vpath)] <- "gold"

plot(g, vertex.color=vcol, edge.color=ecol, 
     edge.width=ew, edge.arrow.mode=0)

#---------------------------------------------------------------------------------------------
# 7. 지금까지 작성한 네트워크를 시각화하시오. 노드 크기는 인입되는 엣지연결 숫자에 따라 크기를 반영하시오.
#---------------------------------------------------------------------------------------------

plot(g, layout=layout_nicely, vertex.size=degree(g, V(g), "in")*15+15,
     vertex.label.dist=0.5, edge.arrow.size=0.05)

#---------------------------------------------------------------------------------------------
# 8. 노드 연결분포를 플롯으로 그리시오.
#---------------------------------------------------------------------------------------------

dd <- degree_distribution(g)
plot(dd, main="Degree distribution", xlab="Degree", ylab="Frequency")

#---------------------------------------------------------------------------------------------
# 9. 적외선 열지도 그래프(Heatmap)을 생성하시오.
#---------------------------------------------------------------------------------------------

pal <- colorRampPalette(c("lightblue", "blue"))
a <- as.matrix(get.adjacency(g))
heatmap(a, Rowv=NA, Colv="Rowv", col=pal(100))

#---------------------------------------------------------------------------------------------
# 10. 인입 엣지가 1개 이상되는 노드를 갖는 그래프를 생성하고 이를 도식화한다. 노드 크기는 나가는 
#     링크 연결갯수를 반영해야 한다.
#---------------------------------------------------------------------------------------------
sg <- induced_subgraph(g, V(g)[igraph::degree(g, V(g), "in") >= 1])
plot(sg, layout=layout_nicely, vertex.size=igraph::degree(sg, V(sg), "out")*10+15,
     vertex.color="green", vertex.shape="square", vertex.label.dist=0.5, edge.arrow.size=0.05)


  1. Network Analysis Part 1 Exercises

  2. Network Analysis Part 1 Solutions