Module corestats
[hide private]
[frames] | no frames]

Source Code for Module corestats

 1  #!/usr/bin/env python 
 2   
 3  #  corestats.py (COREy STATS) - Copyright (c) 2006, Corey Goldberg 
 4  #     
 5  #    statistical calculation class 
 6  #    for processing numeric sequences 
 7  # 
 8  #  license: GNU LGPL 
 9  # 
10  #  This library is free software; you can redistribute it and/or 
11  #  modify it under the terms of the GNU Lesser General Public 
12  #  License as published by the Free Software Foundation; either 
13  #  version 2.1 of the License, or (at your option) any later version. 
14   
15   
16  # get fastselect here: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/466330 
17  import fastselect 
18  import sys 
19   
20   
21 -class Stats:
22
23 - def __init__(self, sequence):
24 # a sequence of numbers we will process 25 # we convert all items to floats for numerical processing 26 self.sequence = [float(item) for item in sequence]
27 28
29 - def print_sequence(self):
30 # print the sequence (newline delimited) 31 for item in self.sequence: 32 print item
33 34
35 - def sum(self):
36 if len(self.sequence) < 1: 37 return None 38 else: 39 return sum(self.sequence)
40 41
42 - def count(self):
43 return len(self.sequence)
44 45
46 - def min(self):
47 if len(self.sequence) < 1: 48 return None 49 else: 50 return min(self.sequence)
51 52
53 - def max(self):
54 if len(self.sequence) < 1: 55 return None 56 else: 57 return max(self.sequence)
58 59
60 - def avg(self):
61 if len(self.sequence) < 1: 62 return None 63 else: 64 return sum(self.sequence) / len(self.sequence)
65 66
67 - def median(self):
68 if len(self.sequence) < 1: 69 return None 70 else: 71 return self.sum() // 2
72 73
74 - def stdev(self):
75 if len(self.sequence) < 1: 76 return None 77 else: 78 avg = self.avg() 79 sdsq = sum([(i - avg) ** 2 for i in self.sequence]) 80 stdev = (sdsq / (len(self.sequence) - 1 or 1)) ** .5 81 return stdev
82 83
84 - def percentile(self, percentile):
85 if len(self.sequence) < 1: 86 return None 87 else: 88 percent = percentile / 100.0 89 if (percentile >= 100): 90 sys.stderr.write('ERROR: percentile must be < 100. you supplied: %s\n'% percentile) 91 sys.exit(1) 92 # using fastselect algorithm. see fastselect.py for performance details 93 return fastselect.select(int(len(self.sequence) * percent), self.sequence)
94