사회관계망 개요
사회관계망(Social Network, SNA)은 대상들 사이의 관계를 네트워크로 나타내는 것을 의미한다고 할 수 있다. 사회관계망을 들여다보면 개개의 대상(node), 대상 사이의 관계(tie)로 구성되어 있다고 할 수 있을 것이며, 이들 대상의 영향력 혹은 중요도를 중심성(Centrality)이라는 기준으로 나타내어 표현하고 있다.
중심성
중심성은 노드의 상대적 중요성을 나타내는 척도로 계산 방법에 따라 연결중심성, 근접 중심성, 매개 중심성, 고유 중심성 등이 주로 사용된다고 한다.
연결중심성
노드 사이에 연결된 모든 엣지의 수를 기준으로 하는 중심성의 척도로 연결 강도가 고려되지 않는다는 단점이 존재한다.
ex) 유명인사 : 친구가 100명인 사람> 유명한 친구가 10명인 사람
고유벡터 중심성
노드와 연결된 다른 노드의 중요성까지 고려하여 산출한 중심성의 척도로 한 노드의 중심성이 높은 경우 이와 연결된 노드들 또한 중심성이 올라간다는 단점이 존재한다.
매개중심성
노드들의 연결된 최단거리를 산출 할 때, 거치는 빈도가 많다면 중요도가 높다할 수 있으므로 이를 기준으로 하는 중심성의 척도를 매개 중심성이라 한다.
근접중심성
중요한 노드일수록 다른 노드까지 도달하는 경로가 짧을 것이므로, 해당 노드와 해당 노드를 제외한 노드 사이의 최단 경로들의 평균을 기준으로 하는 중심성 척도이다.
예제
연결중심성예제는 아래와 같이 간략하게 수행할 수 있다. centrality_degree는 연결중심성으로 계산을 수행해준다.
library('tidygraph')
library('ggraph')
library(readr)
library(magrittr)
feat=read_csv('featuring.csv',locale=locale(encoding='cp949'))
fg=feat%>%as_tbl_graph()
fg%>%
mutate(bet= centrality_degree()) %>%
as_tibble %>%
arrange(desc(bet))
기본함수만을 활용하여 계산하면 아래와 같다.
name=unique(c(feat$from,feat$to))
as.numeric(factor(feat$from,levels = name))
as.numeric(factor(feat$to,levels = name))
sort(table(name[as.numeric(factor(feat$from,levels = name))]),decreasing = T)
참고


https://www.koreascience.or.kr/article/JAKO202111037332616.pdf
library(readr)
library(magrittr)
library(corrr)
df=mtcars %>% correlate()%>%as_matrix(diagonal = 1)
cor_df=function(df,logic){
name=rownames(df)
t=0;ls=apply(logic,1,function(x){
t<<-t+1
data.frame(from=name[t],to=names(which(x)))
})
cordf=do.call(rbind, ls)
rownames(cordf)=NULL
cordf$corr=df[logic]
cordf=cordf[cordf$from!=cordf$to,]
return(cordf)
}
cordf=cor_df(df,logic=abs(df)>.7)# abs(df) or df
# 연결 중심성
name=unique(c(cordf$from,cordf$to))
as.numeric(factor(cordf$from,levels = name))
as.numeric(factor(cordf$to,levels = name))
sort(table(name[as.numeric(factor(cordf$from,levels = name))]),decreasing = T)
fg=cordf%>%as_tbl_graph()%>%mutate(degree = centrality_degree())
#activate(fg,edges)%>%data.frame
fg%>%
ggraph(layout='kk') +
geom_edge_link(aes(alpha =abs(corr),color=corr,width=abs(corr)/2))+
geom_node_point(aes(size=degree))+
geom_node_text(aes(label=name),repel=T,size=10) +
theme_void()+
scale_edge_color_gradient2(low="blue",mid='white', high="red",limits=c(-1,1))
#매개 중심성
fg=cordf%>%as_tbl_graph()%>%mutate(degree = centrality_betweenness())
#activate(fg,edges)%>%data.frame
fg%>%
ggraph(layout='kk') +
geom_edge_link(aes(alpha =abs(corr),color=corr,width=abs(corr)/2))+
geom_node_point(aes(size=degree))+
geom_node_text(aes(label=name),repel=T,size=10) +
theme_void()+
scale_edge_color_gradient2(low="blue",mid='white', high="red",limits=c(-1,1))