IoT 數據預處理:線性重採樣全過程解析
不規則的 IoT 時間序列數據
在 IoT 中,數據通常會先通過感測器或其它相連的設備進行採集,然後被發送到雲端,以做進一步的處理、分析,或者作為構建智能 APP 的原型。
由於 IoT 設備發送數據的時間間隔不是固定的,所以 IoT 時間序列數據相對它們的採樣率來時是高度不規律的 —— 設備間或者跨設備。這可能會導致處理和分析數據變得非常麻煩,尤其是當多個感測器的數據結合在一起被分析的時候。
因此,將不規則、不均勻的時間序列數據重採樣為一致的、規律的數據是物聯網中數據預處理的一個重要步驟,處理好這個步驟能極大地促進對數據的連續處理過程。
WATTx 是柏林的一家合資企業,專註於包塊 IoT 在內的深度技術。在我們的一個最新項目中,我們在一個安裝了數百個感測器的建築物中建立了一個能源優化的原型。這些感測器收集溫度、濕度、光照和運動等信息。你可以在下圖中看到其中一個樓層的設置地圖:
智能辦公室布局
分析這些來自辦公室感測器的數據,我們可以發現一個有趣的現象:
日常溫度平均值曲線圖
該圖描述了平均溫度曲線構成的簇。該圖顯示錶明,在大量的房間中,夜間和白天都存在過熱現象,進一步表明通風系統沒有達到最優化,從而造成了能源浪費。
使用 Pandas 重採樣
在進行類似上面的那樣分析數據前,還有一個非常關鍵的預處理步驟 —— 將不規律的事件序列數據轉換為規律的、一致的數據。這樣做能避免我們在隨後處理各設備間不規律、不一致的時間戳時所會遇到的痛苦。
在 WATTx,我們使用得最多的是 Python 及其數據科學庫,因此,完成重採樣功能的最佳選擇自然而然就是 Pandas。
我們先來看看一個簡單的使用不均勻間隔數據點模擬出來的溫度曲線的例子:
現在我們來函數 mean 和線性插值來對這個溫度曲線進行頻率為 50 分鐘(任意選擇的)的重採樣。
pd.resample(tseries, "50min", "mean").interpolate()
如上圖所示,時間序列的重採樣結果與原始數據的結果不完全匹配了,而是有了一定的漂移。這是由於 pandas 的重採樣函數是基於時間操作完成的,這使得它很容易收到原始主句和預期目標頻率的影響。
兩步完成 IoT 重採樣處理
為了克服這個矛盾,我們提出了一個解決方案,解決了我們所有需要線性插值的感測器所面臨的這個的問題。
該方法由兩步重採樣過程組成,我們(1)首先使用 mean 作為聚合函數和線性插值將原始時間序列上採樣為一個高頻率(例如 1 分鐘或者 1 秒,這主要依賴於初始數據的解析度),(2)然後使用一個簡單的 forward 填充聚合將該數據再下採樣為所預期的目標頻率。
將這個方案運行到例子中的曲線,其代碼類似這樣的:
tmp = pd.resample(tseries, "1min", "mean").interpolate()
再來看看執行結果:
顯然,這兩步重採樣過程的結果曲線與底層數據匹配得更好,而且它在我們所有需要線性重採樣的物聯網感測器中都是一致的。
增加魯棒性:處理缺失的數據
我們想解決的一個額外的情形是當時間序列中有非常大的空隙中缺失數據時進行重採樣的情形。這種情形可能是 感測器在幾個小時內處於離線狀態。
下面是模擬感測器在夜間(大約晚上 10 點到凌晨 6 點)掉線時的一個溫度曲線的例子:
如果我們對這些時間序列重採樣,其數據點結果將會是:
很顯然,重採樣的數據與數據丟失期間的真實溫度數據不匹配。為了涵蓋這種情形,我們引進了一個參數,用來表示為了能夠插值,數據缺失的間隔最大為多大。如果間隙大於這個指定的閾值(我們發現在我們所遇到的情形中,1 小時是最佳選擇),數據點不會被插值,而是返回一個 NaN(Not a Number)值代替。
加上這個功能,我們就能得到我們想要的結果了;沒有數據傳輸的期間返回的採樣數據是空值:


※精選!15 個必備的 VSCode 插件
※CSS 布局經典問題初步整理
※MySQL-事務的啟動/設置/鎖/解鎖——入門
※演算法-快速排序演算法
※JDBC與JAVA資料庫編程
TAG:青峰科技 |
※MIT—線性代數(上)
※線性代數與數據學習:MIT教授Gilbert Strang幫你打下堅實的數學基礎
※數據結構-線性表(順序表與鏈表的基本知識 以及ArrayList 源碼分析)
※AI教程/線性化圖標
※線性資本鄭燦:AIOT 正在從「工具」演變為「方法論」
※計算MOSFET非線性電容
※深度解析線性速寫應該怎麼用線?
※可視化線性修正網路:看Fisher-Rao範數與泛化之間的關係
※AI教程/線性幾何圖案
※AI Talk:TensorFlow 分散式訓練的線性加速實踐
※MiniWare再秀實力!推出微型多模塊線性可編程數字電源,功率90W
※線性延遲反饋控制系統分析及應用
※數據結構-線性表-順序表的代碼詳解
※PyTorch進階之路(二):如何實現線性回歸
※資源|用Python和NumPy學習《深度學習》中的線性代數基礎
※線性模型可解釋一定比DNN高?UCSD科學家:大錯特錯!
※E3:非線性驚悚真人影像作品《Telling Lies》新預告
※用Python和NumPy學習《深度學習》中的線性代數基礎
※NeurIPS 2018|BP不用算梯度,這樣的線性反向傳播也能Work!
※BP不用算梯度,這樣的線性反向傳播也能Work!