-def standard_deviation(r):

+def standard_deviation(r, sample=True):

"""Standard deviation, `from the Python Cookbook

<http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/442412>`_

+ Population mode contributed by Lorenzo Catucci.

Standard deviation shows the variability within a sequence of numbers.

A small standard deviation shows the numbers are close to the same. A

used to detect whether the average has been skewed by a few extremely high

+ By default the helper computes the unbiased estimate

+ for the population standard deviation, by applying an unbiasing

+ factor of sqrt(N/(N-1)).

+ If you'd rather have the function compute the population standard

+ deviation, pass ``sample=False``.

The following examples are taken from Wikipedia.

http://en.wikipedia.org/wiki/Standard_deviation

>>> standard_deviation([6, 6, 8, 8])

+ >>> standard_deviation([0, 0, 14, 14], sample=False)

+ >>> standard_deviation([0, 6, 8, 14], sample=False)

+ >>> standard_deviation([6, 6, 8, 8], sample=False)

- (Wikipedia reports 7, 5, and 1 respectively. Some of the difference is

- due to rounding, but the rest may be a bug?)

+ (The results reported in Wikipedia are those expected for whole

+ population statistics and therefore are equal to the ones we get

+ by setting ``sample=False`` in the later tests.)

# Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

>>> standard_deviation([70, 70, 70, 75, 80, 85, 90, 95, 90, 80, 75, 70]) # doctest: +ELLIPSIS

+ >>> standard_deviation([70, 70, 70, 75, 80, 85, 90, 95, 90, 80, 75, 70], sample=False) # doctest: +ELLIPSIS

- # Fictitious average mothly temperatures in Montana.

+ # Fictitious average monthly temperatures in Montana.

# Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

>>> standard_deviation([-32, -10, 20, 30, 60, 90, 100, 80, 60, 30, 10, -32]) # doctest: +ELLIPSIS

+ >>> standard_deviation([-32, -10, 20, 30, 60, 90, 100, 80, 60, 30, 10, -32], sample=False) # doctest: +ELLIPSIS

Most natural and random phenomena follow the normal distribution (aka the

bell curve), which says that most values are close to average but a few are

and "A" (perfect) to the 0.25% higher than 2 stdevs. Those between 1 and 2

stdevs below get a "D" (poor), and those below 2 stdevs... we won't talk

- i.e., how far they deviate from the average.

- If all numbers are the same, the standard deviation is zero. If the

- numbers are widely different from average, no matter whether above or

- below, the standard deviation will be high. Most natural distributions

- follow the bell curve and have a standard deviation of 1.

sdsq = sum([(i - avg) ** 2 for i in r])

- return (sdsq / (len(r) - 1 or 1)) ** 0.5

+ normal_denom=len(r) - 1 or 1

+ return (sdsq / normal_denom) ** 0.5

class SimpleStats(object):

"""Calculate a few simple stats on data.