syun_nissi
@syun_nissi (syun nissi)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

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()

出力結果

2020_11_14_13_45_42_knock55_.py_6_Visual_Studio_Code.png

プログラムは正常に作動しますが、わからないところがあります。お分かりの方がいましたらご教示いただけますと幸いです。

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

No Answers yet.

Your answer might help someone💌