Array#statistics

Basic descriptive statistics for an Array in ruby. Probably don’t want to run it on arrays that contain non-numeric objects. Haven’t tested it, but it looks mostly right.

class Array
  def statistics
    mean = sum.to_f / length
    i = length / 2 - 1
    median =
      if length % 2 == 0
        (self[i] + self[i + 1]).to_f / 2
      else
        self[i]
      end
    { :n => length, :mean => mean, :median => median, :min => self.min, :max => self.max }
  end
end

Here’s how it works:

>> [1, 2, 3].statistics
=> {:min=>1, :n=>3, :mean=>2.0, :max=>3, :median=>1}
>> [0, 1, 2, 3].statistics
=> {:min=>0, :n=>4, :mean=>1.5, :max=>3, :median=>1.5}

Someone fix it for me if it’s buggy! It could use some robustness checks too. But for now it pleases me to say no more.


About this entry