我是使用Python處理圖形的新手段:NetworkX。直到現在我已經使用了Gephi。有標準步驟(但不是唯一可能的)是:從DataFrame加載屬性和邊緣到NetworkX的節點
從表格/電子表格加載節點信息;其中一列應該是ID,其餘的是關於節點的元數據(節點是人,所以性別,羣體......通常用於着色)。像:
id;NormalizedName;Gender per1;Jesús;male per2;Abraham;male per3;Isaac;male per4;Jacob;male per5;Judá;male per6;Tamar;female ...
然後從一個表/電子表格還加載的邊緣上,使用相同的名稱用於節點,因爲它是在節點的電子表格的列ID與通常的四列(目標,源,體重,類型):
Target;Source;Weight;Type per1;per2;3;Undirected per3;per4;2;Undirected ...
這是兩個dataframes,我已經和我想在Python加載。閱讀有關NetworkX,似乎是不太可能的兩個表(一個節點,一個是邊緣)裝載到同一張圖,我不知道什麼是最好的辦法:
我應該創建只有來自DataFrame的節點信息的圖形,然後添加(附加)來自其他DataFrame的邊緣?如果是這樣,因爲nx.from_pandas_dataframe()期望有關邊緣的信息,我想我不應該使用它來創建節點...我應該只是將信息作爲列表傳遞?
我是否應該僅使用DataFrame中的邊緣信息創建圖形,然後將其他DataFrame中的信息添加到每個節點作爲屬性?有沒有比迭代DataFrame和節點更好的方法呢?
太棒了,謝謝!我的節點列表還包括一些有時候我不需要的節點,所以我做的是首先製作一個來自邊緣的所有節點名稱列表,並使用以下信息過濾節點表: 'entities_edges =排序(列表(集(邊緣[ 「目標」] tolist()+邊緣[ 「源」] tolist()))); nodes = pd.read_csv(input_folder + file_nodes,encoding =「utf-8」,sep =「\ t」); nodes = nodes [nodes ['id']。isin(entities_edges)];' 然後我遵循你所說的。你怎麼看待這件事?非常感謝您的回答! –
第一次看起來似乎正確。您可以隨後在Gephi內部過濾它們,因爲它們的度數將爲零 –
如果對'set_node_attributes'使用字典方法,則不需要擔心'entities_edges'中不包含的節點。隨後可以用'G.remove_nodes_from(nx.isolates(G))'從圖中刪除未連接的節點。 – harryscholes