2017-04-07 98 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