簡體   English   中英

python graph-tool加載csv文件

[英]python graph-tool load csv file

我正在將csv文件中的有向加權圖加載到python中的圖形工具圖中。 輸入csv文件的組織是:

1,2,300

2,4,432

3,89,1.24

...

線的第一個兩個條目標識邊的源和目標,第三個數是邊的權重。

目前我正在使用:

g = gt.Graph()
e_weight = g.new_edge_property("float")
csv_network = open (in_file_directory+ '/'+network_input, 'r')
csv_data_n = csv_network.readlines()
for line in csv_data_n:
    edge = line.replace('\r\n','')
    edge = edge.split(delimiter)
    e = g.add_edge(edge[0], edge[1])
    e_weight[e] = float(edge[2])

然而,加載數據需要很長時間(我有1000萬個節點的網絡,大約需要45分鍾)。 我試圖通過使用g.add_edge_list來加快速度,但這僅適用於未加權的圖形。 有什么建議如何讓它更快?

圖表工具的郵件列表已經回答了這個問題:

http://lists.skewed.de/pipermail/graph-tool/2015-June/002043.html

簡而言之,您應該使用函數g.add_edge_list(),如您所說,並通過數組接口單獨放置權重以獲取屬性映射:

e_weight.a = weight_list

權重列表應與傳遞給g.add_edge_list()的邊緣具有相同的順序。

我建議你嘗試使用csv庫獲得的性能。 此示例返回包含3個參數列表的edge

import csv

reader = csv.reader(open(in_file_directory+ '/'+network_input, 'r'), delimiter=",")

for edge in reader:
    if len(edge) == 3:
        edge_float = [float(param) for param in edge]

所以你會得到以下工作......

edge_float = [1.0, 2.0, 300.0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM