epitools 0.5.17 → 0.5.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.17
1
+ 0.5.18
@@ -5,6 +5,7 @@ require 'epitools'
5
5
  require 'epitools/core_ext/object'
6
6
  require 'epitools/core_ext/string'
7
7
  require 'epitools/core_ext/array'
8
+ require 'epitools/core_ext/histogram'
8
9
  require 'epitools/core_ext/enumerable'
9
10
  require 'epitools/core_ext/hash'
10
11
  require 'epitools/core_ext/numbers'
@@ -107,6 +107,50 @@ class Array
107
107
  end
108
108
  end
109
109
 
110
+ #
111
+ # Takes an array of numbers, puts them into equal-sized
112
+ # buckets, and counts the buckets (aka. A Histogram!)
113
+ #
114
+ # Examples:
115
+ # [1,2,3,4,5,6,7,8,9].histogram(3) #=> [3,3,3]
116
+ # [1,2,3,4,5,6,7,8,9].histogram(2) #=> [4,5]
117
+ # [1,2,3,4,5,6,7,8,9].histogram(2, ranges: true)
118
+ # #=> {
119
+ # 1.0...5.0 => 4,
120
+ # 5.0...9.0 => 5
121
+ # }
122
+ #
123
+ def histogram(n_buckets=10, options={})
124
+
125
+ use_ranges = options[:ranges] || options[:hash]
126
+
127
+ min_val = min
128
+ max_val = max
129
+ range = (max_val - min_val)
130
+ bucket_size = range.to_f / n_buckets
131
+ buckets = [0]*n_buckets
132
+
133
+ # p [range, bucket_size, buckets, min_val, max_val]
134
+
135
+ each do |e|
136
+ bucket = (e - min_val) / bucket_size
137
+ bucket = n_buckets - 1 if bucket >= n_buckets
138
+ # p [:e, e, :bucket, bucket]
139
+ buckets[bucket] += 1
140
+ end
141
+
142
+ if use_ranges
143
+ ranges = (0...n_buckets).map do |n|
144
+ offset = n*bucket_size
145
+ (min_val + offset) ... (min_val + offset + bucket_size)
146
+ end
147
+ Hash[ ranges.zip(buckets) ]
148
+ else
149
+ buckets
150
+ end
151
+
152
+ end
153
+
110
154
  end
111
155
 
112
156
 
metadata CHANGED
@@ -2,14 +2,14 @@
2
2
  name: epitools
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.5.17
5
+ version: 0.5.18
6
6
  platform: ruby
7
7
  authors:
8
8
  - epitron
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-20 00:00:00.000000000 Z
12
+ date: 2013-01-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  type: :development
@@ -130,4 +130,3 @@ signing_key:
130
130
  specification_version: 3
131
131
  summary: Not utils... METILS!
132
132
  test_files: []
133
- has_rdoc: