Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- GNN
- 그리드분할
- 도커 레이어
- geopandas
- GIS
- 귀여운고래
- 패치분할
- 데이터입수
- python최단거리
- 도커
- docker
- pyvista
- 이미지빌드
- 3d데이터
- 동명이인찾기
- 폴더조사
- 지하철역좌표
- 3d
- STL
- osmnx
- 좌표거리
- graph
- 컨테이너
- 파이썬
- GCN
- 알고리즘
- Python
- MESH
- geojson
- Set
Archives
- Today
- Total
이것저것 기록
[python] NetworkX를 이용한 왕좌의 게임 등장인물 네트워크 분석 본문
왕좌의 게임이라는 미드를 한 번도 본적은 없는데, 외국에선 이 왕좌의 게임 내 인물 관계도를 네트워크 분석 예제로 많이 사용하는 듯 하여 자료를 구해봤다.
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위는 번갈아가면서 나온다는게 신기...
네트워크 이론을 좀 더 깊게 공부해보고 싶어졌다!
데이터분석도 재밌지만 네트워크를 통한 데이터분석과 상관관계 확인도 매우 재밌는듯!
근데 주인공들이 둘 다 왜이렇게 억울하게 생긴거지....
'코린이 > 실무를 위한 코딩 기록' 카테고리의 다른 글
[python, GIS] OSMnx로 OSM 지도를 그래프로 불러오는 방법 (1) | 2020.11.04 |
---|---|
[python, GIS] OSMnx을 이용한 성남시 도로망 분석 및 시각화 (2) | 2020.11.03 |
[python] NetworkX를 사용해서 데이터분석 및 시각화 해보기 (5) | 2020.11.02 |
[python, folium] 서울 따릉이 대여소 (x,y)좌표 변환 및 지도 시각화 (1) | 2020.10.09 |
[python] 파이썬에서 shape파일을 불러오는 여러 방법들 및 활용 (0) | 2020.09.24 |
Comments