2017-03-02 141 views
5

我是使用Python處理圖形的新手段:NetworkX。直到現在我已經使用了Gephi。有標準步驟(但不是唯一可能的)是:從DataFrame加載屬性和邊緣到NetworkX的節點

  1. 從表格/電子表格加載節點信息;其中一列應該是ID,其餘的是關於節點的元數據(節點是人,所以性別,羣體......通常用於着色)。像:

    id;NormalizedName;Gender 
    per1;Jesús;male 
    per2;Abraham;male 
    per3;Isaac;male 
    per4;Jacob;male 
    per5;Judá;male 
    per6;Tamar;female 
    ... 
    
  2. 然後從一個表/電子表格還加載的邊緣上,使用相同的名稱用於節點,因爲它是在節點的電子表格的列ID與通常的四列(目標,源,體重,類型):

    Target;Source;Weight;Type 
    per1;per2;3;Undirected 
    per3;per4;2;Undirected 
    ... 
    

這是兩個dataframes,我已經和我想在Python加載。閱讀有關NetworkX,似乎是不太可能的兩個表(一個節點,一個是邊緣)裝載到同一張圖,我不知道什麼是最好的辦法:

  1. 我應該創建只有來自DataFrame的節點信息的圖形,然後添加(附加)來自其他DataFrame的邊緣?如果是這樣,因爲nx.from_pandas_dataframe()期望有關邊緣的信息,我想我不應該使用它來創建節點...我應該只是將信息作爲列表傳遞?

  2. 我是否應該僅使用DataFrame中的邊緣信息創建圖形,然後將其他DataFrame中的信息添加到每個節點作爲屬性?有沒有比迭代DataFrame和節點更好的方法呢?

回答

8

使用nx.from_pandas_dataframe創建從邊緣表中的加權圖:

import networkx as nx 
import pandas as pd 

edges = pd.DataFrame({'source' : [0, 1], 
         'target' : [1, 2], 
         'weight' : [100, 50]}) 

nodes = pd.DataFrame({'node' : [0, 1, 2], 
         'name' : ['Foo', 'Bar', 'Baz'], 
         'gender' : ['M', 'F', 'M']}) 

G = nx.from_pandas_dataframe(edges, 'source', 'target', 'weight') 

使用set_node_attributes然後添加節點從字典屬性:

nx.set_node_attributes(G, 'name', pd.Series(nodes.name, index=nodes.node).to_dict()) 
nx.set_node_attributes(G, 'gender', pd.Series(nodes.gender, index=nodes.node).to_dict()) 

或者遍歷圖形以添加節點屬性:

for i in sorted(G.nodes()): 
    G.node[i]['name'] = nodes.name[i] 
    G.node[i]['gender'] = nodes.gender[i] 
+0

太棒了,謝謝!我的節點列表還包括一些有時候我不需要的節點,所以我做的是首先製作一個來自邊緣的所有節點名稱列表,並使用以下信息過濾節點表: 'entities_edges =排序(列表(集(邊緣[ 「目標」] tolist()+邊緣[ 「源」] tolist()))); nodes = pd.read_csv(input_folder + file_nodes,encoding =「utf-8」,sep =「\ t」); nodes = nodes [nodes ['id']。isin(entities_edges)];' 然後我遵循你所說的。你怎麼看待這件事?非常感謝您的回答! –

+0

第一次看起來似乎正確。您可以隨後在Gephi內部過濾它們,因爲它們的度數將爲零 –

+0

如果對'set_node_attributes'使用字典方法,則不需要擔心'entities_edges'中不包含的節點。隨後可以用'G.remove_nodes_from(nx.isolates(G))'從圖中刪除未連接的節點。 – harryscholes

相關問題