2017-12-03 27 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]] 

그러나 실제 출력은해야한다 : 우리가 dataframe에서 볼 수있는 노드가 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는 노드 목록에 없습니다. 그러나 여전히 인접 행렬에 포함되어야하지만 네트워크 x에서는 무시됩니다.

+0

2 질문 : 1) training.csv을 제공 할 수 있습니까? 2) networkx가 노드 5의 존재에 대해 알아야하는 이유가 무엇입니까? – Joel

+0

@Joel Oops df1은 훈련을위한 것이 었습니다 .csv 죄송합니다. 편집했습니다. 인접 행렬에서 행과 열은 그래프의 노드를 나타내므로 인접 행렬에 5 행 5 열 그래프가 5 개의 노드를 가지고있는 것처럼 보일 것입니다. 사실 6 개의 노드가 있습니다. 단지 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]