我是初学程序员,正在寻求简单移动平均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_method] http://www.commandlinefu.com/commands/view/2319/awk-perform-a-rolling-average-on-a-column-of-data
答案 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