データをいろいろと扱っていると、データの特定のイベントを切り出したりとか、タイミング同定をしたくなる時が多くなってきます。
これにピーク値同定を組み合わせることで、割と簡単にタイミング同定でき、かつデータをきれいに切り出すことが可能になります。
今回はそんな感じで、データの二値化と微分、ピーク値同定までの処理までをやってみましょう。甘味自身もこのあたりは毎回調べながらやっているから、覚え書きとしてもちょうどいいかもしれません(笑)。
まずはサンプル用のデータを用意。
#必要なパッケージのインポート
import numpy as np
import matplotlib.pyplot as plt
testdata = np.loadtxt('testdata.csv',delimiter =',')
plt.plot(testdata)
二値化はfor文とif文の組み合わせでやるのが良さそう
#必要なパッケージのインポート
import numpy as np
import matplotlib.pyplot as plt
testdata = np.loadtxt('testdata.csv',delimiter =',')
plt.plot(testdata)
testdata2 = np.zeros([len(testdata),1])
#二値化用の空の配列を作る。
for i in range(len(testdata)):
#テストデータの長さ分のループ処理をする
if testdata[i]>2.5:
#もしもテストデータのi行目が2.5より大きかったら
testdata2[i]=1
#testdata2のi行目に1を代入する
else:
testdata2[i]=0
#それ以外の場合は0を代入
plt.plot(testdata2)
微分はnumpyのnp.diff()を使う
#必要なパッケージのインポート d_testdata2 = np.diff(testdata2,axis=0) d_testdata2 = np.vstack([0,d_testdata2]) plt.plot(d_testdata2)
タイミング同定はscipyのsignal.argrelmax()もしくはargrelmin()を使う。
#必要なパッケージのインポート from scipy import signal t1 = signal.argrelmax(d_testdata2)[0] t2 = signal.argrelmin(d_testdata2)[0] lendata = np.ones(len(t1)) plt.scatter(t1,lendata,color = 'red') plt.scatter(t2,-lendata,color = 'red')




