以编程方式分析折线图

时间:2011-11-05 19:59:43

标签: iphone ios algorithm graph analysis

我得到一个折线图,Y轴有值,X轴有时间。 X轴有5分钟的分辨率。我正在寻找某种算法来帮助我教iPhone知道线路的去向。我从未参加算法课程,所以任何帮助都会受到赞赏。我需要知道的是,这条线是否连续上升了一定数量的段。

现在我正在实施以下内容: 如果当前数据点的Y值大于前一个,则将斜率计数器递增1。如果相等,则将斜率计数器递增0.如果该值较小,则递减斜率计数器。

if(current>previous)
{
  counter++;
}
else if(current<previous)
{
  counter--;
}

这会产生类似锯齿的图形,更易于分析。但是由于窗口大小的问题,图形可能会“反弹”。这是我希望我的逻辑有问题的地方。

我希望有一种CS算法来帮助我完成这项任务,因为我甚至不知道在谷歌中输入什么类型的关键字来解决这个问题。

2 个答案:

答案 0 :(得分:2)

如果您需要知道的是,该线路是否连续上升了一定数量的线段,为什么不只是让计数器增加直到达到特定数量的线段,或者如果线路发生故障则重置,例如:

int counter = 0;
for (int i = 1; i < datasize; i++) {
  if (data[i] > data[i - 1]) {
    ++counter;
    if (counter == THRESHOLD) {
      println("trending up at %d.", i);
    }
  } else if (data[i] < data[i - 1]) {
    counter = 0;
  }
}

如果您只想查看该线路的整体趋势是上升还是下降,您可以这样做:

if (data[datasize - 1] > data[0]) {
  println("Overall trend is up.");
} else if (data[datasize - 1] < data[0]) {
  println("Overall trend is down.");
} else {
  print("Overall trend is flat.");
}

如果你想要更好的预测 - 比如,这是这个时间点的线,这里是对将来会有什么样的猜测,有两种途径可以探索。第一个是“回归分析”或“回归线”。这对于通常随着时间的推移而增加或减少的数据最有效,并且可以获得这些增加或减少的速率(线的平均斜率)。

第二个是“快速傅里叶变换” - 这对于像波浪一样的线路很有用,因为它们保持在最小和最大界限之间,并且有一些规则周期(或者是一些常规周期,这就是方程式将神圣。)

玩得开心。这是一个值得解决的令人愉快的问题。

答案 1 :(得分:1)

您可能正在寻找的是Linear Regression,它正在估算与您的数据的良好直线匹配(在一个最小二乘意义上)。这条线的斜率可以帮助你告诉&#34;它在哪里&#34;,这取决于底层模型的行为。