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.
- checksums.yaml +7 -0
- data/lib/mad_math.rb +57 -0
- data/readme.md +78 -0
- metadata +145 -0
checksums.yaml
ADDED
@@ -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
|
data/lib/mad_math.rb
ADDED
@@ -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
|
data/readme.md
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
[](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: []
|