mad_math 0.0.1

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.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/lib/mad_math.rb +57 -0
  3. data/readme.md +78 -0
  4. metadata +145 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c72da6443f380dc68cab4a7bfb1e975bad24e17b
4
+ data.tar.gz: 6a7e75b4708695ff46698c47c1147110bf47a2e6
5
+ SHA512:
6
+ metadata.gz: 3b83fe96d3cbbfbc589acfadbc383127ad2a805ce46884bdaa3edac5f115760981cde779ee8fd48def99458605b1b66e9d529f1ad4b3013dcfadb54e8f2c0eae
7
+ data.tar.gz: 7c810ab96bab4482f3f8fc85d77b1b7c7907f7230e138dc8ec970bb9d0cf74a8a788928fed5f346b05d51342d158497f0ee0c9103ece15e66d668ce6d34b242a
@@ -0,0 +1,57 @@
1
+ module MadMath
2
+ class Stats
3
+ def initialize(data)
4
+ @data = data
5
+ end
6
+
7
+ def load
8
+ stdev
9
+ self
10
+ end
11
+
12
+ def average
13
+ @average ||= sum / count.to_f
14
+ end
15
+
16
+ # #reduce with the symbol (non-block form) seems most performant
17
+ def sum
18
+ @sum ||= @data.reduce(:+)
19
+ end
20
+
21
+ def count
22
+ @count ||= @data.size
23
+ end
24
+
25
+ def sum_of_squares
26
+ @sum_of_squares ||= get_sum_of_squares
27
+ end
28
+
29
+ def stdev
30
+ @stdev ||= Math.sqrt(sum_of_squares / (count - 1))
31
+ end
32
+
33
+ def stdevp
34
+ @stdevp ||= Math.sqrt(sum_of_squares / count)
35
+ end
36
+
37
+ def max
38
+ @max ||= @data.max
39
+ end
40
+
41
+ def min
42
+ @min ||= @data.min
43
+ end
44
+
45
+ private
46
+
47
+ def get_sum_of_squares
48
+ @max = @data.first
49
+ @min = @data.first
50
+ @data.map do |num|
51
+ @max = num if @max < num
52
+ @min = num if @min > num
53
+ (num - average) ** 2
54
+ end.reduce(:+)
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,78 @@
1
+ [![Build Status](https://travis-ci.org/ToadJamb/mad_math.svg?branch=master)](https://travis-ci.org/ToadJamb/mad_math)
2
+
3
+ MadMath
4
+ =======
5
+
6
+ Statistical functions for a set of data.
7
+
8
+ There are other gems that have better performance
9
+ if you are interested in standard deviation for large data sets.
10
+
11
+ The main thing this gem does is that it calculates max/min
12
+ while calculating the sum of squares for standard deviation.
13
+ If you don't need the max/min after calculating standard deviation,
14
+ there are probably better choices.
15
+
16
+
17
+ Installation
18
+ ------------
19
+
20
+ $ gem install mad_math
21
+
22
+
23
+ Gemfile
24
+ -------
25
+
26
+ $ gem 'mad_math'
27
+
28
+
29
+ Require
30
+ -------
31
+
32
+ $ require 'mad_math'
33
+
34
+
35
+ Gemfile.lock
36
+ ------------
37
+
38
+ Common advice is to not check in the Gemfile.lock for libraries.
39
+
40
+ This is a terrible practice.
41
+
42
+ If you attempt to use a gem that has no Gemfile.lock
43
+ committed, then you have no idea what combination
44
+ of dependencies has a reasonable expectation of working.
45
+ If you are a maintainer of said gem,
46
+ you will have a local Gemfile.lock that likely works.
47
+ And you are probably not deleting it EVERY time you
48
+ work on the gem.
49
+ We all know that we SHOULD delete the Gemfile.lock on occasion
50
+ and some of us maybe even do it.
51
+ But more of us run an occasional `bundle update`
52
+ and keep on trucking.
53
+
54
+ The point is that on an actively-maintained gem,
55
+ not checking the Gemfile.lock in only makes it harder
56
+ to get started helping, not easier.
57
+ I will gladly remove my Gemfile.lock once I have a passing suite
58
+ with known 'supported' dependencies.
59
+ At that point, I may get errors from udpated dependencies
60
+ that would be a good starting point for contributions.
61
+ Or I may just continue pursuing the pull request to fix/update/add a feature
62
+ that caused me to care about a Gemfile.lock for the project in the first place.
63
+ Either way, the project is better for it.
64
+
65
+ There are far more out-of-date/unmaintained gems than there are
66
+ up-to-date/active gems.
67
+ Many of the out-of-date gems are actually useful.
68
+ And many of them have dependencies that don't work when updated.
69
+ It is much harder to get something working if you have no idea
70
+ what a good starting point is
71
+ or even whether it was expected to work at some point
72
+ (maybe the test suite was failing when it was abandoned).
73
+ The point is that it very difficult to know the difference
74
+ without a Gemfile.lock.
75
+
76
+ This is one of the dumbest things we do.
77
+ The practice of not checking in a Gemfile.lock for libraries is ridiculous
78
+ and we should start checking them in.
metadata ADDED
@@ -0,0 +1,145 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mad_math
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Travis Herrick
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-10-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
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_tasks
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: gems
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: cane
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: rspec
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: travis-yaml
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
+ - !ruby/object:Gem::Dependency
98
+ name: wwtd
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Provides some basic statistical functions for a given data set.
112
+ email:
113
+ - tthetoad@gmail.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files:
117
+ - readme.md
118
+ files:
119
+ - lib/mad_math.rb
120
+ - readme.md
121
+ homepage: http://www.bitbucket.org/ToadJamb/gems_mad_math
122
+ licenses:
123
+ - LGPL-3.0
124
+ metadata: {}
125
+ post_install_message:
126
+ rdoc_options: []
127
+ require_paths:
128
+ - lib
129
+ required_ruby_version: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ required_rubygems_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ requirements: []
140
+ rubyforge_project:
141
+ rubygems_version: 2.5.1
142
+ signing_key:
143
+ specification_version: 4
144
+ summary: Basic statistical functions
145
+ test_files: []