일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자바 프로젝트
- pandas
- C# 프로젝트
- 파이썬 경사하강법
- 대학원 월급
- API
- DCP
- 인공지능
- 코딩테스트
- 경사하강법
- 딥러닝 실험 깃 버전관리
- 머신러닝
- Dehaze
- 대학원 급여
- 자바
- 통계학
- 딥러닝
- 인공지능 깃 버전관리
- 활성화 함수
- 디자인 패턴
- 영화 api
- 백준
- python
- 로스트아크
- 의료 ai 대학원 월급
- 파이썬
- 정규화
- 자바 영화 api
- MLP
- 디자인패턴
Archives
- Today
- Total
대학원 일기
11장: 네트워크 분석(노드 연결) 본문
igraph site
그래프 종류: star, ring, Y, tree, full 등 다양함
https://igraph.org/r/html/latest/
# 11.3 네트워크 지표 분석
# 네트워크 만들기
install.packages("igraph")
# 네트워크 시각화 & 분석 패키지
library(igraph)
# 네트워크는 스타형, Y자형, 원형으로 분석할 수 있음
# 스타형(mode: undirected-실선, out-바깥 화살표)
G.star <- make_star(6, mode="undirected", center=1) %>%
set_vertex_attr("name", value = c("A", "B", "C", "D", "E", "F"))
plot(G.star, vertex.color=rainbow(6), vertex.size=60)
# vertex.color: 원 색상, vertex.size: 원 크기
# 시각화
tkplot(G.star, vertex.color=rainbow(6), vertex.size=20)
# 원형 - Arguments(directed: 화살표 true/false, mutual:양방향 직선, circular: 원형 or 직선)
G.ring <- make_ring(6, directed = TRUE, mutual = TRUE, circular = TRUE) %>%
set_vertex_attr("name", value = c("A", "B", "C", "D", "E", "F"))
tkplot(G.ring, vertex.color=rainbow(6), vertex.size=20)
# Y자 - <https://igraph.org/r/html/latest/make_graph.html>
G.Y <- make_graph(edges=NULL, n=NULL, directed=FALSE)
G.Y <- G.Y + vertices("A", "B", "C", "D", "E", "F")
G.Y <- G.Y + edges("A", "B",
"A", "C",
"A", "D",
"D", "E",
"E", "F")
tkplot(G.Y, vertex.color=rainbow(6), vertex.size=20)
G.tree <- make_tree(6, children = 4, mode = c("out", "in", "undirected")) %>%
set_vertex_attr("name", value = c("A", "B", "C", "D", "E", "F"))
tkplot(G.tree, vertex.color=rainbow(6), vertex.size=20)
# 연결 정도 중심성과 중심화
degree(G.star, normalized = FALSE)
degree(G.star, normalized = TRUE)
CD <- centralization.degree(G.star, normalized = FALSE)
CD
Tmax <- centralization.degree.tmax(G.ring)
CD$centralization / Tmax
# 근접 중심성과 중심화
closeness(G.star, normalized=FALSE)
closeness(G.star, normalized=TRUE)
CC <- centralization.closeness(G.star, normalized = FALSE)
CC$centralization / (6-1)
CC$theoretical_max / (6-1)
CC$centralization / CC$theoretical_max
# 중개 중심성과 중심화
betweenness(G.star, normalized=FALSE)
betweenness(G.star, normalized=TRUE)
CB <- centralization.betweenness(G.star, normalized=FALSE)
CB$centralization
CB$theoretical_max
CB$centralization / CB$theoretical_max
# 네트워크 밀도
graph.density(G.star)
graph.density(G.Y)
graph.density(G.ring)
# 최단경로와 평균 거리
shortest.paths(G.Y)
distances(G.Y, v = "A", to="E")
get.shortest.paths(G.Y, "A", "E")$vpath[[1]]
average.path.length(G.Y)
# 11.4 페이스북 사용자 네트워크 분석
# 페이스북 사용자 데이터 읽기와 그래프 출력
# install.packages("igraph"")
library(igraph)
df.fb <- read.table(file.choose(), header=F)
head(df.fb)
tail(df.fb)
G.fb <- graph.data.frame(df.fb, directed=FALSE)
par(mar=c(0,0,0,0))
plot(G.fb,
vertex.label = NA,
vertex.size = 10,
vertex.color = rgb(0,1,0,0.5))
dev.off()
# 1~50번째 사용자들 간의 그래프
V(G.fb)$name
v.set <- V(G.fb)$name[1:50]
G.fb.part <- induced_subgraph(G.fb, v=v.set)
tkplot(G.fb.part,
vertex.label.cex = 1.2,
vertex.size = degree(G.fb.part)*1.5,
vertex.color = "yellow",
vertex.frame.color = "gray")
# ID가 1인 사용자와 연결된 그래프
v2 <- which(V(G.fb)$name == "1")
v2
v.set <- neighbors(G.fb, v=v2)
v.set
v3 <- c(v2, v.set)
G.fb.id <- induced_subgraph(G.fb, v=v3)
V(G.fb.id)$color <- ifelse(V(G.fb.id)$name == "1", "red", "yellow")
tkplot(G.fb.id,
vertex.label.cex = 1.2,
vertex.size = degree(G.fb.id)*1.5,
vertex.frame.color = "gray")
# 연결정도가 가장 큰 사용자와 연결된 그래프
v.max <- V(G.fb)$name[degree(G.fb)==max(degree(G.fb))]
v.max
degree(G.fb, v.max)
v.max.idx <- which(V(G.fb)$name == v.max)
v.max.idx
v.set <- neighbors(G.fb, v=v.max.idx)
v3 <- c(v.max.idx, v.set)
G.fb_2 <- induced_subgraph(G.fb, v=v3)
V(G.fb_2)$color <- ifelse(V(G.fb_2)$name == v.max, "red", "yellow")
V(G.fb_2)$label <- ifelse(V(G.fb_2)$name == v.max, v.max, NA)
V(G.fb_2)$size <- ifelse(V(G.fb_2)$name == v.max, 50, 5)
plot(G.fb_2)
# 연결정도 중심성과 중심화 지표
degree(G.fb, normalized=FALSE)
degree(G.fb, normalized=TRUE)
CD <- centralization.degree(G.fb, normalized = FALSE)
CD$centralization
Tmax <- centralization.degree.tmax(G.fb)
Tmax
CD$centralization / Tmax
# 근접 중심성과 중심화 지표
closeness(G.fb, normalized=FALSE)
closeness(G.fb, normalized=TRUE)
CB <- centralization.closeness(G.fb, normalized = FALSE)
n <- vcount(G.fb)
n
CB$centralization / (n-1)
CB$theoretical_max / (n-1)
CB$centralization / CB$theoretical_max
# 중개 중심성과 중심화 지표
betweenness(G.fb, normalized=FALSE)
closeness(G.fb, normalized=TRUE)
CB <- centralization.betweenness(G.fb, normalized = FALSE)
CB$centralization
CB$theoretical_max
CB$centralization / CB$theoretical_max
# 밀도
graph.density(G.fb)
# 거리
shortest.paths(G.fb)[1:10, 1:10]
distances(G.fb, v = "3", to="7")
get.shortest.paths(G.fb, "3", "7")$vpath[[1]]
average.path.length(G.fb)
# 연결정도 분포
plot(degree(G.fb),
xlab="사용자 ID", ylab="연결 정도",
main="사용자별 연결정도",
type='h')
x <- degree(G.fb, normalized=F)
summary(x)
hist(x,
xlab="연결 정도", ylab="빈도",
main="연결정도 분포",
breaks=seq(0, max(x), by=1))
G.fb.dist <- degree.distribution(G.fb)
plot(G.fb.dist,
type="h",
xlab="연결정도 분포", ylab="확률밀도",
main="연결정도 분포")
igraph site
그래프 종류: star, ring, Y, tree, full 등 다양함
https://igraph.org/r/html/latest/
# 11.3 네트워크 지표 분석
# 네트워크 만들기
install.packages("igraph")
# 네트워크 시각화 & 분석 패키지
library(igraph)
# 네트워크는 스타형, Y자형, 원형으로 분석할 수 있음
# 스타형(mode: undirected-실선, out-바깥 화살표)
G.star <- make_star(6, mode="undirected", center=1) %>%
set_vertex_attr("name", value = c("A", "B", "C", "D", "E", "F"))
plot(G.star, vertex.color=rainbow(6), vertex.size=60)
# vertex.color: 원 색상, vertex.size: 원 크기
# 시각화
tkplot(G.star, vertex.color=rainbow(6), vertex.size=20)
# 원형 - Arguments(directed: 화살표 true/false, mutual:양방향 직선, circular: 원형 or 직선)
G.ring <- make_ring(6, directed = TRUE, mutual = TRUE, circular = TRUE) %>%
set_vertex_attr("name", value = c("A", "B", "C", "D", "E", "F"))
tkplot(G.ring, vertex.color=rainbow(6), vertex.size=20)
# Y자 - <https://igraph.org/r/html/latest/make_graph.html>
G.Y <- make_graph(edges=NULL, n=NULL, directed=FALSE)
G.Y <- G.Y + vertices("A", "B", "C", "D", "E", "F")
G.Y <- G.Y + edges("A", "B",
"A", "C",
"A", "D",
"D", "E",
"E", "F")
tkplot(G.Y, vertex.color=rainbow(6), vertex.size=20)
G.tree <- make_tree(6, children = 4, mode = c("out", "in", "undirected")) %>%
set_vertex_attr("name", value = c("A", "B", "C", "D", "E", "F"))
tkplot(G.tree, vertex.color=rainbow(6), vertex.size=20)
# 연결 정도 중심성과 중심화
degree(G.star, normalized = FALSE)
degree(G.star, normalized = TRUE)
CD <- centralization.degree(G.star, normalized = FALSE)
CD
Tmax <- centralization.degree.tmax(G.ring)
CD$centralization / Tmax
# 근접 중심성과 중심화
closeness(G.star, normalized=FALSE)
closeness(G.star, normalized=TRUE)
CC <- centralization.closeness(G.star, normalized = FALSE)
CC$centralization / (6-1)
CC$theoretical_max / (6-1)
CC$centralization / CC$theoretical_max
# 중개 중심성과 중심화
betweenness(G.star, normalized=FALSE)
betweenness(G.star, normalized=TRUE)
CB <- centralization.betweenness(G.star, normalized=FALSE)
CB$centralization
CB$theoretical_max
CB$centralization / CB$theoretical_max
# 네트워크 밀도
graph.density(G.star)
graph.density(G.Y)
graph.density(G.ring)
# 최단경로와 평균 거리
shortest.paths(G.Y)
distances(G.Y, v = "A", to="E")
get.shortest.paths(G.Y, "A", "E")$vpath[[1]]
average.path.length(G.Y)
# 11.4 페이스북 사용자 네트워크 분석
# 페이스북 사용자 데이터 읽기와 그래프 출력
# install.packages("igraph"")
library(igraph)
df.fb <- read.table(file.choose(), header=F)
head(df.fb)
tail(df.fb)
G.fb <- graph.data.frame(df.fb, directed=FALSE)
par(mar=c(0,0,0,0))
plot(G.fb,
vertex.label = NA,
vertex.size = 10,
vertex.color = rgb(0,1,0,0.5))
dev.off()
# 1~50번째 사용자들 간의 그래프
V(G.fb)$name
v.set <- V(G.fb)$name[1:50]
G.fb.part <- induced_subgraph(G.fb, v=v.set)
tkplot(G.fb.part,
vertex.label.cex = 1.2,
vertex.size = degree(G.fb.part)*1.5,
vertex.color = "yellow",
vertex.frame.color = "gray")
# ID가 1인 사용자와 연결된 그래프
v2 <- which(V(G.fb)$name == "1")
v2
v.set <- neighbors(G.fb, v=v2)
v.set
v3 <- c(v2, v.set)
G.fb.id <- induced_subgraph(G.fb, v=v3)
V(G.fb.id)$color <- ifelse(V(G.fb.id)$name == "1", "red", "yellow")
tkplot(G.fb.id,
vertex.label.cex = 1.2,
vertex.size = degree(G.fb.id)*1.5,
vertex.frame.color = "gray")
# 연결정도가 가장 큰 사용자와 연결된 그래프
v.max <- V(G.fb)$name[degree(G.fb)==max(degree(G.fb))]
v.max
degree(G.fb, v.max)
v.max.idx <- which(V(G.fb)$name == v.max)
v.max.idx
v.set <- neighbors(G.fb, v=v.max.idx)
v3 <- c(v.max.idx, v.set)
G.fb_2 <- induced_subgraph(G.fb, v=v3)
V(G.fb_2)$color <- ifelse(V(G.fb_2)$name == v.max, "red", "yellow")
V(G.fb_2)$label <- ifelse(V(G.fb_2)$name == v.max, v.max, NA)
V(G.fb_2)$size <- ifelse(V(G.fb_2)$name == v.max, 50, 5)
plot(G.fb_2)
# 연결정도 중심성과 중심화 지표
degree(G.fb, normalized=FALSE)
degree(G.fb, normalized=TRUE)
CD <- centralization.degree(G.fb, normalized = FALSE)
CD$centralization
Tmax <- centralization.degree.tmax(G.fb)
Tmax
CD$centralization / Tmax
# 근접 중심성과 중심화 지표
closeness(G.fb, normalized=FALSE)
closeness(G.fb, normalized=TRUE)
CB <- centralization.closeness(G.fb, normalized = FALSE)
n <- vcount(G.fb)
n
CB$centralization / (n-1)
CB$theoretical_max / (n-1)
CB$centralization / CB$theoretical_max
# 중개 중심성과 중심화 지표
betweenness(G.fb, normalized=FALSE)
closeness(G.fb, normalized=TRUE)
CB <- centralization.betweenness(G.fb, normalized = FALSE)
CB$centralization
CB$theoretical_max
CB$centralization / CB$theoretical_max
# 밀도
graph.density(G.fb)
# 거리
shortest.paths(G.fb)[1:10, 1:10]
distances(G.fb, v = "3", to="7")
get.shortest.paths(G.fb, "3", "7")$vpath[[1]]
average.path.length(G.fb)
# 연결정도 분포
plot(degree(G.fb),
xlab="사용자 ID", ylab="연결 정도",
main="사용자별 연결정도",
type='h')
x <- degree(G.fb, normalized=F)
summary(x)
hist(x,
xlab="연결 정도", ylab="빈도",
main="연결정도 분포",
breaks=seq(0, max(x), by=1))
G.fb.dist <- degree.distribution(G.fb)
plot(G.fb.dist,
type="h",
xlab="연결정도 분포", ylab="확률밀도",
main="연결정도 분포")
'School > Data Mining and Statistics' 카테고리의 다른 글
13장: 인공신경망 (1) | 2023.10.16 |
---|---|
12장: 시뮬레이션 (0) | 2023.10.16 |
10장: Naver OPEN API (0) | 2023.10.16 |
9장: OPEN API (0) | 2023.10.16 |
8장: 웹 스크래핑 코드 (0) | 2023.10.16 |
Comments