lite-statistics 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.fasterer.yml +19 -0
- data/.gitignore +11 -0
- data/.rspec +4 -0
- data/.rubocop.yml +24 -0
- data/.travis.yml +24 -0
- data/CHANGELOG.md +11 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +119 -0
- data/LICENSE.txt +21 -0
- data/README.md +165 -0
- data/Rakefile +8 -0
- data/_config.yml +1 -0
- data/benchmarks/descriptive_statistics.rb +60 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/docs/.DS_Store +0 -0
- data/docs/descriptive/COEFFICIENT_OF_VARIATION.md +19 -0
- data/docs/descriptive/FREQUENCIES.md +22 -0
- data/docs/descriptive/KURTOSIS.md +19 -0
- data/docs/descriptive/MAX.md +17 -0
- data/docs/descriptive/MEAN.md +19 -0
- data/docs/descriptive/MEDIAN.md +17 -0
- data/docs/descriptive/MIDRANGE.md +19 -0
- data/docs/descriptive/MIN.md +17 -0
- data/docs/descriptive/MODE.md +17 -0
- data/docs/descriptive/PERCENTILE_FROM_VALUE.md +19 -0
- data/docs/descriptive/PROPORTIONS.md +22 -0
- data/docs/descriptive/RANGE.md +17 -0
- data/docs/descriptive/SIZE.md +19 -0
- data/docs/descriptive/SKEWNESS.md +19 -0
- data/docs/descriptive/STANDARD_DEVIATION.md +19 -0
- data/docs/descriptive/STANDARD_ERROR.md +19 -0
- data/docs/descriptive/SUM.md +17 -0
- data/docs/descriptive/SUMMARY.md +25 -0
- data/docs/descriptive/VALUE_FROM_PERCENTILE.md +19 -0
- data/docs/descriptive/VARIANCE.md +19 -0
- data/docs/descriptive/ZSCORE.md +24 -0
- data/lib/generators/lite/statistics/install_generator.rb +17 -0
- data/lib/generators/lite/statistics/templates/install.rb +5 -0
- data/lib/lite/statistics.rb +9 -0
- data/lib/lite/statistics/base.rb +19 -0
- data/lib/lite/statistics/configuration.rb +29 -0
- data/lib/lite/statistics/descriptive.rb +361 -0
- data/lib/lite/statistics/enumerable.rb +24 -0
- data/lib/lite/statistics/version.rb +9 -0
- data/lite-statistics.gemspec +48 -0
- metadata +202 -0
data/Rakefile
ADDED
data/_config.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
theme: jekyll-theme-leap-day
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
%w[lib benchmarks].each { |name| $LOAD_PATH.unshift(name) }
|
4
|
+
|
5
|
+
require 'benchmark/ips'
|
6
|
+
require 'lite/statistics'
|
7
|
+
require 'descriptive_statistics/safe'
|
8
|
+
|
9
|
+
collection = []
|
10
|
+
1_000_000.times { collection << rand(1..99) }
|
11
|
+
|
12
|
+
puts '~~~ Default Summary Size Calculations ~~~'
|
13
|
+
Benchmark.ips do |x|
|
14
|
+
x.report('lite-statistics') do
|
15
|
+
data = Lite::Statistics::Descriptive.new(collection)
|
16
|
+
data.sample_summary
|
17
|
+
end
|
18
|
+
|
19
|
+
x.report('descriptive_statistics') do
|
20
|
+
data = DescriptiveStatistics::Stats.new(collection)
|
21
|
+
data.descriptive_statistics
|
22
|
+
end
|
23
|
+
|
24
|
+
x.compare!
|
25
|
+
end
|
26
|
+
|
27
|
+
# rubocop:disable Metrics/MethodLength
|
28
|
+
def equal_summary(data)
|
29
|
+
{
|
30
|
+
max: data.max,
|
31
|
+
mean: data.mean,
|
32
|
+
median: data.median,
|
33
|
+
min: data.min,
|
34
|
+
mode: data.mode,
|
35
|
+
quartile_1: data.value_from_percentile(25),
|
36
|
+
quartile_2: data.value_from_percentile(50),
|
37
|
+
quartile_3: data.value_from_percentile(75),
|
38
|
+
range: data.range,
|
39
|
+
size: data.size,
|
40
|
+
sum: data.sum,
|
41
|
+
sample_standard_deviation: data.sample_standard_deviation,
|
42
|
+
sample_variance: data.sample_variance
|
43
|
+
}
|
44
|
+
end
|
45
|
+
# rubocop:enable Metrics/MethodLength
|
46
|
+
|
47
|
+
puts '~~~ Equal Summary Size Calculations ~~~'
|
48
|
+
Benchmark.ips do |x|
|
49
|
+
x.report('lite-statistics') do
|
50
|
+
data = Lite::Statistics::Descriptive.new(collection)
|
51
|
+
equal_summary(data)
|
52
|
+
end
|
53
|
+
|
54
|
+
x.report('descriptive_statistics') do
|
55
|
+
data = DescriptiveStatistics::Stats.new(collection)
|
56
|
+
data.descriptive_statistics
|
57
|
+
end
|
58
|
+
|
59
|
+
x.compare!
|
60
|
+
end
|
data/bin/console
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'lite/statistics'
|
6
|
+
|
7
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
8
|
+
# with your gem easier. You can also use a different console, if you like.
|
9
|
+
|
10
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
11
|
+
# require "pry"
|
12
|
+
# Pry.start
|
13
|
+
|
14
|
+
require 'irb'
|
15
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
data/docs/.DS_Store
ADDED
Binary file
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# Sample|Population Coefficient of Variation
|
2
|
+
|
3
|
+
Alias: `coefficient_of_variation`
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
collection = [1, 1, 2, 3, 10]
|
7
|
+
results = 0.994796148546339
|
8
|
+
|
9
|
+
klass = Lite::Statistics::Descriptive.new(collection)
|
10
|
+
klass.sample_coefficient_of_variation
|
11
|
+
|
12
|
+
# - or -
|
13
|
+
|
14
|
+
Lite::Statistics::Descriptive.population_coefficient_of_variation(collection)
|
15
|
+
|
16
|
+
# - or -
|
17
|
+
|
18
|
+
collection.sample_coefficient_of_variation
|
19
|
+
```
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Frequencies
|
2
|
+
|
3
|
+
```ruby
|
4
|
+
collection = [1, 1, 2, 3, 10]
|
5
|
+
results = {
|
6
|
+
1 => 2,
|
7
|
+
2 => 1,
|
8
|
+
3 => 1,
|
9
|
+
10 => 1
|
10
|
+
}
|
11
|
+
|
12
|
+
klass = Lite::Statistics::Descriptive.new(collection)
|
13
|
+
klass.frequencies
|
14
|
+
|
15
|
+
# - or -
|
16
|
+
|
17
|
+
Lite::Statistics::Descriptive.frequencies(collection)
|
18
|
+
|
19
|
+
# - or -
|
20
|
+
|
21
|
+
collection.frequencies
|
22
|
+
```
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# Sample|Population Kurtosis
|
2
|
+
|
3
|
+
Alias: `kurtosis`
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
collection = [1, 1, 2, 3, 10]
|
7
|
+
results = 3.007017458066408
|
8
|
+
|
9
|
+
klass = Lite::Statistics::Descriptive.new(collection)
|
10
|
+
klass.sample_kurtosis
|
11
|
+
|
12
|
+
# - or -
|
13
|
+
|
14
|
+
Lite::Statistics::Descriptive.population_kurtosis(collection)
|
15
|
+
|
16
|
+
# - or -
|
17
|
+
|
18
|
+
collection.sample_kurtosis
|
19
|
+
```
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# Max
|
2
|
+
|
3
|
+
```ruby
|
4
|
+
collection = [1, 1, 2, 3, 10]
|
5
|
+
results = 10
|
6
|
+
|
7
|
+
klass = Lite::Statistics::Descriptive.new(collection)
|
8
|
+
klass.max
|
9
|
+
|
10
|
+
# - or -
|
11
|
+
|
12
|
+
Lite::Statistics::Descriptive.max(collection)
|
13
|
+
|
14
|
+
# - or -
|
15
|
+
|
16
|
+
# No monkey patch available as its part of Enumerable
|
17
|
+
```
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# Mean
|
2
|
+
|
3
|
+
Alias: `average`
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
collection = [1, 1, 2, 3, 10]
|
7
|
+
results = 3.4
|
8
|
+
|
9
|
+
klass = Lite::Statistics::Descriptive.new(collection)
|
10
|
+
klass.mean
|
11
|
+
|
12
|
+
# - or -
|
13
|
+
|
14
|
+
Lite::Statistics::Descriptive.mean(collection)
|
15
|
+
|
16
|
+
# - or -
|
17
|
+
|
18
|
+
collection.mean
|
19
|
+
```
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# Median
|
2
|
+
|
3
|
+
```ruby
|
4
|
+
collection = [1, 1, 2, 3, 10]
|
5
|
+
results = 2
|
6
|
+
|
7
|
+
klass = Lite::Statistics::Descriptive.new(collection)
|
8
|
+
klass.median
|
9
|
+
|
10
|
+
# - or -
|
11
|
+
|
12
|
+
Lite::Statistics::Descriptive.median(collection)
|
13
|
+
|
14
|
+
# - or -
|
15
|
+
|
16
|
+
collection.median
|
17
|
+
```
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# Midrange
|
2
|
+
|
3
|
+
Alias: `midextreme`
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
collection = [1, 1, 2, 3, 10]
|
7
|
+
results = 5.5
|
8
|
+
|
9
|
+
klass = Lite::Statistics::Descriptive.new(collection)
|
10
|
+
klass.midrange
|
11
|
+
|
12
|
+
# - or -
|
13
|
+
|
14
|
+
Lite::Statistics::Descriptive.midrange(collection)
|
15
|
+
|
16
|
+
# - or -
|
17
|
+
|
18
|
+
collection.midrange
|
19
|
+
```
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# Min
|
2
|
+
|
3
|
+
```ruby
|
4
|
+
collection = [1, 1, 2, 3, 10]
|
5
|
+
results = 1
|
6
|
+
|
7
|
+
klass = Lite::Statistics::Descriptive.new(collection)
|
8
|
+
klass.min
|
9
|
+
|
10
|
+
# - or -
|
11
|
+
|
12
|
+
Lite::Statistics::Descriptive.min(collection)
|
13
|
+
|
14
|
+
# - or -
|
15
|
+
|
16
|
+
# No monkey patch available as its part of Enumerable
|
17
|
+
```
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# Percentile from Value
|
2
|
+
|
3
|
+
Alias: `percentile`
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
collection = [1, 1, 2, 3, 10]
|
7
|
+
results = 80
|
8
|
+
|
9
|
+
klass = Lite::Statistics::Descriptive.new(collection)
|
10
|
+
klass.percentile_from_value(10)
|
11
|
+
|
12
|
+
# - or -
|
13
|
+
|
14
|
+
Lite::Statistics::Descriptive.percentile_from_value(collection, 10)
|
15
|
+
|
16
|
+
# - or -
|
17
|
+
|
18
|
+
collection.percentile_from_value(10)
|
19
|
+
```
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Proportions
|
2
|
+
|
3
|
+
```ruby
|
4
|
+
collection = [1, 1, 2, 3, 10]
|
5
|
+
results = {
|
6
|
+
1 => 0.4,
|
7
|
+
2 => 0.2,
|
8
|
+
3 => 0.2,
|
9
|
+
10 => 0.2
|
10
|
+
}
|
11
|
+
|
12
|
+
klass = Lite::Statistics::Descriptive.new(collection)
|
13
|
+
klass.proportions
|
14
|
+
|
15
|
+
# - or -
|
16
|
+
|
17
|
+
Lite::Statistics::Descriptive.proportions(collection)
|
18
|
+
|
19
|
+
# - or -
|
20
|
+
|
21
|
+
collection.proportions
|
22
|
+
```
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# Range
|
2
|
+
|
3
|
+
```ruby
|
4
|
+
collection = [1, 1, 2, 3, 10]
|
5
|
+
results = 9
|
6
|
+
|
7
|
+
klass = Lite::Statistics::Descriptive.new(collection)
|
8
|
+
klass.range
|
9
|
+
|
10
|
+
# - or -
|
11
|
+
|
12
|
+
Lite::Statistics::Descriptive.range(collection)
|
13
|
+
|
14
|
+
# - or -
|
15
|
+
|
16
|
+
collection.range
|
17
|
+
```
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# Sample|Population Size
|
2
|
+
|
3
|
+
Alias: `size`
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
collection = [1, 1, 2, 3, 10]
|
7
|
+
results = 5
|
8
|
+
|
9
|
+
klass = Lite::Statistics::Descriptive.new(collection)
|
10
|
+
klass.sample_size
|
11
|
+
|
12
|
+
# - or -
|
13
|
+
|
14
|
+
Lite::Statistics::Descriptive.population_size(collection)
|
15
|
+
|
16
|
+
# - or -
|
17
|
+
|
18
|
+
collection.sample_size
|
19
|
+
```
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# Sample|Population Skewness
|
2
|
+
|
3
|
+
Alias: `skewness`
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
collection = [1, 1, 2, 3, 10]
|
7
|
+
results = 1.328592117701344
|
8
|
+
|
9
|
+
klass = Lite::Statistics::Descriptive.new(collection)
|
10
|
+
klass.sample_skewness
|
11
|
+
|
12
|
+
# - or -
|
13
|
+
|
14
|
+
Lite::Statistics::Descriptive.population_skewness(collection)
|
15
|
+
|
16
|
+
# - or -
|
17
|
+
|
18
|
+
collection.sample_skewness
|
19
|
+
```
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# Sample|Population Standard Deviation
|
2
|
+
|
3
|
+
Alias: `standard_deviation`
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
collection = [1, 1, 2, 3, 10]
|
7
|
+
results = 3.3823069050575527
|
8
|
+
|
9
|
+
klass = Lite::Statistics::Descriptive.new(collection)
|
10
|
+
klass.sample_standard_deviation
|
11
|
+
|
12
|
+
# - or -
|
13
|
+
|
14
|
+
Lite::Statistics::Descriptive.population_standard_deviation(collection)
|
15
|
+
|
16
|
+
# - or -
|
17
|
+
|
18
|
+
collection.sample_standard_deviation
|
19
|
+
```
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# Sample|Population Standard Error
|
2
|
+
|
3
|
+
Alias: `standard_error`
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
collection = [1, 1, 2, 3, 10]
|
7
|
+
results = 1.512613632095123
|
8
|
+
|
9
|
+
klass = Lite::Statistics::Descriptive.new(collection)
|
10
|
+
klass.sample_standard_error
|
11
|
+
|
12
|
+
# - or -
|
13
|
+
|
14
|
+
Lite::Statistics::Descriptive.population_standard_error(collection)
|
15
|
+
|
16
|
+
# - or -
|
17
|
+
|
18
|
+
collection.sample_standard_error
|
19
|
+
```
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# Sum
|
2
|
+
|
3
|
+
```ruby
|
4
|
+
collection = [1, 1, 2, 3, 10]
|
5
|
+
results = 17
|
6
|
+
|
7
|
+
klass = Lite::Statistics::Descriptive.new(collection)
|
8
|
+
klass.sum
|
9
|
+
|
10
|
+
# - or -
|
11
|
+
|
12
|
+
Lite::Statistics::Descriptive.sum(collection)
|
13
|
+
|
14
|
+
# - or -
|
15
|
+
|
16
|
+
# No monkey patch available as its part of Enumerable
|
17
|
+
```
|