从 csv-File 在 networkx 中创建边

Posted

技术标签:

【中文标题】从 csv-File 在 networkx 中创建边【英文标题】:Create edges in networkx out of csv-File 【发布时间】:2016-01-09 23:47:15 【问题描述】:

我从事经济学工作,我是编程新手,所以请原谅我在这里缺乏技术知识。

m using iPython 2.7 and I want to analyze a production system as network. Therefore Im 试图用 csv 文件创建一个网络。 csv 文件包括两列。第一列代表工单,第二列代表工作站。工作站必须是网络的节点。

ORDER_ID;MACHINE_ID;
0;0;
0;1;
1;1;
2;2;
2;3;
2;4;
2;5;
2;6;
2;1;
2;7;
2;2;
3;8;
3;1;
4;9;
5;10;
5;10;
5;5;
5;11;
5;0; 
5;12;

只要订单ID在不同的行中是相同的数字,这些行的节点必须链接为边。订单 ID 更改后,必须检查下一行并将其链接为边。边缘用于更好的分析。我写了一个算法,但是我在选择行项目时遇到了问题。

import networkx as nx
import csv 

g = nx.DiGraph()

with open("Data.csv") as dataSet:
    data = csv.reader()
    for OrderID1 in dataSet:
        OrderID = OrderID[0]
        for MachineID1 in dataSet:
            MachineID = MachineID1[1]
                if OrderID[0][i] == OrderID[0][i+1]:  
                    g.add_edge(MachineID[0][i],MachineID[0][i+1])
                elif OrderID[0][i] != row[0][i+1]: 
                    g.add_edge(row[0][i+1],row[0][i+2])
                else:
                    dataSet.close()

结果必须如下所示:

g.edges()

>>> (0,1),(2,3),(3,4),(4,5),(5,6),(6,1),(1,7),(7,2),(8,1),(10,10),(10,5),(5,11),(11,0),(0,12)

非常感谢所有花时间回复的人!

【问题讨论】:

我认为在第一个 for 循环之后的行中,它应该是 OrderID = OrderID1[1]。另外,我相信您在第二个 for 循环之后对 if 条件的缩进有问题,所以我不知道它的范围是什么(我想它会给您一个错误的缩进错误)。我将发布我看到的算法,然后你可以将它与你打算做的比较。 【参考方案1】:

我看到的算法应该如下:

import csv
import networkx as nx
g = nx.DiGraph()
data_csv = open('Data.csv')
csv_f = csv.reader(data_csv,delimiter=';')
prev_orderID = -1
prev_machineID = -1
for row in csv_f:
    if row[0] == prev_orderID:
        g.add_edge(prev_machineID,row[1])
    prev_orderID = row[0]
    prev_machineID = row[1]
print g.edges()

我已将您提供的样本放入 .csv 文件中,结果与您的预期相同:

[('11', '0'), ('10', '10'), ('10', '5'), ('1', '7'), ('0', '1'), ('0', '12'), ('3', '4'), ('2', '3'), ('5', '11'), ('5', '6'), ('4', '5'), ('7', '2'), ('6', '1'), ('8', '1')]

也许您在读取行时遇到问题,因为您没有指定分隔符。

【讨论】:

非常感谢。有用!!!!你是对的,使用分隔符打开文件。并感谢您的解决方案! 很高兴它有效,您可以勾选答案,以便如果有人遇到类似问题可以知道此答案对您有用。 @大卫科斯

以上是关于从 csv-File 在 networkx 中创建边的主要内容,如果未能解决你的问题,请参考以下文章

如何在networkx python中找到长度等于某个数字的最短路径的节点?

networkx中ax用法

如何从 JSON 数组在 DB 中创建表以在 Spring Boot 中创建 REST API

从包含新操作的python中创建的pb图在c ++中创建图

从 Excel 的下拉列表中检索选定的值(在 C# 中创建)

从 System.Type 在 AppDomain 中创建实例