python graph-tool加载csv文件

时间:2015-06-27 10:45:18

标签: python csv graph graph-tool

我正在将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来加快速度,但这仅适用于未加权的图形。有什么建议如何让它更快?

2 个答案:

答案 0 :(得分:4)

图表工具的邮件列表中已经回答了这个问题:

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

简而言之,您应该使用函数g.add_edge_list(),如您所说,并分别放置权重 通过属性映射的数组接口:

e_weight.a = weight_list

权重列表应与您传递给的边缘具有相同的顺序 g.add_edge_list()。

答案 1 :(得分:0)

我建议您尝试使用csv库获得的性能。此示例返回edge,其中包含3个参数的列表。

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]