データをいろいろと扱っていると、データの特定のイベントを切り出したりとか、タイミング同定をしたくなる時が多くなってきます。
これにピーク値同定を組み合わせることで、割と簡単にタイミング同定でき、かつデータをきれいに切り出すことが可能になります。
今回はそんな感じで、データの二値化と微分、ピーク値同定までの処理までをやってみましょう。甘味自身もこのあたりは毎回調べながらやっているから、覚え書きとしてもちょうどいいかもしれません(笑)。
まずはサンプル用のデータを用意。
#必要なパッケージのインポート 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')