Python을 사용한 그래프 분석 -그래프 생성-

이 기사에서는 복잡한 네트워크와 같은 다양한 유형의 그래프를 생성하고 메트릭을 사용하여 생성된 그래프를 평가하는 방법에 대해 설명합니다. 그래프를 생성하기 전에 필요한 라이브러리를 로드하고 밀도 및 클러스터 계수를 평가하는 함수를 정의합니다.

# Load Module
import networkx as nx
import matplotlib.pyplot as plt

# Define function to quantify Cluster Coefficient 
def draw_metrics(G, pos):
  nodes = nx.draw_networkx_nodes(G, pos, node_size=200,node_color="#00C98D")
  labels = nx.draw_networkx_labels(G, pos)
  edges = nx.draw_networkx_edges(G, pos)
  plt.title(["density:{:.5}".format(nx.density(G)), "clustering coefficient:{:.5}".format(nx.average_clustering(G))])
  plt.axis("off")
  plt.show()


와트 스트로가츠 그래프



Watts-Strogatz 그래프는 모든 꼭지점을 격자의 이웃하는 x 꼭짓점에 가장자리로 연결하고 이 가장자리를 일정 확률에 따라 무작위로 교체하여 생성되는 그래프입니다.
확률을 0으로 설정하면 격자, 1로 설정하면 랜덤 그래프, 0.1 정도로 설정하면 격자와 무작위 그래프.
Watts-Strogatz 그래프에서는 지름길이 형성되고 평균 최단 거리는 일반적으로 small-world 속성을 만족합니다.

ws = nx.watts_strogatz_graph(10,5,0.05)
pos = nx.spring_layout(ws)
draw_metrics(ws, pos)




바라바시 앨버트 그래프



Barabási-Albert 그래프는 차수가 큰 기존 정점에 확률이 높은 새로운 에지를 추가하여 정점이 허브로 성장하는 스케일 프리 그래프입니다. Barabási-Albert 그래프를 생성하는 알고리즘은 m 정점으로 구성된 완전한 그래프 Km으로 시작합니다. 완전한 그래프에 새 정점이 추가되고 해당 정점에서 이미 존재하는 각 정점에 가장자리가 추가됩니다.

ba = nx.barabasi_albert_graph(10,2)
pos = nx.spring_layout(ba)
draw_metrics(ba, pos)




결론



이 기사에서는 밀도 및 클러스터 계수를 측정하기 위해 Watts-Strogatz 및 Barabási-Albert 그래프를 생성했습니다. 그 외 다양한 복잡한 네트워크 생성이 가능하므로 아래 링크를 참고하시면 그래프의 특성을 쉽게 이해하실 수 있습니다.

링크



Networkx: Graph generators

좋은 웹페이지 즐겨찾기