【发布时间】:2017-09-02 20:38:01
【问题描述】:
我是初学者,正在寻求简单移动平均线 SMA 方面的帮助。我正在使用列文件,其中第一个与时间有关,第二个与值有关。时间间隔是随机的,值也是随机的。通常文件不大,但过程是长时间收集数据。最后文件看起来类似于:
+-----------+--------+ |时间 |价值 | +-----------+-------+ | 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 的正常工作,我创建了填充零的线性增量。接下来,我使用不同的$timewindow 运行脚本并观察结果。
对于小数据来说还是比较舒服的,但是现在比较费时间,而且创建的文件也开始太大了。我对 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
【问题讨论】:
-
该样本随机数据的预期输出是什么?