5
|
1 #!/usr/bin/python
|
|
2 # histogram counts of numeric input, uses existing counts if given
|
|
3 # Usage: nhist.py [-c] [-p] [binwidth] [pointCol countCol]
|
|
4 # Default binwidth is 100
|
|
5 import sys
|
|
6 bins={}
|
|
7 minv=sys.maxint
|
|
8 maxv=-sys.maxint-1
|
|
9 cum=False
|
|
10 percent=False
|
|
11 while len(sys.argv)>1:
|
|
12 if sys.argv[1]=='-c':
|
|
13 sys.argv.pop(1)
|
|
14 cum=True
|
|
15 elif sys.argv[1]=='-p':
|
|
16 sys.argv.pop(1)
|
|
17 cum=True
|
|
18 percent=True
|
|
19 tot=0
|
|
20 else:
|
|
21 break
|
|
22 if len(sys.argv)>1:
|
|
23 w=int(sys.argv[1])
|
|
24 else:
|
|
25 w=100
|
|
26 if len(sys.argv)>2:
|
|
27 pc=int(sys.argv[2])
|
|
28 cc=int(sys.argv[3])
|
|
29 counts=True
|
|
30 else:
|
|
31 counts=False
|
|
32 for l in sys.stdin:
|
|
33 if counts:
|
|
34 ff=l.split()
|
|
35 n=int(ff[pc])
|
|
36 c=int(ff[cc])
|
|
37 else:
|
|
38 n=int(l)
|
|
39 c=1
|
|
40 v=n/w
|
|
41 if percent:
|
|
42 tot+=c
|
|
43 bins[v]=bins.get(v,0)+c
|
|
44 if n<minv:
|
|
45 minv=min
|
|
46 if n>maxv:
|
|
47 maxv=max
|
|
48 if cum:
|
|
49 cumTot=0
|
|
50 for k in sorted(bins.keys()):
|
|
51 if cum:
|
|
52 cumTot+=bins[k]
|
|
53 print k,bins[k],
|
|
54 if cum:
|
|
55 print cumTot,
|
|
56 if percent:
|
|
57 print "%5.2f"%(float(cumTot)*100/tot)
|
|
58 else:
|
|
59 print
|
|
60
|
|
61
|