我有体育活动的时间序列数据。以50hz频率记录数据。但现在我想在20hz下采样数据,因为我想在20hz下训练和预测模型。
python中有没有一种有效的方法可以做到这一点?我听说过panda的重采样功能,但不知道如何有效地使用它来解决我的问题。任何一段代码都会非常有用。
epoch (ms) time (10:00) elapsed (s) x-axis (g) y-axis (g) z-axis (g)
1613977400899 2021-02-22T12:03:20.899 0 -0.336 0.886 0.649
1613977400920 2021-02-22T12:03:20.920 0.021 -0.233 0.799 0.648
1613977400940 2021-02-22T12:03:20.940 0.041 -0.173 0.771 0.629
1613977400961 2021-02-22T12:03:20.961 0.062 -0.132 0.757 0.596
1613977400981 2021-02-22T12:03:20.981 0.082 -0.113 0.724 0.57
1613977401002 2021-02-22T12:03:21.002 0.103 -0.127 0.713 0.538
1613977401021 2021-02-22T12:03:21.021 0.122 -0.175 0.743 0.488
1613977401041 2021-02-22T12:03:21.041 0.142 -0.266 0.775 0.417
1613977401062 2021-02-22T12:03:21.062 0.163 -0.281 0.774 0.402
1613977401082 2021-02-22T12:03:21.082 0.183 -0.212 0.713 0.427
1613977401103 2021-02-22T12:03:21.103 0.204 -0.17 0.649 0.46
1613977401123 2021-02-22T12:03:21.123 0.224 -0.204 0.649 0.524
1613977401144 2021-02-22T12:03:21.144 0.245 -0.313 0.684 0.658
1613977401164 2021-02-22T12:03:21.164 0.265 -0.415 0.727 0.785
1613977401183 2021-02-22T12:03:21.183 0.284 -0.419 0.726 0.82
1条答案
按热度按时间i34xakig1#
这里的一个主要问题似乎是,您的原始频率是“大约”20ms(或50hz),而不是确切的频率。我们需要分两步重新采样:
向上采样到1ms,在这里我们可以定义要使用的插值
向下采样到50ms(这只是每50行选取一个,非常简单)
首先,让我们构建一个时间索引。在这里,您有两次信息,因此这两种方法中的任何一种都有效:
(现在我们真的不需要
epoch
及time
列,因为信息在索引中)现在我们可以进行重采样:
请注意,通过指定传递给的参数,可以执行不同类型的插值
.interpolate()
. 请参阅此页上的文档:方法:str,默认为“线性”
使用插值技术。什么之中的一个:
“线性”:忽略索引并将值视为等距。这是多索引支持的唯一方法。
“时间”:处理每日和更高分辨率的数据,以插值给定的间隔长度。
“索引”、“值”:使用索引的实际数值。
“pad”:使用现有值填写NAN。
“最近”、“零”、“直线”、“二次”、“三次”、“样条曲线”、“重心”、“多项式”:传递给scipy.interpolate.interp1d。这些方法使用指数的数值。“多项式”和“样条曲线”都要求您还指定顺序(int),例如df.interpolate(method='polymonery',order=5)。
“krogh”、“分段多项式”、“样条曲线”、“pchip”、“akima”、“cubicspline”:围绕类似名称的scipy插值方法进行 Package 。见附注。
“from_导数”:指scipy.interpolate.bpoly.from_导数,它取代了scipy 0.18中的“分段多项式”插值方法。
您可以看到坐标中的细微差异,这取决于您选择适合您的正确方法: