looking for a library to do some basic statistics computations, check this out, then.

#  Author : Selasie Agbavor <volsbit@gmail.com>

#  Source : Ruby 

 

class Array
  def even?
    self.length % 2 == 0
  end

  def sum
    sum = 0
    self.each { |i| sum += i }
    sum
  end
end
class Stats
  def initialize(*data)
    @data = data.map { |s| s.to_i}
    @size = data.length
    variance
  end

  def size
    @size
  end

  def data
    @data
  end

  def mean
    mean = @data.sum / @size.to_f
  end

  def mode
    frequencies = Hash.new(0)
    @data.each{ |i| frequencies[i] += 1 }
    highest_frequency = frequencies.values.max
    frequencies.keys.select { |key| frequencies[key] == highest_frequency }
  end

  alias :average :mean

  def median
    max_index = @size – 1
    sort_data = @data.sort
    if @data.even?
      mid_1 = max_index / 2
      mid_2 = mid_1 + 1
      (sort_data[mid_1] + sort_data[mid_2]) / 2
    else
      sort_data[(max_index + 1) / 2]
    end
  end

  def variance
    devi_set = @data.map { |datum| datum – mean }
    sum = devi_set.map{ |datum| datum * datum}.sum
    @variance = sum / @size #  or @size – 1
  end

  def standard_deviation
    Math.sqrt(@variance)
  end

  def range
    @data.max – @data.min
  end

end

#  create a data object like so :

#  my_school_data = Stats.new(2, 3, 4, 5, 6,  7)

#  puts my_school_data.mean => 4.5

#  puts my_school_data.standard_deviation => 1.70782512765993

Post a Comment

*
*