means 0.1.1 → 0.1.2
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/Gemfile +1 -0
- data/Gemfile.lock +2 -0
- data/Rakefile +2 -9
- data/VERSION +1 -1
- data/lib/Mean.rb +22 -11
- data/means.gemspec +4 -1
- metadata +21 -10
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
data/Rakefile
CHANGED
@@ -38,12 +38,5 @@ end
|
|
38
38
|
|
39
39
|
task :default => :spec
|
40
40
|
|
41
|
-
require '
|
42
|
-
Rake::
|
43
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
44
|
-
|
45
|
-
rdoc.rdoc_dir = 'rdoc'
|
46
|
-
rdoc.title = "means #{version}"
|
47
|
-
rdoc.rdoc_files.include('README*')
|
48
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
49
|
-
end
|
41
|
+
require 'yard'
|
42
|
+
YARD::Rake::YardocTask.new
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.2
|
data/lib/Mean.rb
CHANGED
@@ -3,20 +3,26 @@ require 'mathn'
|
|
3
3
|
# Allows calculation of arithmetic, geometric and harmonic means.
|
4
4
|
# Class methods allow the passing in of a data set.
|
5
5
|
# Alternatively an object can be created and elements can
|
6
|
-
# be added with
|
6
|
+
# be added with #push
|
7
7
|
class Mean
|
8
8
|
|
9
|
-
# Calculate the arithmetic mean
|
9
|
+
# Calculate the arithmetic mean
|
10
|
+
# @param [Array<Float>] data the data values
|
11
|
+
# @return [Float] the arithmetic mean
|
10
12
|
def Mean.arithmetic(data)
|
11
13
|
data.reduce(:+) / data.size unless data.empty?
|
12
14
|
end
|
13
15
|
|
14
|
-
# Calculate the geometric mean
|
16
|
+
# Calculate the geometric mean
|
17
|
+
# @param (see Mean.arithmetic)
|
18
|
+
# @return [Float] the geometric mean
|
15
19
|
def Mean.geometric(data)
|
16
20
|
data.reduce(:*) ** (1 / data.size) unless data.empty?
|
17
21
|
end
|
18
22
|
|
19
|
-
# Calculate the harmonic mean
|
23
|
+
# Calculate the harmonic mean
|
24
|
+
# @param (see Mean.arithmetic)
|
25
|
+
# @return [Float] the harmonic mean
|
20
26
|
def Mean.harmonic(data)
|
21
27
|
data.size / data.reduce(0) {|sum, element| sum += (1 / element)} unless data.empty?
|
22
28
|
end
|
@@ -24,9 +30,10 @@ class Mean
|
|
24
30
|
# Remember the initial state.
|
25
31
|
#
|
26
32
|
# If you are passing in an initial state:
|
27
|
-
# [arithmetic mean] needs
|
28
|
-
# [geometric mean] needs
|
29
|
-
# [harmonic mean] needs
|
33
|
+
# [arithmetic mean] needs `:sum` and `:count`
|
34
|
+
# [geometric mean] needs `:product` and `:count`
|
35
|
+
# [harmonic mean] needs `:sum_of_reciprocals` and `:count`
|
36
|
+
# @param [Hash{Symbol => Fixnum}]
|
30
37
|
def initialize(params={})
|
31
38
|
@sum ||= params[:sum] ||= 0
|
32
39
|
@sum_of_reciprocals ||= params[:sum_of_reciprocals] ||= 0
|
@@ -34,7 +41,8 @@ class Mean
|
|
34
41
|
@count ||= params[:count] ||= 0
|
35
42
|
end
|
36
43
|
|
37
|
-
# Add
|
44
|
+
# Add element to the data set
|
45
|
+
# @param [Float] element the element to add
|
38
46
|
def push(element)
|
39
47
|
@sum += element
|
40
48
|
@sum_of_reciprocals += (1 / element)
|
@@ -42,17 +50,20 @@ class Mean
|
|
42
50
|
@count += 1
|
43
51
|
end
|
44
52
|
|
45
|
-
# Calculate the arithmetic mean
|
53
|
+
# Calculate the arithmetic mean
|
54
|
+
# @return [Float] the arithmetic mean
|
46
55
|
def arithmetic_mean
|
47
56
|
@sum / @count unless @count == 0
|
48
57
|
end
|
49
58
|
|
50
|
-
# Calculate the geometric mean
|
59
|
+
# Calculate the geometric mean
|
60
|
+
# @return [Float] the geometric mean
|
51
61
|
def geometric_mean
|
52
62
|
@product ** (1 / @count) unless @count == 0
|
53
63
|
end
|
54
64
|
|
55
|
-
# Calculate the harmonic mean
|
65
|
+
# Calculate the harmonic mean
|
66
|
+
# @return [Float] the harmonic mean
|
56
67
|
def harmonic_mean
|
57
68
|
@count / @sum_of_reciprocals unless @count == 0
|
58
69
|
end
|
data/means.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "means"
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Nigel Lowry"]
|
@@ -41,17 +41,20 @@ Gem::Specification.new do |s|
|
|
41
41
|
|
42
42
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
43
43
|
s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
|
44
|
+
s.add_development_dependency(%q<yard>, ["~> 0.6.0"])
|
44
45
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
45
46
|
s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
|
46
47
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
47
48
|
else
|
48
49
|
s.add_dependency(%q<rspec>, ["~> 2.3.0"])
|
50
|
+
s.add_dependency(%q<yard>, ["~> 0.6.0"])
|
49
51
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
50
52
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
51
53
|
s.add_dependency(%q<rcov>, [">= 0"])
|
52
54
|
end
|
53
55
|
else
|
54
56
|
s.add_dependency(%q<rspec>, ["~> 2.3.0"])
|
57
|
+
s.add_dependency(%q<yard>, ["~> 0.6.0"])
|
55
58
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
56
59
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
57
60
|
s.add_dependency(%q<rcov>, [">= 0"])
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: means
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-11-06 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &70214563112520 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,21 @@ dependencies:
|
|
21
21
|
version: 2.3.0
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70214563112520
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: yard
|
27
|
+
requirement: &70214563112040 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.6.0
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70214563112040
|
25
36
|
- !ruby/object:Gem::Dependency
|
26
37
|
name: bundler
|
27
|
-
requirement: &
|
38
|
+
requirement: &70214563111560 !ruby/object:Gem::Requirement
|
28
39
|
none: false
|
29
40
|
requirements:
|
30
41
|
- - ~>
|
@@ -32,10 +43,10 @@ dependencies:
|
|
32
43
|
version: 1.0.0
|
33
44
|
type: :development
|
34
45
|
prerelease: false
|
35
|
-
version_requirements: *
|
46
|
+
version_requirements: *70214563111560
|
36
47
|
- !ruby/object:Gem::Dependency
|
37
48
|
name: jeweler
|
38
|
-
requirement: &
|
49
|
+
requirement: &70214563111080 !ruby/object:Gem::Requirement
|
39
50
|
none: false
|
40
51
|
requirements:
|
41
52
|
- - ~>
|
@@ -43,10 +54,10 @@ dependencies:
|
|
43
54
|
version: 1.6.4
|
44
55
|
type: :development
|
45
56
|
prerelease: false
|
46
|
-
version_requirements: *
|
57
|
+
version_requirements: *70214563111080
|
47
58
|
- !ruby/object:Gem::Dependency
|
48
59
|
name: rcov
|
49
|
-
requirement: &
|
60
|
+
requirement: &70214563110600 !ruby/object:Gem::Requirement
|
50
61
|
none: false
|
51
62
|
requirements:
|
52
63
|
- - ! '>='
|
@@ -54,7 +65,7 @@ dependencies:
|
|
54
65
|
version: '0'
|
55
66
|
type: :development
|
56
67
|
prerelease: false
|
57
|
-
version_requirements: *
|
68
|
+
version_requirements: *70214563110600
|
58
69
|
description: Calculates the diferent means for a data set (arithmetic, geometric and
|
59
70
|
harmonic).
|
60
71
|
email: nigel-lowry@ultra.eclipse.co.uk
|
@@ -91,7 +102,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
91
102
|
version: '0'
|
92
103
|
segments:
|
93
104
|
- 0
|
94
|
-
hash:
|
105
|
+
hash: 4342977988734455412
|
95
106
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
107
|
none: false
|
97
108
|
requirements:
|