Files
Mranalysis/csv/csvutilies.py
stubbfel e026cd0174 20140319
2014-03-19 12:20:30 +01:00

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