mad_math 0.0.1

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