[英]How to create a graph in Python using a CSV File data by graph-tool?
[英]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.