Watts-Strogatzモデル NetworkX

Watts-Strogatzモデル

Watts-Strogatzモデルを使ってランダムなグラフを作成し、その次数分布をグラフ化してみましょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import networkx as nx
import matplotlib.pyplot as plt

# Watts-Strogatzモデルによるグラフの生成
n = 100 # ノード数
k = 4 # 各ノードの近傍ノード数
p = 0.1 # エッジの再接続確率

G = nx.watts_strogatz_graph(n, k, p)

# 次数分布の取得
degrees = [G.degree(node) for node in G.nodes()]

# 次数分布のグラフ化
plt.hist(degrees, bins='auto', alpha=0.7, color='skyblue', edgecolor='black')
plt.xlabel('Degree')
plt.ylabel('Frequency')
plt.title('Degree Distribution of a Watts-Strogatz Graph')
plt.show()

このコードでは、Watts-Strogatzモデルを使用して100個のノードを持つランダムなグラフを生成しています。

その後、各ノードの次数(接続数)を取得し、次数分布ヒストグラムで描画しています。

次数分布はネットワークの特性を示す重要な指標の1つです。

これにより、ノードがどれだけ他のノードと接続しているかの様子を可視化することができます。

ソースコード解説

このコードは、PythonのNetworkXライブラリMatplotlibを使用して、Watts-Strogatzモデルに基づくランダムなグラフを生成し、その次数分布を可視化しています。

1. ライブラリのインポート:

1
2
import networkx as nx
import matplotlib.pyplot as plt
  • networkxはグラフ理論や複雑ネットワークの作成や操作を行うためのライブラリです。
  • matplotlib.pyplotはグラフの描画に使用されます。

2. Watts-Strogatzモデルによるグラフの生成:

1
2
3
4
5
n = 100  # ノード数
k = 4 # 各ノードの近傍ノード数
p = 0.1 # エッジの再接続確率

G = nx.watts_strogatz_graph(n, k, p)
  • nx.watts_strogatz_graph(n, k, p)はWatts-Strogatzモデルに基づいてランダムなグラフを生成します。
  • nはノード数、kは各ノードの近傍ノード数pはエッジの再接続確率を表します。

3. 次数分布の取得:

1
degrees = [G.degree(node) for node in G.nodes()]
  • G.degree(node)はネットワーク内の各ノードの次数(接続数)を取得します。
  • G.nodes()はグラフ内のすべてのノードを返します。
    これを利用して各ノードの次数をリストに収集します。

4. 次数分布のグラフ化:

1
2
3
4
5
plt.hist(degrees, bins='auto', alpha=0.7, color='skyblue', edgecolor='black')
plt.xlabel('Degree')
plt.ylabel('Frequency')
plt.title('Degree Distribution of a Watts-Strogatz Graph')
plt.show()
  • plt.hist()は与えられたデータ(degrees)のヒストグラムを作成します。
  • bins='auto'は適切なビンの数を自動的に決定します。
  • alphacoloredgecolorヒストグラムのスタイルを設定します。
  • plt.xlabel()plt.ylabel()plt.title()はそれぞれx軸のラベル、y軸のラベル、タイトルを設定します。
  • plt.show()はグラフを表示します。

これにより、Watts-Strogatzモデルに基づくランダムグラフの次数分布が可視化されます。

次数分布は、ネットワーク内の各ノードが持つ接続の数を表し、ネットワークの構造を理解するのに役立ちます。