161 lines
4.1 KiB
Python
161 lines
4.1 KiB
Python
__author__ = 'stubbfel'
|
|
import csv
|
|
def readCSV(fileName):
|
|
with open(fileName, newline='\n') as csvFile:
|
|
reader = csv.reader(csvFile)
|
|
csvTable = []
|
|
for row in reader:
|
|
csvTable.append(row)
|
|
return csvTable
|
|
|
|
def writeCSV (fileName,table):
|
|
with open(fileName, 'w', newline='\n') as csvFile:
|
|
writer = csv.writer(csvFile)
|
|
writer.writerows(table)
|
|
|
|
def aggrateRow(row,discardIndex):
|
|
colCount = 0
|
|
colSum = 0
|
|
workcopy = row[:]
|
|
if discardIndex >= 0:
|
|
del workcopy[discardIndex]
|
|
|
|
for col in workcopy:
|
|
colCount += 1
|
|
if is_number(col):
|
|
colSum += float(col)
|
|
return colSum / colCount
|
|
|
|
def aggrateCol(colIndex, table):
|
|
rowCount = 0
|
|
rowSum = 0
|
|
|
|
for row in table:
|
|
if colIndex < len(row):
|
|
str = row[colIndex]
|
|
if is_number(str):
|
|
rowSum += float(str)
|
|
rowCount += 1
|
|
|
|
mean = rowSum / rowCount
|
|
tmVar = 0
|
|
for row in table:
|
|
if colIndex < len(row):
|
|
str = row[colIndex]
|
|
if is_number(str):
|
|
tmVar += (float(str)-mean)**2
|
|
|
|
var = (tmVar / rowCount)**.5
|
|
return mean, var
|
|
|
|
def aggrateCSVFile(files):
|
|
for fileName in files:
|
|
csvTable = readCSV(fileName)
|
|
firstRow = False
|
|
for row in csvTable:
|
|
if firstRow:
|
|
row.append(str(int(aggrateRow(row, 0))))
|
|
else:
|
|
row.append('Aggreate('+fileName+')')
|
|
firstRow = True
|
|
writeCSV('AG'+fileName,csvTable)
|
|
|
|
def mergeCSV(files, colIndex, outPutName):
|
|
newTable = []
|
|
for file in files:
|
|
cvsTable = readCSV(file)
|
|
newRow = []
|
|
|
|
for row in cvsTable:
|
|
newRow.append(row[colIndex])
|
|
newTable.append(newRow)
|
|
|
|
maxLen = 0
|
|
for row in newTable:
|
|
tmpLen = len(row)
|
|
if tmpLen > maxLen:
|
|
maxLen = tmpLen
|
|
|
|
for row in newTable:
|
|
diff = maxLen - len(row)
|
|
for i in range(0, diff):
|
|
row.append('0')
|
|
|
|
zipNewTable = []
|
|
xindex = 0
|
|
for x in zip(*newTable):
|
|
if xindex == 0:
|
|
zipNewTable.append(['time'])
|
|
else:
|
|
zipNewTable.append([str(xindex-1)])
|
|
xindex += 1
|
|
for y in x:
|
|
zipNewTable[-1].append(y)
|
|
|
|
for row in zipNewTable:
|
|
print(row)
|
|
writeCSV(outPutName,zipNewTable)
|
|
|
|
def calcNormRuntime(files, timecolIndex,outPutName, outPutName2):
|
|
resultTable = [[]]
|
|
scalTable = [[]]
|
|
init = False
|
|
tabledim = 0
|
|
for file in files:
|
|
inputTable = readCSV(file)
|
|
|
|
if not init:
|
|
timeheader = inputTable[0][timecolIndex]
|
|
init = True
|
|
tabledim = len(inputTable[0])-1
|
|
for head in inputTable[0]:
|
|
if timeheader != head:
|
|
resultTable[0].append("Norm"+head)
|
|
scalTable[0].append("Mean:"+head)
|
|
scalTable[0].append("Var:"+head)
|
|
|
|
maxTime = int(inputTable[-1][timecolIndex])
|
|
resultTable.append(['0']*tabledim)
|
|
for row in inputTable:
|
|
tmplist = all_indices('0',row)
|
|
for index in tmplist:
|
|
if resultTable[-1][index-1] == '0' or resultTable[-1][index-1] == '0.0':
|
|
resultTable[-1][index-1] = str(int(row[0])/maxTime)
|
|
|
|
for index in range(0, len(resultTable[-1])):
|
|
if not(float(resultTable[-1][index]) > 0):
|
|
resultTable[-1][index] = '1'
|
|
|
|
for row in resultTable:
|
|
print(row)
|
|
|
|
scalTable.append([])
|
|
for colindex in range(0,tabledim):
|
|
meanVar = aggrateCol(colindex, resultTable)
|
|
scalTable[-1].append(str(meanVar[0]))
|
|
scalTable[-1].append(str(meanVar[1]))
|
|
|
|
for row in scalTable:
|
|
print(row)
|
|
|
|
writeCSV(outPutName,resultTable)
|
|
writeCSV(outPutName2,scalTable)
|
|
|
|
def all_indices(value, qlist):
|
|
indices = []
|
|
idx = -1
|
|
while True:
|
|
try:
|
|
idx = qlist.index(value, idx+1)
|
|
indices.append(idx)
|
|
except ValueError:
|
|
break
|
|
return indices
|
|
|
|
def is_number(s):
|
|
try:
|
|
float(s)
|
|
return True
|
|
except ValueError:
|
|
return False
|