class TimeSeries

Attributes

data_points[R]

Public Class Methods

new(*args) click to toggle source
# File lib/time_series/time_series.rb, line 6
def initialize(*args)
  case args.length
  when 1 then data_points = args[0]
  when 2 then data_points = args[0].zip(args[1]).collect { |dp| DataPoint.new(dp[0], dp[1]) }
  else data_points = []
  end

  @data_points = {}
  self << data_points
end

Public Instance Methods

<<(*data_points) click to toggle source
# File lib/time_series/time_series.rb, line 17
def <<(*data_points)
  data_points.flatten.each do |data_point|
    @data_points[data_point.timestamp] = data_point
  end
end
at(*timestamps) click to toggle source
# File lib/time_series/time_series.rb, line 23
def at(*timestamps)
  results = @data_points.values_at(*timestamps)
  results = results[0] if results.length == 1

  return results
end
each(&block) click to toggle source
# File lib/time_series/time_series.rb, line 44
def each(&block)
  Hash[@data_points.sort].values.each(&block)
end
last(n = 1) click to toggle source
# File lib/time_series/time_series.rb, line 48
def last(n = 1)
  Hash[@data_points.sort.last(n)].values
end
length() click to toggle source
# File lib/time_series/time_series.rb, line 52
def length
  @data_points.length
end
slice(timeframe) click to toggle source
# File lib/time_series/time_series.rb, line 30
def slice(timeframe)
  from, to = timeframe[:from], timeframe[:to]

  data_points = @data_points.select do |t, data|
    case [!from.nil?, !to.nil?]
    when [true, true] then t >= from and t <= to
    when [true, false] then t >= from
    when [false, true] then t <= to
    end
  end

  return self.class.new data_points.keys, data_points.values
end
to_a() click to toggle source
# File lib/time_series/time_series.rb, line 56
def to_a
  Hash[@data_points.sort].values
end