python実践データ分析100本ノックの質問 2
解決したいこと
ノック55に以下のようなコードがあります。
該当するソースコード
import pandas as pd
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
df_w=pd.read_csv("network_weight.csv")
df_p=pd.read_csv("network_pos.csv")
print(df_p)
# A B C D E
# 0 0 0 2 2 1
# 1 0 2 0 2 1
print(df_w)
# A B C D E
# 0 0.639921 0.143353 0.944669 0.521848 0.000000
# 1 0.264556 0.000000 0.456150 0.568434 0.000000
# 2 0.617635 0.612096 0.616934 0.943748 0.000000
# 3 0.000000 0.000000 0.697631 0.060225 0.666767
# 4 0.670638 0.210383 0.000000 0.315428 0.000000
size=10
edge_weights=[]
#エッジの重みのリスト化
for i in range(len(df_w)):
for j in range(len(df_w.columns)):
edge_weights.append(df_w.iloc[i][j]*size)
G=nx.Graph()
#頂点の設定
for i in range(len(df_w.columns)):
G.add_node(df_w.columns[i])
#辺の設定
for i in range(len(df_w.columns)):
for j in range(len(df_w.columns)):
G.add_edge(df_w.columns[i],df_w.columns[j])
#座標の設定
pos={}
for i in range(len(df_w.columns)):
node=df_w.columns[i]
pos[node]=(df_p[node][0],df_p[node][1])
nx.draw(G,pos,with_labels=True,font_size=16,node_size=1000,node_color="k",font_color="w",width=edge_weights)
plt.show()
出力結果
プログラムは正常に作動しますが、わからないところがあります。お分かりの方がいましたらご教示いただけますと幸いです。
1、辺の設定で、for文で変数iとjを使って辺を作成していきますが、出力結果から見ると作成するべき辺は(A,B)(A,C)(A,D)(A,E)(B,C)(B,D)(B,E)(C,D)(C,E)(D,E)かと思いますが、このfor文では下記のようにすべての組み合わせができてしまいます。add_edge関数の働き方によりすべての組み合わせてではなく必要な辺の組み合わせだけ作成されるのでしょうか?
[['A', 'A'], ['A', 'B'], ['A', 'C'], ['A', 'D'], ['A', 'E'], ['B', 'A'], ['B', 'B'], ['B', 'C'], ['B', 'D'], ['B', 'E'], ['C', 'A'], ['C', 'B'], ['C', 'C'], ['C', 'D'], ['C', 'E'], ['D', 'A'], ['D', 'B'], ['D', 'C'], ['D', 'D'], ['D', 'E'], ['E', 'A'], ['E', 'B'], ['E', 'C'], ['E', 'D'], ['E', 'E']]
2、辺の設定でも座標の設定でもrange関数を回す際の変数をdf_wのコラム列にしていますが、本来であればdf_pのコラム列を使うべきかと思うのですが、何故df_wのコラム列を使うのでしょうか?df_pを使っても同じ結果になります。
以上、よろしくお願いいたします。
0