从 csv 文件中在 networkx 中创建边
Create edges in networkx out of csv-File
本人从事经济学工作,编程方面的新手,所以请原谅我缺乏技术知识。
我m using iPython 2.7 and I want to analyze a production system as network.
Therefore I
我正在尝试使用 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)
非常感谢所有花时间回复的人!
我看到的算法应该是这样的:
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')]
Maybe you had problems reading the rows because you did not specify the delimiter.
本人从事经济学工作,编程方面的新手,所以请原谅我缺乏技术知识。
我m using iPython 2.7 and I want to analyze a production system as network.
Therefore I
我正在尝试使用 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)
非常感谢所有花时间回复的人!
我看到的算法应该是这样的:
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')]
Maybe you had problems reading the rows because you did not specify the delimiter.