def extractBudgetCountsPer12Months(): durationValues = [] for project in Project.objects.all(): if project.startDate == "-": print("project %s has no start date" % project.codeNumber) continue duration = getDurationOfProjectInMonths(project) if duration < 0: print("project %s ended before it started" % project.codeNumber) continue durationValues.append(duration) lowDurationValue = min(durationValues) highDurationValue = max(durationValues) bucketSize = 12 bucketCount = ceil((highDurationValue-lowDurationValue)/bucketSize) countPerBucket = [0]*bucketCount for durationValue in durationValues: bucketIndex = valueToIntervalSizeBasedBucket(bucketSize, lowDurationValue, durationValue) countPerBucket[bucketIndex] += 1 theTsv = open("espaHistoDurationMonths.tsv", "w+") dx = bucketSize print("high value is %f, low value is %f, interval is %f" % (highDurationValue, lowDurationValue, dx)) for i in range(0, len(countPerBucket)): print("%d\t%d\t%d" % ((lowDurationValue+i*dx), dx, countPerBucket[i]), file=theTsv) theTsv.flush() theTsv.close()
def basicSizeBasedBucketAllocationShouldWork(): minValue = 0 bucketSize = 12 assertEquals(0, valueToIntervalSizeBasedBucket(bucketSize, minValue, 0)) assertEquals(0, valueToIntervalSizeBasedBucket(bucketSize, minValue, 1)) assertEquals(0, valueToIntervalSizeBasedBucket(bucketSize, minValue, 2)) assertEquals(0, valueToIntervalSizeBasedBucket(bucketSize, minValue, 11)) assertEquals(1, valueToIntervalSizeBasedBucket(bucketSize, minValue, 12)) assertEquals(1, valueToIntervalSizeBasedBucket(bucketSize, minValue, 13)) assertEquals(1, valueToIntervalSizeBasedBucket(bucketSize, minValue, 23)) assertEquals(2, valueToIntervalSizeBasedBucket(bucketSize, minValue, 24)) assertEquals(2, valueToIntervalSizeBasedBucket(bucketSize, minValue, 25)) assertEquals(2, valueToIntervalSizeBasedBucket(bucketSize, minValue, 35))