목차
※ 출처 : 그래프 머신러닝 (클라우디오 스타밀레 외, 김기성·장기식 옮김)
※ 이전 글 참고
1. 파이썬 NetworkX 활용
* 특정 노드의 에고 그래프(ego graph)를 그리려면 어떻게 해야할까?
- 근방 노드들을 모두 그릴수도 있지만, 개수가 많은 경우 관계를 파악하기 어려울 수 있기 때문에 아래와 같은 방법이 주로 사용됨
- 근방을 임의로 선택
- 중심성이 높은 근방을 선택
- 지역 군집 계수가 높은 근방을 선택
import numpy as np
import matplotlib.pyplot as plt
plt.rc("font", family="Malgun Gothic")
n_top = round(len(neighbors) * 0.1) # 근방 노드 중 10% 추출
idx = {
"랜덤": np.random.choice(neighbors, n_top ,replace=False), # 임의로 선택
"중심성": stats.loc[neighbors].sort_values("betweenness_centrality", ascending=False).index[:n_top], # 중심성 높은 근방 선택
"지역 군집 계수": stats.loc[neighbors].sort_values("C_i", ascending=False).index[:n_top] # 지역 군집 계수 높은 근방 선택
}
fig, subs = plt.subplots(ncols=3, figsize=(15, 5))
for method, sub in zip(["랜덤", "중심성", "지역 군집 계수"], subs.flatten()):
subgraph = nx.subgraph(G, list(idx[method]) + [5502]) # 부분그래프 추출
nx.draw(subgraph, pos=nx.kamada_kawai_layout(subgraph),
node_size=50, # 노드 크기
node_color=["k"]*n_top+["r"], # 노드 색상(5502번만 red 색상)
width=0.5, # 간선 너비
edge_color="grey", # 간선 색상
ax=sub)
sub.set_title(method) # 제목 설정
2. Gephi 활용
* mtx 파일을 Gephi에서 사용하기 위해 데이터를 Gephi에서 인식할 수 있는 파일 형식(GEXF; Graph Exchange XML Format)으로 내보내야 함
nx.write_gexf(G, "astro_ph.gexf") # GEXF 형식으로 내보내기
2.1. Gephi 실행
① Welcome 화면에서 "Open Graph File"을 클릭
② 위에서 저장한 "astro_ph.gexf" 파일을 선택
오른쪽 위에 있는 [Context] 탭을 통해 16,706개 노드(Nodes)와 121,251개 간선(Edges)으로 구성된 그래프임을 확인 가능합니다. 이제 위에서 NetworkX를 활용해 작업했던 것처럼, 차수가 가장 높은 노드의 에고 그래프를 그리는 작업에 대해 알아보겠습니다.
2.2. 노드 차수 계산
① [Statistics] 탭 ▶ [Network Overview] ▶ "Average Degree"의 [Run] 실행
② 좌측 상단 [Data Laboratory] 탭 ▶ "Degree" 열 클릭하여 내림차순 정렬하여 가장 높은 차수의 노드 Id 확인
2.3. 에고 그래프(Ego graph) 생성
① [Filters] 탭 ▶ [Topology] ▶ "Giant Component" 필터를 아래 Queries로 드래그
② "Ego Network" 필터를 아래 Giant Component의 "subfilter"로 드래그
③ Ego Network를 클릭하여 "Node ID"에 5502 입력하고 "OK" 클릭
2.4. 가시성 개선 : 노드/간선 색상, 노드 크기 변경
* 노드 색상을 모듈성 기준으로, 간선 색상을 단일 색상인 회색으로 변경
* 노드 크기를 차수 기준으로 변경
① [Statistics] 탭 ▶ [Community Detection] 탭 ▶ "Modularity"의 [Run] 실행
② [Appearance] 탭 ▶ [Nodes] 팔레트(Color) 아이콘 ▶ [Partition]에서 "Modularity Class" 선택하고 [Apply] 적용
③ [Edges] 팔레트(Color) 아이콘 ▶ [Unique]에서 회색 선택하고 [Apply] 적용
④ [Nodes] 동심원(Size) 아이콘 ▶ [Ranking]에서 "Degree" 선택하고 Max size에 50 입력
2.5. 가시성 개선 : 레이아웃 변경
* 레이아웃을 Fruchterman Reingold로 변경
① [Layout] 탭 ▶ "Fruchterman Reingold" 선택하고 [Run] 실행
2.6. 가시성 개선 : 노드 라벨 추가
* 노드 라벨을 추가하고, 글자 크기를 차수 기준으로 변경
① 화면 하단 T 아이콘(Show Node Labels) 클릭
② [Appearance] 탭 ▶ [Nodes] TT (Label Size) 아이콘 ▶ [Ranking]에서 "Degree" 선택하고 Min size 0.5, Max size 1 입력
'인공지능 > 그래프' 카테고리의 다른 글
[그래프 ML] 그래프 머신러닝 - 파이썬 NetworkX, node2vec, karateclub (0) | 2024.03.15 |
---|---|
[그래프 ML] 그래프 분석 라이브러리 - 파이썬 NetworkX, SNAP, igraph, graph-tool, NetworKit (0) | 2024.03.14 |
[그래프 ML] 그래프 데이터셋 - NetworkX, Network Repository, SNAP (Stanford Network Analysis Platform), OGB (Open Graph Benchmark) (7) | 2024.03.12 |
[그래프 ML] 그래프 생성 - 파이썬 NetworkX (0) | 2024.03.11 |
[그래프 ML] 그래프 속성 - 파이썬 NetworkX (0) | 2024.03.11 |