to_histogram 1.0.0

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 58c176192de9ba9ed43fb91778c36eed19fc1c5d
4
+ data.tar.gz: d830c2a73ac48d2e5d88f8ffbad6297c76414c58
5
+ SHA512:
6
+ metadata.gz: af37532d0ffd6715bbc0c4fb02e5692d81861cd5b10e160d8dad1dbaf1c89a2c863a88b9e4f3fe5b7181c9b9b4a1119e480ed15568eda53d490ca16ebcb5ed77
7
+ data.tar.gz: 86cad0be42831b5693b7559d68aabca95232a2bb0589da4ae0c995a7835ba4659285c383d10afe118e3864c254d9f3136c68ae9a521596ea5146d6ceb2c9cc78
data/lib/bucketizer.rb ADDED
@@ -0,0 +1,35 @@
1
+ module ToHistogram
2
+
3
+ class Bucketizer
4
+
5
+ def create_buckets(array, num_buckets)
6
+ arr = array.sort
7
+ bucket_increments = (arr[-1].to_f) / num_buckets
8
+ l_index = 0
9
+ next_bucket = bucket_increments
10
+ buckets = []
11
+
12
+ arr.each_with_index do |e, i|
13
+ if !(e <= next_bucket)
14
+ buckets << arr[l_index..(i - 1)]
15
+
16
+ # Special case where all of the results fit into the first bucket
17
+ if buckets[0].length == arr.length
18
+ l_index = (arr.length - 1)
19
+ break
20
+ end
21
+
22
+ l_index = i
23
+ next_bucket += bucket_increments
24
+ end
25
+ end
26
+
27
+ if(l_index != (arr.length - 1))
28
+ buckets << arr[l_index..(arr.length - 1)]
29
+ end
30
+
31
+ return buckets
32
+ end
33
+
34
+ end
35
+ end
data/lib/histogram.rb ADDED
@@ -0,0 +1,28 @@
1
+ require_relative './bucketizer'
2
+
3
+ module ToHistogram
4
+
5
+ class Histogram
6
+ include Enumerable
7
+
8
+ def initialize(array, num_buckets)
9
+ bucketizer = Bucketizer.new()
10
+ @buckets = bucketizer.create_buckets(array, num_buckets)
11
+ end
12
+
13
+ def each(&block)
14
+ @buckets.each do |b|
15
+ yield b
16
+ end
17
+ end
18
+
19
+ def [](i)
20
+ return @buckets[i]
21
+ end
22
+
23
+ def length
24
+ return @buckets.length
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,29 @@
1
+ module ToHistogram
2
+
3
+ class StdoutPrint
4
+ def initialize(histogram)
5
+ @histogram = histogram
6
+ end
7
+
8
+ def invoke
9
+ last_value = nil
10
+ total_data_value_length = (@histogram.map { |b| b.length }).reduce(:+)
11
+ printf("%-20s %-20s %-30s %-20s \n\n", "range", "frequency", " percentage (out of #{total_data_value_length})", "histogram (percetage)")
12
+
13
+ @histogram.each do |b|
14
+ range = last_value.nil? ? "#{b[0]} to #{b[-1]}" : "#{last_value + 1} to #{b[-1]}"
15
+ frequency = b.length
16
+ percentage = ((frequency.to_f / total_data_value_length) * 100)
17
+ stars = ''
18
+ percentage.round.times { |x| stars << '*' }
19
+
20
+ printf("%-20s | %-20s | %-30s | %-20s \n", range, frequency, ('%.4f' % percentage), stars)
21
+ last_value = b[-1]
22
+ end
23
+
24
+ puts "\n\n"
25
+ return nil
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,13 @@
1
+ require_relative './histogram'
2
+ require_relative './stdout_print'
3
+
4
+ class Array
5
+ def to_histogram(num_buckets: 10)
6
+ histogram = ToHistogram::Histogram.new(self, num_buckets)
7
+ stdout_print = ToHistogram::StdoutPrint.new(histogram)
8
+
9
+ stdout_print.invoke
10
+
11
+ return histogram
12
+ end
13
+ end
metadata ADDED
@@ -0,0 +1,48 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: to_histogram
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Brett Sykes
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-11-02 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Creates a simple histogram output on the command line. Usefull in IRB
14
+ sessions and command line programs
15
+ email: brettcsykes@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/bucketizer.rb
21
+ - lib/histogram.rb
22
+ - lib/stdout_print.rb
23
+ - lib/to_histogram.rb
24
+ homepage: https://github.com/bretts/to_histogram
25
+ licenses:
26
+ - MIT
27
+ metadata: {}
28
+ post_install_message:
29
+ rdoc_options: []
30
+ require_paths:
31
+ - lib
32
+ required_ruby_version: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ required_rubygems_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ requirements: []
43
+ rubyforge_project:
44
+ rubygems_version: 2.4.5
45
+ signing_key:
46
+ specification_version: 4
47
+ summary: Creates a simple histogram output on the command line
48
+ test_files: []