datasumz 0.1.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: 682a06d820218ec6aab1c9a258155e64147dd866
4
+ data.tar.gz: 88999b95ea9ec3bba491fa3fe699bfeed12f7df4
5
+ SHA512:
6
+ metadata.gz: 9ca27718d65d61abf16ffdc1edf936b4f21950d2ec59f3fecbca32ca94fdac3114f55d53e9e4637c8448f53fea2b21fae92ba7d7c9fc9b8e6709eabdce4cc3cf
7
+ data.tar.gz: cfa458f21dea3d1bf5923d02e4a4ee4ef033cccce9bdc6f4858b598fe4aa441157758614ab4bc27222c1d6b37c895022287a5b2a20f561b75010bc33f7e029f2
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 Michelle Pellon
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # datasumz
2
+
3
+ A Ruby gem to neatly and quickly summarize data.
4
+
5
+ ### Functions
6
+
7
+ #### **descr**
8
+
9
+ Generate common central tendency statistics and measures of dispersion for numerical data.
10
+
11
+ Note: Currently handles only single vectors.
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+
3
+ unless Enumerable.method_defined? :mean
4
+ module Enumerable
5
+ # Calculates the mean of a numeric collection.
6
+ #
7
+ # @param default [Object] an optional default return value if there are
8
+ # no elements. It is nil by default.
9
+ # @return The mean of the elements or the default value if there are no
10
+ # elements.
11
+ #
12
+ # @example
13
+ # [1, 2, 3, 4, 5].mean #=> 3
14
+ # [].mean #=> nil
15
+ # [].mean(0) #=> 0
16
+ def mean(default = nil)
17
+ coll_size = to_a.size
18
+ coll_size > 0 ? reduce(&:+) / coll_size.to_f : default
19
+ end # def mean
20
+ end # module Enumerable
21
+ end
@@ -0,0 +1,10 @@
1
+ # encoding: utf-8
2
+
3
+ unless Enumerable.method_defined? :median
4
+ module Enumerable
5
+ def median(default = nil)
6
+ sorted = sort
7
+ (sorted[(length - 1) / 2] + sorted[length / 2]) / 2.0
8
+ end # def median
9
+ end # module Enumerable
10
+ end
@@ -0,0 +1,14 @@
1
+ # encoding: utf-8
2
+
3
+ unless Enumerable.method_defined? :sd
4
+ module Enumerable
5
+ def variance
6
+ sum = inject(0) { |accum, i| accum + (i - mean) ** 2}
7
+ sum/(length - 1).to_f
8
+ end # def variance
9
+
10
+ def sd
11
+ Math.sqrt(variance)
12
+ end # def sd
13
+ end # module Enumerable
14
+ end
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+
3
+ unless Enumerable.method_defined? :sum
4
+ module Enumerable
5
+ # Sums up elements of a collection by invoking their `+` method.
6
+ #
7
+ # @param default [Object] an optional default return value if there are
8
+ # no elements. It is nil by default.
9
+ # @return The sum of the elements or the default value if there are no
10
+ # elements.
11
+ #
12
+ # @example
13
+ # [1, 2, 3, 4, 5].sum #=> 15
14
+ # ["a", "b", "c"].sum #=> "abc"
15
+ # [].sum #=> nil
16
+ # [].sum(0) #=> 0
17
+ def sum(identify = nil)
18
+ reduce(&:+) || default
19
+ end # def sum
20
+ end # module Enumerable
21
+ end
@@ -0,0 +1,6 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative 'enumerable/sum'
4
+ require_relative 'enumerable/mean'
5
+ require_relative 'enumerable/median'
6
+ require_relative 'enumerable/sd'
@@ -0,0 +1,65 @@
1
+ # encoding: utf-8
2
+
3
+ module DataSumz
4
+ class Describer
5
+
6
+ attr_reader :data
7
+
8
+ private
9
+
10
+ def initialize(_data)
11
+ @data = _data
12
+ end # def initialize
13
+
14
+ def compute_kurtosis
15
+ fo = @data.inject(0) { |accum, x| accum + ((x - @data.mean) ** 4)}
16
+ fo.quo((@data.size) * @data.sd ** 4) - 3
17
+ end # compute_kurtosis
18
+
19
+ def compute_skewness
20
+ th = @data.inject(0){|a,x| a + ((x - @data.mean) ** 3)}
21
+ th.quo((@data.size) * @data.sd ** 3)
22
+ end # compute_skewness
23
+
24
+ def find_quartile(quartile)
25
+ sorted = @data.sort
26
+ return sorted.last if quartile == 4
27
+ # Source: http://mathworld.wolfram.com/Quartile.html
28
+ quartile_position = 0.25 * (quartile*sorted.length + 4 - quartile)
29
+ quartile_int = quartile_position.to_i
30
+ lower = sorted[quartile_int - 1]
31
+ upper = sorted[quartile_int]
32
+ lower + (upper - lower) * (quartile_position - quartile_int)
33
+ end # def find_quartile
34
+
35
+ def compute_iqr
36
+ return find_quartile(3) - find_quartile(1)
37
+ end # def compute_iqr
38
+
39
+ def compute_mad
40
+ absdev = []
41
+ data.each {|n|
42
+ absdev.push((n - @data.median).abs)
43
+ }
44
+ return absdev.median
45
+ end # def compute_mad
46
+
47
+ def describe
48
+ stats = {}
49
+ stats[:count] = @data.size
50
+ stats[:mean] = @data.mean
51
+ stats[:sd] = @data.sd
52
+ stats[:min] = @data.min
53
+ stats[:max] = @data.max
54
+ stats[:median] = @data.median
55
+ stats[:mad] = compute_mad
56
+ stats[:iqr] = compute_iqr
57
+ stats[:cv] = stats[:sd] / stats[:mean].abs
58
+ stats[:skewness] = compute_skewness
59
+ stats[:kurtosis] = compute_kurtosis
60
+ return stats
61
+ end # def describe
62
+
63
+ public(:initialize, :describe)
64
+ end # class Describer
65
+ end # module DataSumz
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+
3
+ module DataSumz
4
+ # Current major release.
5
+ # @return [Integer]
6
+ MAJOR = 0
7
+
8
+ # Current minor release.
9
+ # @return [Integer]
10
+ MINOR = 1
11
+
12
+ # Current patch level.
13
+ # @return [Integer]
14
+ PATCH = 0
15
+
16
+ # Full release version.
17
+ # @return [String]
18
+ VERSION = [MAJOR, MINOR, PATCH].join('.').freeze
19
+ end # module DataSumz
data/lib/datasumz.rb ADDED
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+ require 'datasumz/version'
4
+ require 'datasumz/core_extensions/enumerable'
5
+ require 'datasumz/describer'
6
+
7
+ module DataSumz
8
+ class << self
9
+
10
+ # Generates common central tendency statistics and measures of
11
+ # dispersion for numerical data.
12
+ #
13
+ # @return [Hash]
14
+ def descr(array)
15
+ d = Describer.new(array)
16
+ d.describe
17
+ end # def descr
18
+
19
+ end # class Self
20
+ end # module DataSumz
metadata ADDED
@@ -0,0 +1,139 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: datasumz
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Michelle Pellon
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-05-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubocop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: yard
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description:
98
+ email:
99
+ - hello@michellepellon.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - LICENSE
105
+ - README.md
106
+ - lib/datasumz.rb
107
+ - lib/datasumz/core_extensions/enumerable.rb
108
+ - lib/datasumz/core_extensions/enumerable/mean.rb
109
+ - lib/datasumz/core_extensions/enumerable/median.rb
110
+ - lib/datasumz/core_extensions/enumerable/sd.rb
111
+ - lib/datasumz/core_extensions/enumerable/sum.rb
112
+ - lib/datasumz/describer.rb
113
+ - lib/datasumz/version.rb
114
+ homepage: https://github.com/mpellon/datasumz
115
+ licenses:
116
+ - MIT
117
+ metadata: {}
118
+ post_install_message:
119
+ rdoc_options: []
120
+ require_paths:
121
+ - lib
122
+ required_ruby_version: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: 2.0.0
127
+ required_rubygems_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ requirements: []
133
+ rubyforge_project:
134
+ rubygems_version: 2.5.1
135
+ signing_key:
136
+ specification_version: 4
137
+ summary: A Ruby gem to neatly and quickly summarize data.
138
+ test_files: []
139
+ has_rdoc: