【问题标题】:Aligning two data sets in Python在 Python 中对齐两个数据集
【发布时间】:2014-10-09 14:51:43
【问题描述】:

我想开发一些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)对齐。即得到这个:

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

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

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

有人对使用的好方法有任何建议吗?我查看了mlpy,但它似乎只适用于一维数组。

谢谢。

【问题讨论】:

  • 应该迁移到stats.stackexchange.com 这不是迭代所有可能的方式来对齐两个数据集的地方。一旦你知道你想要什么,就回到这里寻找实现它的方法。

标签: python scipy


【解决方案1】:

你可以减去差的平均值: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()

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

【讨论】:

  • 我对实现类似的东西有点谨慎,因为它并不总是能提供一个好的解决方案。考虑以下情况:data1 和 data2 都在对高斯分布进行采样,但 data1 对应于主要在分布的两侧获得的测量值,而 data2 对应于峰值附近的测量值。在这种情况下,使用执行转换的方法可能不会产生最佳结果。我正在考虑将两个数据集合并到 x 中并计算出到最近邻居的距离。然后最小化这些的总和。但我也不确定这是否可行。
  • @Hooloovoo:您给出的唯一说明是两个图表,这个答案在数学上是合理的,看起来与您所说的完全一样(所以 +1)。如果您知道平均解决方案并且不喜欢它,那么您应该在最初的问题中这么说。回答问题需要时间,而且这样做是一种浪费,因为您可以说您已经知道显而易见的答案并且正在寻找更微妙的答案。误差加权平均值是可能的,但如果您知道这就是您想要的,那么请提出要求。
  • 谢谢@Hooloovoo 我也会这么说。如果您提出要求,请在新问题中提出要求,并且可能在 stats@SE 处提出要求。
【解决方案2】:

您可以计算平均值的偏移量并从每个值中减去它。如果你对每个值都这样做,它们应该相对较好地对齐。这将假设两个数据集看起来相对相似,因此它可能不是最好的。

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

【讨论】:

    猜你喜欢
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    相关资源
    最近更新 更多