우리 주변에는 많은 복잡계(Complex System)이 있다.
사회는 70억 인구로 구성된 복잡계이다.
통신 시스템은 전자 장치로 구성된 복잡계이다.
그 밖에도, 정보와 지식, 뇌, 신체 역시 복잡계로 생각할 수 있다.
이런 복잡계가 가진 공통적인 특성은 무엇일까?
-> 구성 요소 간의 복잡한 상호작용이다.
이런 복잡계를 어떻게 표현할까?
-> 정답은 그래프(Graph) 이다.
복잡계는 구성 요소들 간의 상호작용으로 이루어진다.
상호작용을 표현하기 위한 수단으로그래프가 널리 사용된다.
복잡계를 이해하고, 복잡계에 대한 정확한 예측을 하기 위해서는
복잡계 이면에 있는 그래프에 대한 이해가 반드시 필요하다.
그래프를 공부함으로써 복잡계가 등장하는 수많은 분야에 활용할 수 있다.
전산학, 물리학, 생물학, 화학, 사회과학 등이 그 예시이다.
트위터에서의 공유(Retweet) 관계를 분석하여, 각 사용자의 정치적 성향을 알 수 있을까?
단백질의 상호작용을 분석하여 단백질의 역할을 알아낼 수 있을까?
방향이 없는 그래프(Undirected Graph) vs 방향이 있는 그래프(Directed Graph)
가중치가 없는 그래프(Unweighted Graph) vs 가중치가 있는 그래프(Weighted Graph)
동종 그래프(Unpartitle Graph) vs 이종 그래프(Bipartite Graph)
그래프(Graph)는 정점 집합과 간선 집합으로 이루어진 수학적 구조이다.
정점의 이웃(Neighbor)은 그 정점과 연결된 다른 정점을 의미한다.
방향성이 있는 그래프에서는 나가는 이웃과 들어오는 이웃을 구분한다.
import networkx as nx # NetworkX
import numpy as np # Numpy
import matplotlib.pyplot as plt
#그래프 초기화
print("#### Graph Init ####")
G = nx.Graph() # 방향성이 없는 그래프 초기화
DiGraph = nx.DiGraph() # 방향성이 있는 그래프 초기화
# 정점을 추가하고, 정점의 수를 세고, 목록을 반환
G.add_node(1) # 정점 1 추가
print("num of nodes in G : " + str(G.number_of_nodes())) # 정점의 수
print(str(G.nodes)) # 정점의 목록
# 간선을 추가
G.add_edge(1, 2) # 정점 1과 2사이에 간선 추가
print(str(G.edges))
#그래프 시각화
pos = nx.spring_layout(G) # 정점의 위치 결정
im = nx.draw_networkx_nodes(G, pos, node_color = "red", node_size = 100) # 색과 크기 지정
nx.draw_networkx_edges(G, pos) # 간선 출력
nx.draw_networkx_labels(G, pos, font_size=10, font_color="black)
plt.show()
방향성이 없는 경우
방향성이 있는 경우
정점 수 X 정점 수 크기의 행렬
방향성이 없는 경우
방향성이 있는 경우
# 그래프를 인접 리스트로 저장
nx.to_dict_of_lists(G)
# 그래프를 간선 리스트로 저장
nx.to_edgelist(G)
# 그래프를 인접 행렬(일반 행렬)로 저장
nx.to_numpy_array(G)
# 그래프를 인접 행렬(희소 행렬)로 저장
nx.to_scipy_sparse_matrix(G)
임의의 두 정점 사이에 간선이 존재하는지 여부는 동일한 확률 분포에 의해 결정
에르되스-레니 랜덤 그래프 는
정점 와 사이의 경로(Path)는 아래 조건을 만족하는 정점들의 순열(Sequence)이다.
경로의 길이는 해당 경로 상에 놓이는 간선의 수로 정의된다.
정점 와 의 사이의 거리(Distance)는 와 사이의 최단 경로의 길이이다.
그래프의 지름(Diameter)은 정점 간 거리의 최댓값이다.
임의의 두 사람을 골랐을 때, 몇 단계의 지인을 거쳐 연결되어 있을까?
여섯 단계 분리(Six Degrees of Separatation) 실험
MSN 메신저 그래프에서는 어떨까?
이러한 현상을 작은 세상 효과(Small-world Effect)라고 부른다.
작은 세상 효과는 높은 확률로 랜덤 그래프에도 존재한다.
하지만 모든 그래프에서 작은 세상효과가 존재하는 것은 아니다.
정점의 연결성(Degree)은 그 정점과 연결된 간선의 수를 의미한다.
정점 의 연결성은 해당 정점의 이웃들의 수와 같다.
보통 정점 의 연결성은 v 혹은 로 적는다.
정점의 나가는 연결성(Out Degree)은 그 정점에서 나가는 간선의 수를 의미
정점의 들어오는 연결성(In Degree)은 그 정점으로 들어오는 간선의 수를 의미
실제 그래프의 연결성 분포는 두터운 꼬리(Heavy Tail)을 갖는다.
즉, 연결성이 매우 높은 허브(Hub) 정점이 존재함을 의미
랜덤 그래프의 연결성 분포는 높은 확률로 정규분포와 유사
실제 그래프에는 거대 연결 요소(Giant Connected Component)가 존재
거대 연결 요소는 대다수의 정점을 포함
MSN 메신저 그래프에는 99.9%의 정점이 하나의 거대 연결 요소에 포함
랜덤 그래프에도 높은 확률로 거대 연결 요소(Giant Connected Component)가 존재한다.
군집(Community)이란 다음 조건들을 만족하는 정점들의 집합니다.
수학적으로 엄밀한 정의는 아니다.
지역적 군집 계수(Local Clustering Coefficient)는 한 정점에서 군집의 형성 정도를 측정.
정점 의 지역적 군집 계수는 정점 의 이웃 쌍 중 간선으로 직접 연결된 것의 비율을 의미
정점 의 지역적 군집 계수를 로 표현
연결성이 0인 정점에서는 지역적 군집게수가 정의되지 않는다.
지역적 군집계수가 군집이랑 어떻게 연결되는 것일까?
전역 군집 계수(Global Clustering Coefficient)는 전체 그래프에서 군집의 형성 정도를 측정
그래프 의 전역 군집 계수는 각 정점에서의 지역적 군집 계수의 평균이다.
단, 지역적 군집계수가 정의되지 않은 정점은 제외한다.
실제 그래프에서는 군집 계수가 높다. 즉 많은 군집이 존재한다.
동질성(Homophily)
전이성(Transitivity)
랜덤 그래프에서는 지역적 혹은 전역 군집 계수가 높지 않다.