Help us understand the problem. What is going on with this article?

numpy/pandasで同じ値を連続ある程度連続した箇所を取り除く

目的

なにやら適当な時系列データなどを収集して保管するとする。
集め方によっては一定の区間同じ値を出し続けることがあるが,その間の分を記録しているのは容量を圧迫する。

例えば以下の図のように0が長く続く区間が複数あり,これを除去したいとする。

  • 0がN以上連続したデータを取り除く
  • 0が異常に長く続くのを除去したいのであって0そのものは残っていてもよい。

image.png

実装

  1. まず,上のdataのうち,0でない箇所のindexを抽出する。
  2. index番号の間隔をdiffを用いて計算。
  3. 間隔がN以上になるindexを抽出。
  4. 抜き出すべきindexをarrangeで作成。
  5. 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)

余分なデータを落とすと以下のようにスッキリ見える。

image.png

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away