随机相关时间值的简单移动平均值

时间:2017-04-07 12:43:14

标签: python bash awk gnuplot

我是初学程序员,正在寻求简单移动平均SMA的帮助。我正在处理列文件,其中第一个与时间相关,第二个是值。时间间隔是随机的,也是值。通常文件不大,但过程是长时间收集数据。最后文件看起来类似于:

+-----------+-------+
|   Time    | Value |
+-----------+-------+
| 10        |     3 |
| 1345      |    50 |
| 1390      |     4 |
| 2902      |    10 |
| 34057     |    13 |
| (...)     |       |
| 898975456 |    10 |
+-----------+-------+

整个过程行数大约为60k-100k。

然后我试图用一些时间窗口“平滑”数据。为此我正在使用SMA。 [AWK_method]

awk 'BEGIN{size=$timewindow} {mod=NR%size; if(NR<=size){count++}else{sum-=array[mod]};sum+=$1;array[mod]=$1;print sum/count}' file.dat

要使用预定义的$timewindow实现SMA的正常工作,我创建用零填充的线性增量。接下来,我使用diffrent $timewindow运行一个脚本,然后观察结果。

+-----------+-------+
|   Time    | Value |
+-----------+-------+
| 1         |     0 |
| 2         |     0 |
| 3         |     0 |
| (...)     |       |
| 10        |     3 |
| 11        |     0 |
| 12        |     0 |
| (...)     |       |
| 1343      |     0 |
| (...)     |       |
| 898975456 |    10 |
+-----------+-------+

对于小数据来说,这是相对舒适的,但现在它耗费时间,并且创建的文件开始变得太大了。我也熟悉Gnuplot,但SMA还有地狱......

所以这是我的问题:

  • 是否可以更改awk解决方案以绕过零填充数据?
  • 您是否使用bash推荐任何其他解决方案?
  • 我也考虑学习python,因为经过6个月的学习bash,我必须知道它的局限性。我是否能在不创建大数据的情况下在python中解决这个问题?

我会很乐意提供任何形式的帮助或建议。

祝你好运!

[AWK_method] http://www.commandlinefu.com/commands/view/2319/awk-perform-a-rolling-average-on-a-column-of-data

2 个答案:

答案 0 :(得分:0)

你包含了一个python标签,检查了跟踪:

http://traces.readthedocs.io/en/latest/

以下是其他一些见解:

Moving average for time series with not-equal intervls

http://www.eckner.com/research.html

https://stats.stackexchange.com/questions/28528/moving-average-of-irregular-time-series-data-using-r

https://en.wikipedia.org/wiki/Unevenly_spaced_time_series

用于更多研究的粗体关键词:

  

在统计学,信号处理和计量经济学中,不均匀(或不等于或不规则)间隔时间序列是观察时间和值对(tn,Xn)的序列,其观察时间严格增加。与等距时间序列相反,观察时间的间隔不是恒定的。

答案 1 :(得分:0)

awk '{Q=$2-last;if(Q>0){while(Q>1){print "| "++i"        |     0 |";Q--};print;last=$2;next};last=$2;print}'   Input_file