simple_statistics 0.1 → 0.11
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/lib/simple_statistics.rb +60 -0
- metadata +4 -8
- data/lib/array_of.rb +0 -5
- data/lib/average.rb +0 -29
- data/lib/percent.rb +0 -16
- data/lib/rate_of_change.rb +0 -20
- data/lib/rounding.rb +0 -8
@@ -0,0 +1,60 @@
|
|
1
|
+
|
2
|
+
module Enumerable
|
3
|
+
def array_of method_name
|
4
|
+
self.collect {|element| element.method(method_name).call}
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
class Array
|
9
|
+
def mean
|
10
|
+
self.inject(0) { |sum, x| sum += x } / self.size.to_f
|
11
|
+
end
|
12
|
+
def median already_sorted=false
|
13
|
+
return nil if self.empty?
|
14
|
+
array = self.sort unless already_sorted
|
15
|
+
m_pos = array.size / 2
|
16
|
+
return array.size % 2 == 1 ? array[m_pos] : array[m_pos-1..m_pos].mean
|
17
|
+
end
|
18
|
+
def wma
|
19
|
+
values = self.reverse
|
20
|
+
periodLength = values.length - 1
|
21
|
+
sum = 0;
|
22
|
+
weightedSum = 0;
|
23
|
+
for n in 0..periodLength
|
24
|
+
weightedSum = weightedSum + ((periodLength - n) * values[n]);
|
25
|
+
sum = sum + n;
|
26
|
+
end
|
27
|
+
return weightedSum / sum;
|
28
|
+
end
|
29
|
+
def growth
|
30
|
+
rate_of_change
|
31
|
+
end
|
32
|
+
def rate_of_change
|
33
|
+
previous = nil
|
34
|
+
result = Array.new
|
35
|
+
self.each{|this| result << multiplier(this,previous) and previous = this}
|
36
|
+
result
|
37
|
+
rescue
|
38
|
+
self
|
39
|
+
end
|
40
|
+
def multiplier(this, previous)
|
41
|
+
previous != nil && previous != 0 ? (this.to_f/previous.to_f) : 1.0
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class Object
|
46
|
+
def round_to(x)
|
47
|
+
return (self * 10**x.to_f).round / 10**x.to_f
|
48
|
+
rescue
|
49
|
+
self
|
50
|
+
end
|
51
|
+
def as_percent(rounding = 0)
|
52
|
+
return "#{as_percent_number(rounding)}%"
|
53
|
+
rescue
|
54
|
+
self
|
55
|
+
end
|
56
|
+
def as_percent_number(rounding = 0)
|
57
|
+
percent = ((self-1.0) * 100).round_to(rounding)
|
58
|
+
rounding == 0 ? percent.to_i : percent
|
59
|
+
end
|
60
|
+
end
|
metadata
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_statistics
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 29
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: "0.
|
8
|
+
- 11
|
9
|
+
version: "0.11"
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Craig Davidson
|
@@ -28,11 +28,7 @@ extra_rdoc_files: []
|
|
28
28
|
|
29
29
|
files:
|
30
30
|
- README.rdoc
|
31
|
-
- lib/
|
32
|
-
- lib/rate_of_change.rb
|
33
|
-
- lib/rounding.rb
|
34
|
-
- lib/percent.rb
|
35
|
-
- lib/average.rb
|
31
|
+
- lib/simple_statistics.rb
|
36
32
|
has_rdoc: true
|
37
33
|
homepage:
|
38
34
|
licenses: []
|
data/lib/array_of.rb
DELETED
data/lib/average.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'rounding'
|
2
|
-
require 'percent'
|
3
|
-
|
4
|
-
class Array
|
5
|
-
|
6
|
-
def mean
|
7
|
-
self.inject(0) { |sum, x| sum += x } / self.size.to_f
|
8
|
-
end
|
9
|
-
|
10
|
-
def median already_sorted=false
|
11
|
-
return nil if self.empty?
|
12
|
-
array = self.sort unless already_sorted
|
13
|
-
m_pos = array.size / 2
|
14
|
-
return array.size % 2 == 1 ? array[m_pos] : array[m_pos-1..m_pos].mean
|
15
|
-
end
|
16
|
-
|
17
|
-
def wma
|
18
|
-
values = self.reverse
|
19
|
-
periodLength = values.length - 1
|
20
|
-
sum = 0;
|
21
|
-
weightedSum = 0;
|
22
|
-
for n in 0..periodLength
|
23
|
-
weightedSum = weightedSum + ((periodLength - n) * values[n]);
|
24
|
-
sum = sum + n;
|
25
|
-
end
|
26
|
-
return weightedSum / sum;
|
27
|
-
end
|
28
|
-
|
29
|
-
end
|
data/lib/percent.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
require 'rounding'
|
2
|
-
|
3
|
-
class Object
|
4
|
-
|
5
|
-
def as_percent(rounding = 0)
|
6
|
-
return "#{as_percent_number(rounding)}%"
|
7
|
-
rescue
|
8
|
-
self
|
9
|
-
end
|
10
|
-
|
11
|
-
def as_percent_number(rounding = 0)
|
12
|
-
percent = ((self-1.0) * 100).round_to(rounding)
|
13
|
-
rounding == 0 ? percent.to_i : percent
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
data/lib/rate_of_change.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
class Array
|
2
|
-
|
3
|
-
def growth
|
4
|
-
rate_of_change
|
5
|
-
end
|
6
|
-
|
7
|
-
def rate_of_change
|
8
|
-
previous = nil
|
9
|
-
result = Array.new
|
10
|
-
self.each{|this| result << multiplier(this,previous) and previous = this}
|
11
|
-
result
|
12
|
-
rescue
|
13
|
-
self
|
14
|
-
end
|
15
|
-
|
16
|
-
def multiplier(this, previous)
|
17
|
-
previous != nil && previous != 0 ? (this.to_f/previous.to_f) : 1.0
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|