코린이/실무를 위한 코딩 기록
[python] NetworkX를 이용한 왕좌의 게임 등장인물 네트워크 분석
anweh
2020. 11. 2. 20:26
왕좌의 게임이라는 미드를 한 번도 본적은 없는데, 외국에선 이 왕좌의 게임 내 인물 관계도를 네트워크 분석 예제로 많이 사용하는 듯 하여 자료를 구해봤다.
asoiaf-all-edges.csv
0.12MB
asoiaf-all-nodes.csv
0.02MB
1. 라이브러리 및 데이터 불러오기
import networkx as nx
import pandas as pd
import matplotlib.pyplot as plt
import itertools
import os
os.chdir('C:/Users/user/Desktop/PyStudy/asoiaf-master/data/')
all_books = ['asoiaf-all-edges.csv', 'asoiaf-all-nodes.csv']
li = []
for f in all_books:
tmp = pd.read_csv(f)
li.append(tmp)
2. 데이터 정제 및 그래프 생성
df = pd.concat(li, axis=0, ignore_index=True) #합치기
df = df[['Source', 'Target']] #source, target 컬럼만 남기기
df.drop_duplicates(subset=['Source', 'Target'], inplace=True) #겹치는 데이터 삭제
G = nx.from_pandas_edgelist(df, source='Source', target='Target')
print(len(G.nodes())) #797
print(len(G.edges())) #2824
3. 중심성 계산
'''
CENTRALITY
'''
# Compute the betweenness centrality of G: bet_cen
bet_cen = nx.betweenness_centrality(G)
sorted(bet_cen.items(), key=lambda x:x[1], reverse=True)[0:5]
# Compute the degree centrality of G: deg_cen
deg_cen = nx.degree_centrality(G)
sorted(deg_cen.items(), key=lambda x:x[1], reverse=True)[0:5]
# Compute the page rank of G: page_rank
page_rank = nx.pagerank(G)
sorted(page_rank.items(), key=lambda x:x[1], reverse=True)[0:5]
# Compute the closeness centrality of G: clos_cen
clos_cen = nx.closeness_centrality(G)
sorted(clos_cen.items(), key=lambda x:x[1], reverse=True)[0:5]
NetworkX는 그래프를 활용한 다양한 계산에 대한 라이브러리가 잘 구축 되어 있다.
내가 왕좌의 게임 네트워크 분석에 사용한 연결중심성은 네 가지 이다.
- betweenness centrality (매개중심성): 노드간 경로에 있는 사람이 더 중심도가 높다는 이론을 근거로 계산. 한마디로 노드와 노드 사이를 잇는 나들목에 여러번 등장하는 노드가 중요하다는 뜻이다.
- degree centrality (연결중심성): 한 노드에 연결된 모든 간선의 갯수. 네트워크의 중심성 정도를 판단하는 방법.
- page rank: 여태까지 등장한 중심성 알고리즘 중에 가장 성공한 알고리즘이라는데... 고유벡터 중심성의 변형인 Katz 중심성의 변형이라고 한다. 한마디로 끝판왕... Katz 중심성에선 한 노드의 중요성이 그와 연결된 다른 노드들에게도 전파되는 특징이 있다. 그러나 한 노드가 비정상적으로 중요하게 계산될 경우, 그 주변의 노드들도 함께 중요하게 계산 되는 편파적인? 계산이 나올 수 있다. 이러한 문제를 해결한 중심성이라고 한다.
- closeness centrality (근접중심성): 중요한 노드일 수록 다른 노드까지의 거리가 짧다는 이론을 근거로 계산함.
- 그 외에도 수많은 중심성 척도가 있다 (참고: bab2min.tistory.com/554)
4. 중심성 계산 결과
어떤 중심성 계산을 하느냐에 따라 중요 인물의 순위가 바뀌는게 참 신기하다.
1위 2위는 번갈아가면서 나온다는게 신기...
네트워크 이론을 좀 더 깊게 공부해보고 싶어졌다!
데이터분석도 재밌지만 네트워크를 통한 데이터분석과 상관관계 확인도 매우 재밌는듯!
근데 주인공들이 둘 다 왜이렇게 억울하게 생긴거지....