在图形工具中导入txt文件

时间:2017-01-12 17:57:16

标签: python import graph-tool

我有一个定向加权网络存储在 txt 文件中,作为3个元素的列表:

node1 node2 weight
node1 node3 weight
...

例如三元组:

1 10 50

表示我在节点1和节点10之间获得了权重为50的边缘。

有人可以详细解释如何将其导入图表工具以使用SBM执行社区检测分析。

非常感谢。

2 个答案:

答案 0 :(得分:1)

我认为对于加权图表,您希望使用PropertyMaps(https://graph-tool.skewed.de/static/doc/quickstart.html#sec-property-maps)?

要导入文件,您将要使用文件对象(https://docs.python.org/3/tutorial/inputoutput.html)。

总之,您需要的代码如下:

#imports the graph-tools library
from graph_tool.all import *

#opens your file in mode "read"
f = open("your_file.txt","r")
#splits each line into a list of integers
lines = [[int(n) for n in x.split()] for x in f.readlines()]
#closes the file
f.close()

#makes the graph
g = Graph()
#adds enough vertices (the "1 + " is for position 0)
g.add_vertex(1 + max([l[0] for l in lines] + [l[1] for l in lines]))

#makes a "property map" to weight the edges
property_map = g.new_edge_property("int")
#for each line
for line in lines:
    #make a new edge
    g.add_edge(g.vertex(line[0]),g.vertex(line[1]))
    #weight it
    property_map[g.edge(g.vertex(line[0]),g.vertex(line[1]))] = line[2]

答案 1 :(得分:1)

graph_tool.load_graph_from_csv(file_name, csv_options={'delimiter': ' ', 'quotechar': '"'}) 

这将帮助您使用delimiter = space加载一个csv文件。我仍在尝试阅读有关如何将权重与边缘相关联的文档:https://graph-tool.skewed.de/static/doc/graph_tool.html?highlight=load#graph_tool.Graph.load