Python NetworkX csv边缘列表结构

Python NetworkX csv边缘列表结构,python,csv,networkx,Python,Csv,Networkx,是否有将csv/txt中的边添加到NetworkX的标准结构?我已经阅读了文档,并尝试使用read_edgelist('path.csv')和add_edges\u from('path.csv'),但收到的错误是,我的数据无法转换为字典,并且“Edge tuple C可以是2元组或3元组”。我已经用几种方法重新格式化了我的数据样本,以测试不同的结构,包括列表列表和元组列表、删除空白以及在每行中创建一个数字列表,但没有成功。以下是我的一些样本数据: user_id,cluster_moves 1

是否有将csv/txt中的边添加到NetworkX的标准结构?我已经阅读了文档,并尝试使用
read_edgelist('path.csv')
add_edges\u from('path.csv')
,但收到的错误是,我的数据无法转换为字典,并且“Edge tuple C可以是2元组或3元组”。我已经用几种方法重新格式化了我的数据样本,以测试不同的结构,包括列表列表和元组列表、删除空白以及在每行中创建一个数字列表,但没有成功。以下是我的一些样本数据:

user_id,cluster_moves
11011,"[[86, 110], [110, 110]]"
2139671,"[[89, 125]]"
3945641,"[[36, 73], [73, 110], [110, 110]]"
10024312,"[[123, 27], [27, 97], [97, 97], [97, 97], [97,110]]"
14270422,"[[0, 110], [110, 174]]"
14283758,"[[110, 184]]"
14373703,"[[35, 97], [97, 97], [97, 97], [97, 17], [17,58]]"
其目的是创建在簇之间(或簇内)移动的轨迹网络图。每个列表都是集群内或集群之间的移动,例如,
[[0,110],[110174]
是从集群
0->110->174
移动。有没有办法格式化我的数据,使networkx能够读取它

我测试数据时使用的快速示例代码:

import networkx as nx
import matplotlib.pyplot as plt

g = nx.Graph()
edges = g.add_edges_from('path.csv')

nx.draw(g)
plt.draw
plt.show()
编辑

在读取
networkx
时,是否可以将边权重添加到此数据结构,然后根据边的计数/频率调整权重?我想这样做,以便我可以将频率/计数较高的边可视化为另一种颜色/线宽。使用下面的答案,我尝试使用
g.add_weighted_edges_from()
并使用
weight=1
作为属性,而不是使用
g.add_edges_from()
,但这没有正常工作。我也尝试过使用它,但运气不佳:

for u,v,d in g.edges():
    d['weight'] = 1
g.edges(data=True)
edges = g.edges()
weights = [g[u][v]['weight'] for u,v in edges]

首先,您的数据是无效的
csv
文件,从

带有嵌入逗号或双引号字符的字段必须加引号

这意味着您应该使用双引号来引用您的列表:

user_id,cluster_moves
11011,"[[86, 110], [110, 110]]"
2139671,"[[89, 125]]"
3945641,"[[36, 73], [73, 110], [110, 110]]"
10024312,"[[123, 27], [27, 97], [97, 97], [97, 97], [97,110]]"
14270422,"[[0, 110], [110, 174]]"
14283758,"[[110, 184]]"
14373703,"[[35, 97], [97, 97], [97, 97], [97, 17], [17,58]]"
您可以使用
csv
模块读取此文件,然后使用
eval()
将字符串转换为列表,并使用
add\u edges\u from
创建网络图:

import csv
import networkx as nx
import matplotlib.pyplot as plt

g = nx.Graph()
for row in csv.reader(open('ooo.csv', 'r')):
    if '[' in row[1]:       #
        g.add_edges_from(eval(row[1]))

nx.draw(g)
plt.draw
plt.show()

啊,我知道问题出在哪里了。我刚刚从df快速复制过来,它没有双引号。刚刚在我的csv上测试过,效果非常好,谢谢!麦迪,我在这上面添加了一个快速编辑,询问如何为这些边添加权重。我在第二个问题中问了这个问题,但到目前为止还没有得到任何答案()。我尝试使用
g.add_weighted_edges_from()
并使用
weight=1
作为属性,但我在这方面没有任何运气。