将具有重复项的_edgelist解析到加权网络?python networkx

将具有重复项的_edgelist解析到加权网络?python networkx,python,networkx,Python,Networkx,我已经编写了一些代码,以便从一些Twitter关系数据的.txt文件中导入edgelist。数据是定向的,包含重复的值。我想将此数据加载到包含边权重的有向图(),但我无法计算出该部分。我正在考虑使用类似于Counter()的方法来计算重复边的数量,但我不确定如何计算该数量并将其包含在图表中 我已经包括了一个.txt文件的示例,以显示我的数据是什么样子的 Sample.txt数据 # twitter data # retrieved at: 07.08.2014 # total number of

我已经编写了一些代码,以便从一些Twitter关系数据的.txt文件中导入edgelist。数据是定向的,包含重复的值。我想将此数据加载到包含边权重的
有向图()
,但我无法计算出该部分。我正在考虑使用类似于
Counter()
的方法来计算重复边的数量,但我不确定如何计算该数量并将其包含在图表中

我已经包括了一个.txt文件的示例,以显示我的数据是什么样子的

Sample.txt数据

# twitter data
# retrieved at: 07.08.2014
# total number of records: 8
# exported by: userXYZ
#
# fields: date, time, source, target
10.12.2013; 02:00; tweeterA; tweeterB
10.12.2013; 02:01; tweeterB; tweeterC
10.13.2013; 02:04; tweeterC; tweeterA
10.13.2013; 02:08; tweeterC; tweeterA
10.13.2013; 02:10; tweeterD; tweeterB
10.13.2013; 02:11; tweeterA; tweeterC
10.13.2013; 02:13; tweeterC; tweeterB
10.13.2013; 02:18; tweeterA; tweeterD
现有代码

import networkx as nx

header = ['date', 'time', 'source', 'target']

data = [{key: value for (key, value) in zip(header, line.strip().split('; '))} for line in open('data.txt') if not line.startswith('#')]

edgelist = []
for i in data:
    edgelist.append(" ".join([
    i['source'],
    i['target']]))

G = nx.parse_edgelist(edgelist,create_using=nx.DiGraph())

nx.draw(G)

我认为,您非常接近,是的,您可以使用
collections.Counter()
。然后,需要通过将权重设置为数据属性,将权重与每条边关联

from collections import Counter
import networkx as nx

edge_counts = Counter((' '.join(line.strip().split('; ')[2:]) for line in open('data.txt') if not line.startswith('#')))

G = nx.parse_edgelist(('%s %d' % edge for edge in edge_counts.items()),
                      data=(('weight',int),),
                      create_using=nx.DiGraph())

# nx.draw(G)

from pprint import pprint
pprint(sorted(G.edges(data=True)))
应该为您提供以下输出:

[('tweeterA', 'tweeterB', {'weight': 1}),
 ('tweeterA', 'tweeterC', {'weight': 1}),
 ('tweeterA', 'tweeterD', {'weight': 1}),
 ('tweeterB', 'tweeterC', {'weight': 1}),
 ('tweeterC', 'tweeterA', {'weight': 2}),
 ('tweeterC', 'tweeterB', {'weight': 1}),
 ('tweeterD', 'tweeterB', {'weight': 1})]