2016-10-24 16 views
2

例として提示されています。パンダの2つのデータセットのアライメントを見つける方法

2つのデータセット。 1つは1時間にわたって収集されたものです。その時間内に20分以上にわたって収集されたもの。

各データセットには、イベントが発生しているかどうかを表すtrue(-)またはfalse(_)の単一の列に変換できるイベントのインスタンスが含まれています。

DS1.event:

_-__-_--___----_-__--_-__---__ 

DS2.event:

__--_-__-- 

私は2つのデータの相関関係(専門用語が間違っているなら、私を修正)を自動化する方法を探していますDS2が最も多い(上のxが多い)DS1へのオフセットを設定し、見つける。これはおそらくマッチの正当性を判断するためのしきい値と一致するパーセンテージで終了します。

よう

_-__-_--___----_-__--_-__---__ 
       __--_-__-- 

DS1.start + 34min〜= DS2.start

追加情報:
DS1は、おおよそ1 Hzで記録しました。約30HzのDS2。これにより、100%クリーンマッチが起こる可能性は低くなります。

他の方法(パンダへの)は高く評価されますが、python/pandasは自分の使い捨てのものです。

+0

numpy.convolveを使用して、その最大値? – Evert

答えて

1

あなたは相互相関のようなものがほしいと思うように聞こえますか?

私は最初の数値表現に文字列を変換するので、あなたは、文字列 replace方法(例えば signal.replace("-", "1"))を使用していることを行うことができます 10

であなたの-_に代わる

に変換リストまたは数が少ない配列:

event1 = [int(x) for x in signal1] 
event2 = [int(x) for x in signal2] 

次に、それらの相互相関を計算します。

xcor = np.correlate(event1, event2, "full") 

これは、各タイムラグで相互相関値を与えます。あなただけの最大値を見つけたい、そしてそれが起こるその時のタイムラグ:

あなたのような何かを与える
nR = max(xcor) 
maxLag = np.argmax(xcor) # I imported numpy as np here 

Cross correlation value: 5 
Lag: 20 

あなたはここでラグ値でより興味を持っているようですね。あなたの2つのシグナルの相互相関の最大値(一致の度合い)を得るために必要な時間/位置のシフトの本質的な違いは何ですか?

np.correlatenp.convolveのドキュメントを参照してください。データの長さによって決まる方法と、信号の長さが異なる場合に起こる方法を(完全、同じ、または有効)決定してください。

+0

これを試してみます。 '-'と' _'は表現のためのものでした。実際にはブール型の値になります。これはサンプルの密度の違いを処理するのでしょうか、または最初に1セットのデータをサンプリングする必要がありますか? –

+0

申し訳ありません - 質問のサンプリングレートについての部分を見逃しました。相互相関と畳み込みの両方の場合、基本的に1つの信号を取り、それを他の信号にスライドさせます。あなたの2つの信号が本質的に異なるスケールにあるため、サンプルをダウンする必要があります。アップサンプリング/ダウンサンプリングなしでどうやってやるかわからない – Simon

関連する問題