[Spambayes-checkins] spambayes TestDriver.py,1.5,1.6

Tim Peters tim_one@users.sourceforge.net
Sun, 22 Sep 2002 01:31:50 -0700


Update of /cvsroot/spambayes/spambayes
In directory usw-pr-cvs1:/tmp/cvs-serv15892

Modified Files:
	TestDriver.py 
Log Message:
Augmented the Hist class to compute and display mean and (sample) sdev.


Index: TestDriver.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/TestDriver.py,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** TestDriver.py	22 Sep 2002 06:58:36 -0000	1.5
--- TestDriver.py	22 Sep 2002 08:31:48 -0000	1.6
***************
*** 36,39 ****
--- 36,42 ----
          self.buckets = [0] * nbuckets
          self.nbuckets = nbuckets
+         self.n = 0          # number of data points
+         self.sum = 0.0      # sum of their values
+         self.sumsq = 0.0    # sum of their squares
  
      def add(self, x):
***************
*** 44,47 ****
--- 47,55 ----
          self.buckets[i] += 1
  
+         self.n += 1
+         x *= 100.0
+         self.sum += x
+         self.sumsq += x*x
+ 
      def __iadd__(self, other):
          if self.nbuckets != other.nbuckets:
***************
*** 49,55 ****
--- 57,77 ----
          for i in range(self.nbuckets):
              self.buckets[i] += other.buckets[i]
+         self.n += other.n
+         self.sum += other.sum
+         self.sumsq += other.sumsq
          return self
  
      def display(self, WIDTH=60):
+         from math import sqrt
+         if self.n > 1:
+             mean = self.sum / self.n
+             # sum (x_i - mean)**2 = sum (x_i**2 - 2*x_i*mean + mean**2) =
+             # sum x_i**2 - 2*mean*sum x_i + sum mean**2 =
+             # sum x_i**2 - 2*mean*mean*n + n*mean**2 =
+             # sum x_i**2 - n*mean**2
+             samplevar = (self.sumsq - self.n * mean**2) / (self.n - 1)
+             print "%d items; mean %.2f; sample sdev %.2f" % (self.n,
+                   mean, sqrt(samplevar))
+ 
          biggest = max(self.buckets)
          hunit, r = divmod(biggest, WIDTH)