2017-12-03 20 views
0
import networkx as nx 
import pandas as pd 

data1 = { 'node1': [1,1,1,2], 
    'node2': [2,3,6,4], 
    'weight': [1,1,1,1], } 
df1 = pd.DataFrame(data1, columns = ['node1','node2','weight']) 

df1.to_csv('training.csv') 

df=pd.read_csv('training.csv') 
G=nx.from_pandas_dataframe(df1,'node1','node2','weight') 
print df1 
Adjtraining = nx.adjacency_matrix(G) 
print Adjtraining.todense()  

出力:networkx

[[0 1 1 0 1] 
[1 0 0 1 0] 
[1 0 0 0 0] 
[0 1 0 0 0] 
[1 0 0 0 0]] 

が、実際の出力は次のようになります。私たちはデータフレームから見ることができるようにノードが1 2をしているため

[[0 1 1 0 0 1] 
[1 0 0 1 0 0] 
[1 0 0 0 0 0] 
[0 1 0 0 0 0] 
[0 0 0 0 0 0] 
[1 0 0 0 0 0]] 

です3 4 & 6.ノード5はノードリストにありません。しかし、それでも隣接行列に含める必要がありますが、networkxでは無視されます。

+0

2質問:1)あなたはtraining.csvを提供することができますか? 2)networkxがノード5の存在を知るべき理由はあるのでしょうか? – Joel

+0

@Joel Oops df1はtraining.csvであることを意図していました。申し訳ありません!私は編集しました。隣接行列では行と列がグラフのノードを表しているため、隣接行列には5行と5列実際には6つのノードがある場合にのみグラフに5つのノードがあるようになります。グラフには5つのノードが存在しない –

答えて

0

ノード5は、エッジリストによってインスタンス化されているため、グラフに表示されません。結果の隣接行列に入れたい場合は、それをグラフに追加することもできます。

G = nx.from_pandas_dataframe(df1, 'node1','node2','weight') 
G.add_node(5) 
adj = nx.adjacency_matrix(G) 
print(adj.todense()) 

[[0 1 1 1 0 0] 
[1 0 0 0 1 0] 
[1 0 0 0 0 0] 
[1 0 0 0 0 0] 
[0 1 0 0 0 0] 
[0 0 0 0 0 0]] 

行列のインデックスは次のとおりです。

print(G.nodes()) 
[1, 2, 3, 6, 4, 5]