目的
なにやら適当な時系列データなどを収集して保管するとする。
集め方によっては一定の区間同じ値を出し続けることがあるが,その間の分を記録しているのは容量を圧迫する。
例えば以下の図のように0が長く続く区間が複数あり,これを除去したいとする。
- 0がN以上連続したデータを取り除く
- 0が異常に長く続くのを除去したいのであって0そのものは残っていてもよい。
実装
- まず,上のdataのうち,0でない箇所のindexを抽出する。
- index番号の間隔をdiffを用いて計算。
- 間隔がN以上になるindexを抽出。
- 抜き出すべきindexをarrangeで作成。
- Pandasのdfからdropで指定して一気に落とす。
以下のコードはサイズ調整が少し入っている。
valididx = np.where((data>1e-5) | (data<-1e-5)) # Non zero only count rigid zeros
spaceidx=np.diff(valididx,prepend=0)
delidx=np.where(spaceidx>600) # Assume N = 600
delidxs = []
for deli in delidx[1]:
delidxs.extend(np.arange(valididx[0][deli-1],valididx[0][deli]))
droppedbuff = df.drop(delidxs,axis=0)
余分なデータを落とすと以下のようにスッキリ見える。