simple_statistics 0.1 → 0.11

Sign up to get free protection for your applications and to get access to all the features.
@@ -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