동시 출현 빈도값을 이용하여 Degree Centrality(연결중심성) 및 Eigenvector Centrality(위세중심성) 을 계산해보려고 한다.
networkx 패키지에서 지원을 하고 있어서 쉽게 사용 가능하다.
중심성 지수
[네트워크 분석] 네트워크 중심성(Centrality) 지수 - 연결(Degree), 매개(Betweeness), 위세(Eigenvector), 근
안녕하세요. 중심성(Centrality) 지수에 대해서 정리해보려고 합니다. 1. 중심성(Centrality) 지수 중심...
blog.naver.com
연결 중심성(Degree Centrality, Cd)
연결 중심성은 중심성 지수에서 가장 간단하면서 기본적인 지표입니다. 이 지표는 한 노드(Node)에 직접적으로 연결된 모든 엣지(Edge)의 개수로 지수를 평가합니다.
[네트워크 분석] 네트워크 중심성(Centrality) 지수 - 연결(Degree), 매개(Betweeness), 위세(Eigenvector), 근접(Closeness) : 네이버 블로그 (naver.com)
위세 중심성(Eigenvector Centraility, Ce)
연결 중심성(Degree Centraility)는 특정 노드가 다른 노드와 연결된 정도를 나타낸 지수라면, 위세 중심성(Eigenvector Centrailiy)는 특정 노드와 연결된 다른 노드들의 중심성을 가중치에 반영하는 지표입니다. 즉, 위세 중심성이 높은 노드는 연결된 다른 노드가 네트워크에서 중요한 노드들이랑 많이 연결되었다는 의미를 얻을 수 있습니다.
[네트워크 분석] 네트워크 중심성(Centrality) 지수 - 연결(Degree), 매개(Betweeness), 위세(Eigenvector), 근접(Closeness) : 네이버 블로그 (naver.com)
import pandas as pd
import networkx as nx
import numpy as np
def main():
dataset = pd.read_csv('./concurrency_list.csv')
#중심성 척도 계산
G_centrality = nx.Graph()
#특정 빈도수(lowLimitForCentrality) 이상 단어쌍에 대해서 edge 표현 (데이터에 따라 유동적으로)
for ind in range((len(np.where(dataset['freq'] >= lowLimitForCentrality)[0]))):
G_centrality.add_edge(dataset['word1'][ind], dataset['word2'][ind], weight=int(dataset['freq'][ind]))
dgr = nx.degree_centrality(G_centrality) # 연결 중심성
egv = nx.eigenvector_centrality(G_centrality) # 위세 중심성
cdf = pd.DataFrame(data=dgr, index=['weight'])
cdf = (cdf.T)
cdf = cdf.sort_values('weight', ascending=False)
cdf.to_excel(folder + 'degree_centrality.xlsx')
print('> exported degree_centrality')
cdf = pd.DataFrame(data=egv, index=['weight'])
cdf = (cdf.T)
cdf = cdf.sort_values('weight', ascending=False)
cdf.to_excel(folder + 'eigenvector_centrality.xlsx')
print('> exported eigenvector_centrality')
그리고, 이전 게시물에서 만들었던 concurrency_list.csv 파일은 아래 형태의 인풋 데이터이다.
* 두 단어 쌍이 동시 존재한 문서 갯수를 세어서, 높은 순서로 정렬한 결과이다.
freq값은 전체 문서 갯수에 따라 그 크기다 다 다를것인데, 너무 작은 숫자까지 input로 쓰는것은 큰 의미가 없고 오히려 연산 시간만 많이 소요될 수 있으므로, 적당히 자르는게 필요하겠다. concurrency_list를 만들 때 특정 freq 이상만 csv에 넣는다던지, 아니면, 위의 중심성 계산을 위해 노드 추가할 때 특정 freq이상만 노드로 추가를 할 수 있겠다. 후자로 할 때 그 필터링할 최소 freq 값을 lowLimitForCentrality 에 정의를 하면 된다.

빅데이터 키워드 분석 : 동시 출현 빈도 계산 :: 코딩하는 참새 (tistory.com)
그래서, 위 스크립트를 수행하면 대략 아래와 같은 결과값이 나온다.


Degree(왼쪽) Eigenvector(오른쪽) Centrality
그 외, 매개중심성, 근접중심성, 페이지 랭크도 아래처럼 계산할 수 있다.
btw = nx.betweenness_centrality(G_centrality) # 매개 중심성
cls = nx.closeness_centrality(G_centrality) # 근접 중심성
pgr = nx.pagerank(G_centrality) # 페이지 랭크
'SW Project > 빅데이터 키워드 네트워크 분석' 카테고리의 다른 글
빅데이터 키워드 분석 : Keyword Network Graph 그리기 (0) | 2023.11.19 |
---|---|
빅데이터 키워드 분석 : Word Cloud 그리기 (0) | 2023.11.19 |
빅데이터 키워드 분석 : 동시 출현 빈도 계산 (0) | 2023.11.19 |
빅데이터 키워드 분석 : Term Frequency, TF-IDF 계산 및 막대그래프(plot-bar) 그리기 (0) | 2023.11.19 |
빅데이터 키워드 분석 : 개발환경, 데이터 정제 (0) | 2023.11.19 |