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