簡體   English   中英

Pandas滾動窗口功能可以抵消數據

[英]Pandas rolling window function offsets data

我試圖使用Pandas rolling_window函數,win_type ='gaussian'或win_type ='general_gaussian'。 我有一個按日期時間索引的時間序列數據集,我需要一個平滑函數來減少噪音。 我想避開boxcar,而是使用高斯加權。 我已經嘗試了很多范圍的窗口大小和std(高斯),以及窗口大小,功率和寬度值(對於一般的高斯),並且我始終得到相同的結果:平滑輸出偏移低於原始輸入數據。 這是同一個問題,但在這里仍然沒有答案。

我嘗試使用的特定代碼行是:

dNorth_smooth = rolling_window(s, window=40, win_type='gaussian', std=30, center=True, freq='15S')

其中's'是日期時間索引的Pandas數據幀中的單列數據。 在這種情況下,'s'是以米為單位的位置,以15秒的時間間隔。 所以,我的窗口大小是40行,或40 * 15 = 600秒= 10分鍾。 目前尚不清楚std參數究竟是指什么,但我認為這是在頻域中,並且會比窗口大小小一些,控制高斯曲線的形狀(無論如何,我已經嘗試了很多標准值;如果std非常大,則不會發生偏移,但這是因為高斯曲線與窗口相比變得如此寬,以至於你基本上使用了一個boxcar)。 'center'和'freq'參數似乎不會改變輸出。 其他可選參數似乎也無關緊要。

一旦我有更高的聲譽,我可以發布一個情節來幫助解釋。 但請看上面鏈接問題的情節,因為這是我遇到的完全相同的問題。 另外要注意的是:棚車窗口(這相當於rolling_mean) 沒有這個彌補問題。 但是,它似乎與所有其他窗口加權函數(triang,blackman等)一起存在。

由於此問題(或類似的鏈接問題)沒有發布特定的Pandas解決方案,我使用標准的numpy和scipy函數發布解決方案。 這將使用高斯加權產生平滑曲線,並適用於任何幅度數據(沒有偏移問題)。

def smooth_gaussian(data,window,std):
  g = sp.signal.gaussian(window,std,sym=True)
  con = np.convolve(g/g.sum(),data,mode='valid')
  con_shift = np.r_[np.full((window*0.5),np.nan),con,np.full((window*0.5),np.nan)]
  return con_shift   

結果數據集比輸入數據集短於窗口長度,因為第一個和最后一個“平滑”數據點從任一端出現在(窗口* 0.5)處。 返回的變量con_shift解釋了這一點,並使平滑后的數據相對於輸入數據居中,這樣它們的長度相同,可以一起繪制。 window參數是移動窗口的大小, std是標准偏差,控制高斯曲線的形狀(我將我的設置為0.1 *窗口)。 請注意, con_shift對稱,窗口大小必須是奇數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM