class QME::MapReduce::CVAggregator
Public Class Methods
mean(frequencies)
click to toggle source
# File lib/qme/map/cv_aggregator.rb, line 34 def self.mean(frequencies) count = frequencies.values.reduce(0, :+) sum = frequencies.map {|key,value| key*value}.reduce(0,:+) result = 0 result = sum/count if count > 0 result end
median(frequencies)
click to toggle source
# File lib/qme/map/cv_aggregator.rb, line 6 def self.median(frequencies) set_size = frequencies.values.reduce(0, :+) offset = set_size.even? ? 1 : 0 left_position, right_position = [(set_size / 2), (set_size / 2) + offset] current_position = -1 + offset #compensate for integer math flooring median_left = nil median_right = nil frequencies.keys.sort.each do |value| current_position += (frequencies[value]) if current_position >= left_position && median_left == nil median_left = value return median_left if set_size.odd? end if current_position >= right_position median_right = value break end end median_left ||= 0 median_right ||= 0 (median_left + median_right)/2 end