復雜網絡中常常需要將得到的關系對(圖一)轉換為鄰接矩陣,并存儲為csv格式。本文將介紹兩方法來進行處理:方法一是構建數據框賦予值。方法二是利用pivot () 函數將一維表轉換為二維表。本文所采用的例子為有向加權網絡。
首先我們的原始數據為關系對(圖一):
?因此可以看到節(jié)點列為node1和node2,權重列為weight。接下來轉換為鄰接矩陣。
方法一:構建數據框并賦予值
原理:這個方法是提取出列作為節(jié)點,然后進行對應的值輸入,形成鄰接矩陣。
代碼:
import pandas as pd
import numpy as np
#導入你的數據
data = pd.read_csv('./yourdata.csv')
vals = np.unique(data[['origin_x', 'origin_y']]) # 同時取出兩列,作為節(jié)點
df = pd.DataFrame(0, index=vals, columns=vals)
f = df.index.get_indexer
df.values[f(data.origin_x), f(data.origin_y)] = 1
print(df)
輸出結果:
方法二:pivot函數
原理:pivot()函數是python中自帶的函數,可以直接使用,非常容易理解。函數的三個參數為:
index:轉換后鄰接矩陣的行索引。在本例中為node1。
columns:轉換后鄰接矩陣的列。在本例中為node2.
values:鄰接矩陣的權重。如果沒有權重時可以不寫這個參數。在本例中為weight。
代碼:
import pandas as pd
import numpy as np
#導入你的數據
data = pd.read_csv('./yourdata.csv')
#轉換為鄰接矩陣用pivot()
df = data.pivot(index='node1',columns='node2',values='weight')
#index為行索引,columns為列索引,values是矩陣中填充的值
df = df.reset_index()
df.fillna(0,inplace=True)
print(df)
得到的結果:
文章來源:http://www.zghlxwxcb.cn/news/detail-404547.html
對于此方法來說,它是根據節(jié)點的值形狀變化的,第一種方法一定會形成一個對稱的鄰接矩陣。而第二種方法則是相當于將一維表轉換為二維表。因此當節(jié)點2和其他節(jié)點無交流時,則直接不會顯示。文章來源地址http://www.zghlxwxcb.cn/news/detail-404547.html
到了這里,關于python | 復雜網絡:將關系對轉換為鄰接矩陣(常規(guī)方法以及pivot函數)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!