Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中对齐两个数据集_Python_Scipy - Fatal编程技术网

在Python中对齐两个数据集

在Python中对齐两个数据集,python,scipy,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

我想开发一些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()
结果如下所示:

我现在要做的是将第二个数据集(data2)与第一个数据集(data1)对齐。i、 e.要得到这个:

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

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

我对使用方法进行转换持谨慎态度,因为这可能会产生不好的结果,这取决于数据的采样方式。我正在考虑获取每个数据2[TIME_I],并计算到数据1[~TIME_I]的最短距离。然后最小化这些的总和。但我也不确定这是否有效

有人对一个好的方法有什么建议吗?我看过,但它似乎只适用于1D阵列


谢谢。

您可以计算平均值的偏移量,然后从每个值中减去。如果对每个值都执行此操作,则它们应该相对对齐。这将假定两个数据集看起来相对相似,因此它可能不是最好的

尽管此问题与Matlab无关,但您可能仍对以下内容感兴趣:
您可以计算平均值的偏移量,然后从每个值中减去该偏移量。如果对每个值都执行此操作,则它们应该相对对齐。这将假定两个数据集看起来相对相似,因此它可能不是最好的

尽管此问题与Matlab无关,但您可能仍对以下内容感兴趣:

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


另一种可能是减去每个序列的平均值。您可以减去差值的平均值:
data2.VALUE-(data2.VALUE-data1.VALUE)。mean()


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

我对实现这样的方法有点谨慎,因为它并不总是提供一个好的解决方案。考虑以下情况:DATA1和DATA2均采样高斯分布,但DATA1对应于主要分布在分布翼和峰值周围的DATA2的测量。在这种情况下,使用这种方法进行换档可能不会产生最佳效果。我正在考虑将两个数据集合并到x中,并计算出到最近邻居的距离。然后最小化这些的总和。但是我也不确定这是否可行。@Hooloovoo:你给出的唯一说明是两个图表,这个答案在数学上是合理的,看起来和你想要的完全一样(so+1)。如果你知道平均解并且不喜欢它,你应该在最初的问题中这样说。回答问题需要时间,这样做只是为了说你已经知道了明显的答案,并且正在寻找更微妙的东西,这是一种浪费。误差加权平均值是可能的,但如果你知道这是你想要的,那就去问吧。谢谢@Hooloovoo,我也会这么说的。如果你想问这个问题,可以在新的问题中问,也可以在stats@SE.I我对实现这样的东西有点谨慎,因为它不会总是提供一个好的解决方案。考虑以下情况:DATA1和DATA2均采样高斯分布,但DATA1对应于主要分布在分布翼和峰值周围的DATA2的测量。在这种情况下,使用这种方法进行换档可能不会产生最佳效果。我正在考虑将两个数据集合并到x中,并计算出到最近邻居的距离。然后最小化这些的总和。但是我也不确定这是否可行。@Hooloovoo:你给出的唯一说明是两个图表,这个答案在数学上是合理的,看起来和你想要的完全一样(so+1)。如果你知道平均解并且不喜欢它,你应该在最初的问题中这样说。回答问题需要时间,这样做只是为了说你已经知道了明显的答案,并且正在寻找更微妙的东西,这是一种浪费。误差加权平均值是可能的,但如果你知道这是你想要的,那就去问吧。谢谢@Hooloovoo,我也会这么说的。如果你想问这个问题,可以在新的问题中问,也可以在stats@SE.Should迁移到这里并不是迭代所有可能的方法来对齐两个数据集的地方。一旦你知道你想要什么,回到这里寻找一种方法来实现它。应该迁移到这里,这里不是迭代所有可能的方法来对齐两个数据集的地方。一旦你知道你想要什么,回到这里来寻找实现它的方法。
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()