我有一段時間以來的Internet測量實驗結果,如下圖所示。我正在做大熊貓的時間序列分析。數據有一定的下降,這是由於服務器中斷。我正在尋找平滑數據的好方法。用已知傾斜平滑時間序列的函數
在較簡單的內置平滑函數中,pd.rolling_max()
提供了相當好的估計。然而它高估了一點。我還嘗試編寫自己的平滑函數,當下降> 20%時,函數會傳遞值。這也提供了相當好的估計,但是閾值是任意設定的。
def my_smooth(win, thresh = 0.80):
win = win.copy()
for i, val in enumerate(win):
if i > 1 and val < win[i-1] * thresh:
win[i] = win[i-1]
return win[-1]
ts = pd.rolling_apply(ts, 6, my_smooth)
我的問題是,這種類型的時間序列具有更好的平滑功能,具體的特點是什麼? (即,它是事件的計數,並且在特定時間計數下的主要測量誤差很大)。另外,我建議的平滑功能可以減少臨時或優化嗎?
的[HP-濾波器(http://statsmodels.sourceforge.net/devel/generated/statsmodels.tsa.filters.hp_filter.hpfilter.html#statsmodels.tsa.filters.hp_filter.hpfilter)或來自statsmodels的[kalman過濾器](http://statsmodels.sourceforge.net/devel/generated/statsmodels.tsa.kalmanf.kalmanfilter.Kalmanfilter.html#statsmodels.tsa.kalmanf.kalmanfilter.KalmanFilter)應該很好。 – TomAugspurger 2014-08-27 12:39:57
濾波器/平滑器的適當選擇取決於您要對平滑數據執行的操作。話雖如此,你也可以嘗試'rolling_median'。 – 2014-08-27 12:49:36
@WarrenWeckesser,謝謝,除其他外,我想將趨勢線擬合成部分數據。我已經嘗試過'rolling_median'(添加圖片到帖子);在窗口很小的情況下會出現幾個不好的測量結果,這樣做效果不好。如果窗口被放大,它會消耗太多。 – Hadi 2014-08-27 12:57:44