使用Ruby查找数据趋势线?

时间:2018-07-20 10:57:18

标签: ruby statistics analytics trendline

我有一个数据集,其中包含来自我站点的用户会话号,

page_1 = [4,2,4,1,2,6,3,2,1,6,2,7,0,0,0]
page_2 = [6,3,2,3,5,7,9,3,1,6,1,6,2,7,8]
...

以此类推。

我想确定页面的增长趋势是正的还是负的,但是我也希望页面的增长/下降超过一定的阈值。

Python拥有大量的解决方案和此类任务的库,而Ruby只有一个gem(trendline),其中没有代码。在我开始学习如何使用数学方法之前,也许有人有可行的解决方案?

1 个答案:

答案 0 :(得分:2)

找到趋势线的数学公式,您可以轻松定义自定义方法。 例如,在此https://math.stackexchange.com/questions/204020/what-is-the-equation-used-to-calculate-a-linear-trendline之后,我猴子修补了Array类。

class Array

  def trend_line
    points = map.with_index { |y, x| [x+1, y] }
    n = points.size
    summation_xy = points.map{ |e| e[0]*e[1] }.inject(&:+)
    summation_x = points.map{ |e| e[0] }.inject(&:+)
    summation_y = points.map{ |e| e[1] }.inject(&:+)
    summation_x2 = points.map{ |e| e[0]**2 }.inject(&:+)
    slope = ( n * summation_xy - summation_x * summation_y ) / ( n * summation_x2 - summation_x**2 ).to_f
    offset = ( summation_y - slope * summation_x ) / n.to_f
    {slope: slope, offset: offset}
  end

end

p page_1.trend_line #=> {:slope=>-0.1357142857142857, :offset=>3.7523809523809524}
p page_2.trend_line #=> {:slope=>0.1, :offset=>3.8}

坡度使您获得增长:符号指示方向(+增长,-下降),该值表明增长的速度。