在Python中对齐两个数据集

时间:2014-10-09 14:51:44

标签: python scipy

我想开发一些python代码来对齐记录同一事件的不同仪器获得的数据集。

举个例子,假设我有两组测量值:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# Define some data
data1 = pd.DataFrame({'TIME':[1.1, 2.4, 3.2, 4.1, 5.3],\
                      'VALUE':[10.3, 10.5, 11.0, 10.9, 10.7],\
              'ERROR':[0.2, 0.1, 0.4, 0.3, 0.2]})

data2 = pd.DataFrame({'TIME':[0.9, 2.1, 2.9, 4.2],\
                      'VALUE':[18.4, 18.7, 18.9, 18.8],\
              'ERROR':[0.3, 0.2, 0.5, 0.4]})

# Plot the data      
plt.errorbar(data1.TIME, data1.VALUE, yerr=data1.ERROR, fmt='ro')
plt.errorbar(data2.TIME, data2.VALUE, yerr=data2.ERROR, fmt='bo')
plt.show()

结果如下: enter image description here

我现在要做的是将第二个数据集(data2)与第一个数据集(data1)对齐。即获得这个: enter image description here

必须通过从其所有值中减去常量(待确定)来移动第二个数据集以匹配第一个数据集。我所知道的是,数据集是相关的,因为两个仪器正在测量相同的事件,但具有不同的采样率。

在这个阶段,我不想对最能描述数据的函数做出任何假设(在对齐后将进行拟合)。

我对使用平均值执行移位持谨慎态度,因为它可能会产生不良结果,具体取决于数据的采样方式。我正在考虑获取每个data2 [TIME_i]并计算出与data1 [~TIME_i]的最短距离。然后最小化这些的总和。但我不确定它是否会运作良好。

有没有人对使用好的方法有任何建议?我看了mlpy,但它似乎只适用于1D阵列。

感谢。

2 个答案:

答案 0 :(得分:4)

您可以减去差异的平均值:data2.VALUE-(data2.VALUE - data1.VALUE).mean()

import pandas as pd
import matplotlib.pyplot as plt

# Define some data
data1 = pd.DataFrame({
    'TIME': [1.1, 2.4, 3.2, 4.1, 5.3],
    'VALUE': [10.3, 10.5, 11.0, 10.9, 10.7],
    'ERROR': [0.2, 0.1, 0.4, 0.3, 0.2],
})

data2 = pd.DataFrame({
    'TIME': [0.9, 2.1, 2.9, 4.2],
    'VALUE': [18.4, 18.7, 18.9, 18.8],
    'ERROR': [0.3, 0.2, 0.5, 0.4],
})

# Plot the data
plt.errorbar(data1.TIME, data1.VALUE, yerr=data1.ERROR, fmt='ro')
plt.errorbar(data2.TIME, data2.VALUE-(data2.VALUE - data1.VALUE).mean(),
             yerr=data2.ERROR, fmt='bo')
plt.show()

aligned error bars

另一种可能性是减去每个系列的平均值

答案 1 :(得分:2)

您可以计算平均值的偏移量并从每个值中减去该值。如果你为每个值执行此操作,它们应该相对较好地对齐。这将假设两个数据集看起来相对相似,因此它可能无法正常工作。

虽然这个问题与Matlab无关,但您可能仍会对此感兴趣: Remove unknown DC Offset from a non-periodic discrete time signal