2017-04-07 37 views
1

我是初级程序员,正在寻找简单移动平均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的正确工作的i-创建用零填充线性增量。接下来,我使用不同的$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

+0

该样本随机数据的te期望输出是什么? –

回答

0

你提供一个蟒蛇标签,检查出的痕迹:

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

这里有一些其他的见解:

Moving average for time series with not-equal intervls

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

以粗体0

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)严格增加观测时间。与等间隔的时间序列相反,观察时间的间隔不是恒定的。

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