이것저것 기록

[python] NetworkX를 이용한 왕좌의 게임 등장인물 네트워크 분석 본문

코린이/실무를 위한 코딩 기록

[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)

asoiaf-all-edges.csv dataframe
asoiaf-all-nodes.csv dataframe

 

 

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. 중심성 계산 결과

 

betweenness centrality
degree centrality
page rank
closeness centrality

어떤 중심성 계산을 하느냐에 따라 중요 인물의 순위가 바뀌는게 참 신기하다.

1위 2위는 번갈아가면서 나온다는게 신기...

네트워크 이론을 좀 더 깊게 공부해보고 싶어졌다! 

데이터분석도 재밌지만 네트워크를 통한 데이터분석과 상관관계 확인도 매우 재밌는듯! 

 

 

 

Jon Snow
Tyrion Lannister

근데 주인공들이 둘 다 왜이렇게 억울하게 생긴거지....

 

 

Comments