Class: QME::MapReduce::CVAggregator

Inherits:
Object
  • Object
show all
Defined in:
lib/qme/map/cv_aggregator.rb

Class Method Summary collapse

Class Method Details

.mean(frequencies) ⇒ Object



34
35
36
37
38
39
40
# 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) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 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