我有一个.txt
文件,有46行,每行代表网络中的一个节点,然后有很多属性。
Example Name; 03.01.194, Luzern, (LU), Test, Attribute, Other Attribute,
Kasdasd Alex; 22.12.1957, in Blabla, (ZH), Bürgerorte, Oeschgen (AG), Zivilstand,
我不确定如何让networkx将其视为节点列表,我想到的一些事情可能会有效,但目前还不行
import pandas as pd
import networkx as nx
nodes = pd.read_csv('final.csv', header=None)
nodes
上面代码的问题是属性用逗号分隔,而不是节点。
另一个尝试,我想打开文件,并逐行添加节点,但卡在G.add_node()
命令
G = nx.Graph()
with open('final.txt') as infile:
for line in infile:
G.add_node()
是两种方法中的一种,或者我应该尝试不同的方法吗?
同样为了进一步分析,networkx是否提供了比较节点属性的可能性,如果它们匹配,是否可以创建加权边缘?
答案 0 :(得分:3)
您可以通过阅读指定分隔符的文件来实现此目的:&#39 ;;'这样第一个元素就是节点键,其余的就是属性。然后使用分隔符','拆分属性字符串。并将返回的列表添加为节点属性。我复制了您在' test.txt'中提供的示例。文件并执行以下代码。
G = nx.DiGraph()
csv_F = csv.reader(open("test.txt"),delimiter=';')
for row in csv_F:
attributes=row[1].split(',')
G.add_node(row[0], attr = attributes)
然后我按如下方式打印节点及其属性:
for n in G.nodes():
print 'Node: ' + str(n)
print 'Atrributes' + str(G.node[n]['attr'])
结果:
节点:Kasdasd Alex
Atrributes:[' 22.12.1957','在Blabla',' (ZH)',' B \ xc3 \ xbcrgerorte',' Oeschgen(AG)',' Zivilstand','']
节点:示例名称
Atrributes:[' 03.01.194','卢塞恩',' (LU)','测试','属性','其他属性',' ']
至于你的问题,networkx提供了这样的功能和更多功能。看一下教程here。