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に設定されると、格子とランダムグラフであるグラフを生成することができる.
ワッツstrogatzグラフでは、ショートカットが形成され、平均最短距離は一般的に小さな世界のプロパティを満たしています.
ws = nx.watts_strogatz_graph(10,5,0.05)
pos = nx.spring_layout(ws)
draw_metrics(ws, pos)

アルバート湖グラフ


barab‐si si‐siグラフは,大きな確率を持つ既存頂点に高い確率を持つ新しいエッジを加えることにより頂点が頂点に成長するスケールフリーグラフである.barab‐ξsiアルバート湖グラフを生成するアルゴリズムは,m頂点から成る完全グラフkmから始まる.新しい頂点は完全なグラフに加えられます、そして、エッジはその頂点から彼らの各々の頂点にすでに存在します.
ba = nx.barabasi_albert_graph(10,2)
pos = nx.spring_layout(ba)
draw_metrics(ba, pos)

結論


密度とクラスタ係数を測定するために,watts‐strogatzとbarab‐ge si‐アルバート湖グラフを生成した.様々な他の複雑なネットワークを生成することが可能であるので、以下のリンクを参照してグラフの特性を理解することは容易である.

リンク


Networkx: Graph generators