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.
@@ -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: 9
4
+ hash: 29
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
9
- version: "0.1"
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/array_of.rb
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
@@ -1,5 +0,0 @@
1
- module Enumerable
2
- def array_of method_name
3
- self.collect {|element| element.method(method_name).call}
4
- end
5
- end
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
@@ -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
data/lib/rounding.rb DELETED
@@ -1,8 +0,0 @@
1
- class Object
2
- def round_to(x)
3
- return (self * 10**x.to_f).round / 10**x.to_f
4
- rescue
5
- self
6
- end
7
-
8
- end