Returns a dictionary with k items: {(start, stop): [values], ...}, with equal (start, stop) intervals between min(list) => max(list).
(list, k=10, range=None)
| 572 | stdev = standard_deviation |
| 573 | |
| 574 | def histogram(list, k=10, range=None): |
| 575 | """ Returns a dictionary with k items: {(start, stop): [values], ...}, |
| 576 | with equal (start, stop) intervals between min(list) => max(list). |
| 577 | """ |
| 578 | # To loop through the intervals in sorted order, use: |
| 579 | # for (i,j), values in sorted(histogram(list).items()): |
| 580 | # m = i + (j-i)/2 # midpoint |
| 581 | # print i, j, m, values |
| 582 | if range is None: |
| 583 | range = (min(list), max(list)) |
| 584 | k = max(int(k), 1) |
| 585 | w = float(range[1] - range[0] + 0.000001) / k # interval (bin width) |
| 586 | h = [[] for i in xrange(k)] |
| 587 | for x in list: |
| 588 | i = int(floor((x-range[0]) / w)) |
| 589 | if 0 <= i < len(h): |
| 590 | #print x, i, "(%.2f, %.2f)" % (range[0]+w*i, range[0]+w+w*i) |
| 591 | h[i].append(x) |
| 592 | return dict(((range[0]+w*i, range[0]+w+w*i), v) for i, v in enumerate(h)) |
| 593 | |
| 594 | #--- MOMENT ---------------------------------------------------------------------------------------- |
| 595 |