| 1 |
nino.borges |
610 |
"""
|
| 2 |
|
|
|
| 3 |
|
|
ClientStatAnalysis.py
|
| 4 |
|
|
|
| 5 |
|
|
A simple program that will take in a client report and analyze it, creating a report with
|
| 6 |
|
|
projections.
|
| 7 |
|
|
|
| 8 |
|
|
Created by
|
| 9 |
|
|
Emanuel Borges
|
| 10 |
|
|
2016.09.20
|
| 11 |
|
|
|
| 12 |
|
|
"""
|
| 13 |
|
|
|
| 14 |
|
|
if __name__ == '__main__':
|
| 15 |
|
|
clientRawReportFile = r"C:\Test\ClientRawData.csv"
|
| 16 |
|
|
outputFileNameAnalysis = r"C:\Test\ClientAnalysis.dat"
|
| 17 |
nino.borges |
640 |
outputFileNameStackedAnalysis = r"C:\Test\ClientStackedAnalysis.dat"
|
| 18 |
nino.borges |
610 |
outputFileNamePredictive = r"C:\Test\ClientAnalysisPrediction.dat"
|
| 19 |
|
|
outputFileNameYearTotal = r"C:\Test\ClientAnalysisYearTotal.dat"
|
| 20 |
|
|
rawReportContents = open(clientRawReportFile,'r').readlines()
|
| 21 |
|
|
rawReportContents = rawReportContents[1:]
|
| 22 |
|
|
|
| 23 |
|
|
reportCategoryList = ['Service Revenue - Other', 'Hosting', 'Forensics', 'Paper', 'Attorney Review', 'ESI']
|
| 24 |
|
|
reportCategoryListSelected = ['Hosting','Forensics', 'ESI']
|
| 25 |
|
|
|
| 26 |
|
|
reportCategoryColumnNumb = 12
|
| 27 |
|
|
reportDateColumnNumb = 11
|
| 28 |
|
|
reportRevenueColumnNumb = 7
|
| 29 |
nino.borges |
640 |
reportProjectNameColumnNumb = 3
|
| 30 |
nino.borges |
610 |
|
| 31 |
|
|
esiReportMatrix = {}
|
| 32 |
|
|
esiReportYearTotalMatrix = {}
|
| 33 |
|
|
esiReportPredictionMatrix = {}
|
| 34 |
|
|
|
| 35 |
|
|
for line in rawReportContents:
|
| 36 |
|
|
line = line.split(",")
|
| 37 |
|
|
reportCategory = line[reportCategoryColumnNumb]
|
| 38 |
|
|
reportDate = line[reportDateColumnNumb]
|
| 39 |
|
|
reportRevenue = line[reportRevenueColumnNumb]
|
| 40 |
|
|
if reportCategory in reportCategoryListSelected:
|
| 41 |
|
|
if reportDate in esiReportMatrix.keys():
|
| 42 |
|
|
esiReportMatrix[reportDate] = esiReportMatrix[reportDate] + float(reportRevenue)
|
| 43 |
|
|
else:
|
| 44 |
|
|
esiReportMatrix[reportDate] = float(reportRevenue)
|
| 45 |
|
|
|
| 46 |
|
|
outputFile = open(outputFileNameAnalysis,'w')
|
| 47 |
|
|
reportDateList = esiReportMatrix.keys()
|
| 48 |
|
|
reportDateList.sort()
|
| 49 |
|
|
for i in reportDateList:
|
| 50 |
|
|
outputFile.write("%s|%s\n"%(i,esiReportMatrix[i]))
|
| 51 |
|
|
outputFile.close()
|
| 52 |
|
|
|
| 53 |
|
|
|
| 54 |
|
|
for n in reportDateList:
|
| 55 |
|
|
year = n.split("-")[0]
|
| 56 |
|
|
if year in esiReportYearTotalMatrix.keys():
|
| 57 |
|
|
esiReportYearTotalMatrix[year] = esiReportYearTotalMatrix[year] + float(esiReportMatrix[n])
|
| 58 |
|
|
else:
|
| 59 |
|
|
esiReportYearTotalMatrix[year] = float(esiReportMatrix[n])
|
| 60 |
|
|
|
| 61 |
|
|
outputFile = open(outputFileNameYearTotal,'w')
|
| 62 |
|
|
yearTotalList = esiReportYearTotalMatrix.keys()
|
| 63 |
|
|
yearTotalList.sort()
|
| 64 |
|
|
for yr in yearTotalList:
|
| 65 |
|
|
outputFile.write("%s|%s\n"%(yr,esiReportYearTotalMatrix[yr]))
|
| 66 |
|
|
outputFile.close()
|
| 67 |
|
|
|
| 68 |
|
|
for x in reportDateList:
|
| 69 |
|
|
month = x.split("-")[1]
|
| 70 |
|
|
if month in esiReportPredictionMatrix.keys():
|
| 71 |
|
|
esiReportPredictionMatrix[month].append(float(esiReportMatrix[x]))
|
| 72 |
|
|
else:
|
| 73 |
|
|
esiReportPredictionMatrix[month] = [float(esiReportMatrix[x])]
|
| 74 |
|
|
outputFile = open(outputFileNamePredictive,'w')
|
| 75 |
|
|
monthPredictionList = esiReportPredictionMatrix.keys()
|
| 76 |
|
|
monthPredictionList.sort()
|
| 77 |
|
|
for m in monthPredictionList:
|
| 78 |
|
|
sumTotal = 0
|
| 79 |
|
|
for tot in esiReportPredictionMatrix[m]:
|
| 80 |
|
|
sumTotal = sumTotal + tot
|
| 81 |
|
|
averageTotal = sumTotal/len(esiReportPredictionMatrix[m])
|
| 82 |
|
|
outputFile.write("%s|%s\n"%(m,averageTotal))
|
| 83 |
|
|
outputFile.close() |