0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

二つの有向グラフを結合させる

Posted at

#BA Modelの生成
グラフをpythonのnetworkxで生成する。
ここでそのグラフはスケールフリーなグラフである。
スケールフリーとは次数分布がべき乗則に従うネットワークである。
生成はBarabási–Albert Model(BA Model)を採用する。

n = 10000 #全ノード数
m = 3 #新たに加えるノードのリンク数

G1 = nx.barabasi_albert_graph(n, m)
G2 = nx.barabasi_albert_graph(n, m)

しかしこれは無向グラフしか生成できない。

#有向グラフ化
今、生成したグラフG1、G2のエッジリストをテキストファイルとして保存する。

nx.write_edgelist(G1, 'G1.txt', data=False)
nx.write_edgelist(G2, 'G2.txt', data=False)

このテキストファイルを読み込むことで有向グラフ化する。

G1 = nx.read_edgelist('G1.txt', create_using=nx.DiGraph())
G2 = nx.read_edgelist('G2.txt', create_using=nx.DiGraph())

#次数分布
この方法で生成したG1、G2の次数に相関があるか調べる。

G1degree = dict(G1.degree)
G2degree = dict(G2.degree)
G1_value = []
G2_value = []
for key, value in G1degree.items():
    G2_value.append(G2degree['{}'.format(key)])
    G1_value.append(value)
plt.scatter(G1_value, G2_value, s=10)

ダウンロード.png

np.corrcoef(G1_value, G2_value)
#=>array([[1.        , 0.69557497],
#       [0.69557497, 1.        ]])

正の相関があるので
シャッフルして相関をなくす。

node = list(G2.node)
node1 = node.copy()
random.shuffle(node1)
mapping = {k: v for k, v in zip(node, node1)}
G2 = nx.relabel_nodes(G2, mapping)
nx.write_edgelist(G2, 'G2.txt', data=False)

ノードのラベルをシャッフルして相関をなくした実際相関のグラフと相関係数は
ダウンロード (1).png

array([[1. , 0.01120365],
[0.01120365, 1. ]])
よって相関のない二つのグラフが生成できた。
#グラフの結合
networkxにある関数を使い結合する。

G = nx.compose(G1, G2)

これで二つのグラフを結合することができた。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?