descriptive-statistics 1.3.4 → 1.3.5

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.
@@ -1,3 +1,12 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
3
+ - jruby-18mode
4
+ - jruby-19mode
5
+ - jruby-head
6
+ - 1.9.3
7
+ - 1.9.2
8
+ - rbx-18mode
9
+ - rbx-19mode
10
+ - ruby-head
11
+ - 1.8.7
12
+ - ree
data/README.md CHANGED
@@ -3,8 +3,12 @@
3
3
  This gem calculates descriptive statistics including measures of central tendency (e.g. mean, median mode), dispersion
4
4
  (e.g. range, and quartiles), and spread (e.g variance and standard deviation).
5
5
 
6
+ Tested against ruby 1.8.7, 1.9.2, 1.9.3, ruby-head, jruby-18mode, jruby-19mode, jruby-head, rbx-18mode, rbx-19mode, and
7
+ ree
8
+
6
9
  [![Build Status](https://secure.travis-ci.org/jtescher/descriptive-statistics.png)]
7
10
  (http://travis-ci.org/jtescher/descriptive-statistics)
11
+ [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/jtescher/descriptive-statistics)
8
12
  ## Installation
9
13
 
10
14
  Add this line to your application's Gemfile:
@@ -61,12 +65,12 @@ If you want to monkey patch descriptive statistics methods into Enumerable, you
61
65
  require 'descriptive-statistics'
62
66
 
63
67
  module Enumerable
64
- include DescriptiveStatistics::All
68
+ include DescriptiveStatistics::AllMethods
65
69
 
66
70
  # Warning: hacky evil meta programming. Required because classes that have already included
67
71
  # Enumerable will not otherwise inherit the statistics methods.
68
- DescriptiveStatistics::All.instance_methods.each do |m|
69
- define_method(m, DescriptiveStatistics::All.instance_method(m))
72
+ DescriptiveStatistics::AllMethods.instance_methods.each do |m|
73
+ define_method(m, DescriptiveStatistics::AllMethods.instance_method(m))
70
74
  end
71
75
  end
72
76
  ```
@@ -10,5 +10,5 @@ class DescriptiveStatistics
10
10
  @data = data
11
11
  end
12
12
 
13
- def_delegators :@data, *(Array.instance_methods - [:object_id, :__send__])
13
+ def_delegators :@data, *(Array.instance_methods - [:object_id, :__id__, :__send__, 'object_id', '__id__', '__send__'])
14
14
  end
@@ -22,7 +22,7 @@ class DescriptiveStatistics
22
22
 
23
23
  def mode
24
24
  return if length < 1
25
- frequency_distribution = each_with_object(Hash.new(0)) { |value, hash| hash[value] += 1 }
25
+ frequency_distribution = inject(Hash.new(0)) { |hash, value| hash[value] += 1; hash }
26
26
  top_2 = frequency_distribution.sort { |a,b| b[1] <=> a[1] } .take(2)
27
27
  if top_2.length == 1
28
28
  top_2.first.first # Only one value in distribution, so it's the mode.
@@ -1,19 +1,35 @@
1
1
  class DescriptiveStatistics
2
2
  module Shape
3
+
3
4
  def skewness
4
- return if length < 1
5
+ return if length == 0
5
6
  return 0 if length == 1
6
- sum_cubed_deviation = inject(0) {|sum, value| sum + (value - mean) ** 3}
7
- cubed_standard_deviation = standard_deviation ** 3
8
7
  sum_cubed_deviation / ((length - 1) * cubed_standard_deviation.to_f)
9
8
  end
10
9
 
11
10
  def kurtosis
12
- return if length < 1
11
+ return if length == 0
13
12
  return 0 if length == 1
14
- sum_quarted_deviation = inject(0) {|sum, value| sum + (value - mean) ** 4}
15
- quarted_standard_deviation = standard_deviation ** 4
16
13
  sum_quarted_deviation / ((length - 1) * quarted_standard_deviation.to_f)
17
14
  end
15
+
16
+ private
17
+
18
+ def sum_cubed_deviation
19
+ inject(0) {|sum, value| sum + (value - mean) ** 3}
20
+ end
21
+
22
+ def cubed_standard_deviation
23
+ standard_deviation ** 3
24
+ end
25
+
26
+ def sum_quarted_deviation
27
+ inject(0) {|sum, value| sum + (value - mean) ** 4}
28
+ end
29
+
30
+ def quarted_standard_deviation
31
+ standard_deviation ** 4
32
+ end
33
+
18
34
  end
19
35
  end
@@ -1,5 +1,5 @@
1
1
  module Descriptive
2
2
  module Statistics
3
- VERSION = "1.3.4"
3
+ VERSION = "1.3.5"
4
4
  end
5
5
  end
@@ -25,7 +25,7 @@ describe DescriptiveStatistics::Shape do
25
25
  end
26
26
 
27
27
  it 'returns the measure of skewness of the data as high when skewed' do
28
- DescriptiveStatistics.new([50,10,1,1,1]).kurtosis.should == 2.45740139974872
28
+ DescriptiveStatistics.new([99,10,1,1,1]).kurtosis.should == 2.56586117539186
29
29
  end
30
30
 
31
31
  it 'returns 0 if only one element' do
@@ -2,15 +2,17 @@ require 'spec_helper'
2
2
 
3
3
  describe DescriptiveStatistics do
4
4
  it 'should allow hacky monkey patches to add methods to structures like arrays' do
5
- module Enumerable
6
- include DescriptiveStatistics::AllMethods
5
+ if RUBY_VERSION == '1.9.3' and RUBY_ENGINE == 'ruby' # Ignore older versions of ruby and Rubinius
6
+ module Enumerable
7
+ include DescriptiveStatistics::AllMethods
7
8
 
8
- # Warning: hacky evil meta programming. Required to have classes that include array get the methods too.
9
- DescriptiveStatistics::AllMethods.instance_methods.each do |m|
10
- define_method(m, DescriptiveStatistics::AllMethods.instance_method(m))
9
+ # Warning: hacky evil meta programming. Required to have classes that include array get the methods too.
10
+ DescriptiveStatistics::AllMethods.instance_methods.each do |m|
11
+ define_method(m, DescriptiveStatistics::AllMethods.instance_method(m))
12
+ end
11
13
  end
12
- end
13
14
 
14
- [1,2,3].mean.should == 2
15
+ [1,2,3].mean.should == 2
16
+ end
15
17
  end
16
18
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: descriptive-statistics
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.4
4
+ version: 1.3.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-05 00:00:00.000000000 Z
12
+ date: 2012-10-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -85,7 +85,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
85
85
  version: '0'
86
86
  segments:
87
87
  - 0
88
- hash: -3732408609999569798
88
+ hash: 4156932844491246834
89
89
  required_rubygems_version: !ruby/object:Gem::Requirement
90
90
  none: false
91
91
  requirements:
@@ -94,7 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
94
  version: '0'
95
95
  segments:
96
96
  - 0
97
- hash: -3732408609999569798
97
+ hash: 4156932844491246834
98
98
  requirements: []
99
99
  rubyforge_project:
100
100
  rubygems_version: 1.8.24