我正在使用iPython 2.7
,我想將生產系統分析爲網絡。操作列表與計算列
因此,我試圖創建一個網絡出csv-file
。 csv-file
包括兩列。第一列是工單的表示;第二個代表工作站。工單代表模塊。工作站必須是網絡的節點。 繼data.csv
-File:
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,
5,13,
只要OrderID
具有相同的數字,它是一個模塊。所以在這個列表中有五個模塊。創建邊緣的算法是網絡分析的第一部分。該算法在同一模塊中創建邊。該算法的工作原理,這不是我的問題的一部分。以下代碼必須分析模塊中的機器分配。
例如:本機ID
2是OrderID
2.所以,我需要在我的結果解決方案1一部分,但機器ID
2出現在OrderID
2.其實我的代碼的輸出是2 MachineID
在Modul5
10出現兩次兩次,以及。我的代碼需要在最後的for-loop (Analysis)
中添加。我猜這個代碼需要一個if
支票,每Module(OrderID)
增加一個machineID
一次。
由於兩列的相互依賴性,我無法找到解決方案。 我當前的代碼:
#Import Module
import networkx as nx
import csv
#Create Graph
g = nx.DiGraph()
#open File
Data = open("Data.csv")
csv_F = csv.reader(Data,delimiter=',') #open File "data.csv"
Data.next() #skiping first row in file
#Algorithmus for creating Edges
prevOrder = -1
prevMachine = -1
Nodes = [] #creating file for calculate sum of nodes
SumModul = [] #creating file for calculate sum of moduls
for row in csv_F:
if row[0] == prevOrder:
g.add_edge(str(prevMachine),str(row[1]))
prevOrder = row[0]
prevMachine = row[1]
Nodes.append(row[1])
SumModul.append(row[0]) # Add Index to List of Moduls
QuaModul = len(list(set(SumModul))) # Quantity of Moduls
Data.close()
#Node Reuse
print "Quantity of Moduls: "+ str(QuaModul)
#Sort List of Nodes to get Sum of sorted nodes
QuantityNodes = []
for node in g.nodes():
QuantityNodes.append(int(node))
QuantityNodes.sort()
#Analysis
for sortNode in QuantityNodes: #for-loop for nodes
NodeRU = [Nodes.count(str(sortNode))]
for NRU in NodeRU:
print "Node Reuse of Node: " + str(sortNode)
print float(NRU)
print float((float(NRU)*100)/QuaModul)
我期待下面的結果:
Qantity of Moduls: 6
Node Reuse of Node: 0
2.0
33.3333333333
Node Reuse of Node: 1
4.0
66.6666666667
Node Reuse of Node: 2
1.0
16.6666666667
Node Reuse of Node: 3
1.0
16.6666666667
Node Reuse of Node: 4
1.0
16.6666666667
Node Reuse of Node: 5
2.0
33.3333333333
Node Reuse of Node: 6
1.0
16.6666666667
Node Reuse of Node: 7
1.0
16.6666666667
Node Reuse of Node: 8
1.0
16.6666666667
Node Reuse of Node: 10
1.0
16.6666666667
Node Reuse of Node: 11
1.0
16.6666666667
Node Reuse of Node: 12
1.0
16.6666666667
Node Reuse of Node: 13
1.0
16.6666666667
什麼是你的「分佈」的邏輯和你的代碼不清楚:什麼是「g」和「add_edge」?如果你不能顯示一個小的可重複的代碼,我們不能提供幫助。試着簡化你的「計算」要求,因爲這不是你的主要問題,你可能只是想要像「groupby」這樣的東西 – Anzel
@Anzel - 'g'是一個networkx有向圖 - 它是代碼的第5行,而networkx是其中一個標籤。 'add_edge'是最常見的networkx命令之一。不出所料,它爲'g'增添了一個優勢。 – Joel
請原諒我。現在希望它更易於理解。 –