5

次のようなデータセットがあります: data0data1data2 (時間対電圧データに類似)

次のようなコードを使用してデータセットをロードしてプロットすると:

import pandas as pd
import numpy as np
from scipy import signal
from matplotlib import pylab as plt

data0 = pd.read_csv('data0.csv')
data1 = pd.read_csv('data1.csv')
data2 = pd.read_csv('data2.csv')

plt.plot(data0.x, data0.y, data1.x, data1.y, data2.x, data2.y)

私は次のようなものを得ます:

3 つのデータセットすべてをプロットする

ここで、data0 と data1 を関連付けようとします。

shft01 = np.argmax(signal.correlate(data0.y, data1.y)) - len(data1.y)
print shft01
plt.figure()
plt.plot(data0.x, data0.y,
         data1.x.shift(-shft01), data1.y)
fig = plt.gcf()

出力付き:

-99

data1 のシフトされたバージョン

これは期待どおりに機能します。しかし、data2 で同じことを試すと、次のようなプロットが得られます。

data2 のシフトされたバージョン

の正のシフトで410。仕組みを理解していないだけだと思いますが、データセットを整列させるためにpd.shift()使用できることを望んでいました. pd.shift()私が理解している限り、からの戻り値correlate()はデータセットがどれだけ離れているかを教えてくれるので、シフトを使用してそれらをオーバーラップできるはずです。

4

2 に答える 2

8

panda.shift()x 軸に沿って曲線をシフトする正しい方法ではありません。ポイントの X 値を調整する必要があります。

plt.plot(data0.x, data0.y)
for target in [data1, data2]:
    dx = np.mean(np.diff(data0.x.values))
    shift = (np.argmax(signal.correlate(data0.y, target.y)) - len(target.y)) * dx
    plt.plot(target.x + shift, target.y)

出力は次のとおりです。

ここに画像の説明を入力

于 2013-10-29T03:41:59.120 に答える