作为一个例子。
两个数据集。一个小时内收集一个。一小时内在20分钟内收集一次。
每个数据集都包含可以转换为true(-
)或false(_
)单个列的事件实例,表示事件是否正在发生。
DS1.event:
_-__-_--___----_-__--_-__---__
DS2.event:
__--_-__--
我正在寻找一种方法来自动化两个数据集的相关性(如果术语不正确,请更正),并找到DS1最多(最多x个)的DS1偏移量已经发生了。这可能最终会得到一些匹配百分比,然后我可以通过阈值来确定匹配的有效性。
这样
_-__-_--___----_-__--_-__---__
__--_-__--
DS1.start + 34min~ = DS2.start
其他信息:
以约1Hz记录DS1。 DS2约为30 Hz。这样就不太可能实现100%的干净匹配。
我会赞赏替代方法(对熊猫),但我掌握的是python / pandas。
答案 0 :(得分:3)
听起来你只想要一个像交叉相关的东西?
我首先将字符串转换为数字表示形式,因此请将-
和_
替换为1
和0
您可以使用字符串replace
方法(例如signal.replace("-", "1")
)
将它们转换为列表或numpy数组:
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.correlate
和np.convolve
的文档,以确定您希望使用的方法(完整,相同或有效),因为数据长度决定了如果您的信号长度不同,您希望发生什么