为了在 Python 中保持数据的真实性,重新采样数据的更好方法? [关闭]

Posted

技术标签:

【中文标题】为了在 Python 中保持数据的真实性,重新采样数据的更好方法? [关闭]【英文标题】:Better way for resampling data in order to keep the authenticity of the data in Python? [closed] 【发布时间】:2020-11-28 09:44:13 【问题描述】:

我想重新采样我的数据,以便每个索引的日期时间间隔为 512 秒。 我从pandas找到了resample方法,但是由于原始数据最终会被修改太多(原始数据的真实性不会相同),因此无法正常工作。但是,我想到了一种可能性,如果在日期时间内,间隔只有2个数字,它们也可以相互分割(512:4 = 128)。问题是它们的出现可以计算任何数量。

使用以下代码计算索引的间隔:

intervals = np.array(round(df.index.to_series().diff().dt.total_seconds().fillna(0)))

我的索引间隔是这样的:(因为我的数据每 4 或 512 秒记录一次)

4, 4, 4, 4, 4, 4, 4, 4, 4, 512,512, 512, 512, 512, 512, 512, 4, 4, 4, 4, 4, 512, 512, 512, 4, 4, 4, 4, 4, 4, 4, 4, 512, 4, 4, 4, 4, 512, 512, 521, 512, ...

问题是有时数据每 4 秒记录 5 分钟(因此没有足够的时间来实现 512)然后它可能会出现 512 等等,如上例所示。这是一个问题,因为我首先认为也许我应该每 512 秒循环一次,然后删除所有不在该时间间隔内的行。 (我删除它们是因为我只需要记录每512秒的数据,实际上没有必要知道它在间隔内是什么。它可能会增加,但它会改变很多。) 我需要使其成为每 512 次,但不要使用重采样方法,因为如果我观察得好,它会破坏数据的真实性。

总结起来,两个主要条件是:一是尊重并保持数据的真实性,二是数据应该每512秒记录一次。 所以,我问你,这个领域的专家,你认为哪种方法或算法最适合我的情况?

P.S.:我一直在寻找其他方法,例如 resample 但更好,但我没有找到合适的方法。但是,我对新想法持开放态度!让我知道是否应该添加有关该问题的其他详细信息。

非常感谢。

【问题讨论】:

【参考方案1】:

通过resample()不会丢失数据的真实性

    已经重新创建了一个样本数据集,我在其中以 128 秒 间隔模拟了源数据,并有间隙 然后resample()512s 个桶 这可能意味着有 empty 个存储桶,其中 last 将是 NaN 和基础值的 list 为空 您需要决定在这些情况下要做什么。对于我对温度数据进行上采样的情况,我 dropna() 其他选项显然是 fillna() 由于存在 NaN,您应该考虑使用dfr = df.resample("512s")["val"].agg(last="last", vals=lambda s: list(s)).astype("last":"Int64") 来维护列的数据类型(即从 int64 更改为 float64)李>
总之,源数据的完整性没有损失。您需要决定如何处理没有适合 *bin* 的基础数据的情况
d = [d for d in pd.date_range(dt.datetime(2019,5,1,2), 
                          dt.datetime(2019,5,1,4), freq="128s") 
     if random.randint(0,3) < 2 ] # miss some sample times... so resampling will give NaNs

df = pd.DataFrame("ts":d, "val":[random.randint(0,50) for x in d]).set_index("ts")
dfr = df.resample("512s")["val"].agg(last="last", vals=lambda s: list(s))
dfr

输出

                     last          vals
ts                                     
2019-05-01 01:59:28  27.0   [1, 41, 27]
2019-05-01 02:08:00  48.0  [14, 14, 48]
2019-05-01 02:16:32  43.0   [2, 49, 43]
2019-05-01 02:25:04  43.0          [43]
2019-05-01 02:33:36  44.0          [44]
2019-05-01 02:42:08  38.0      [39, 38]
2019-05-01 02:50:40  37.0          [37]
2019-05-01 02:59:12  25.0      [39, 25]
2019-05-01 03:07:44   1.0    [29, 8, 1]
2019-05-01 03:16:16  35.0  [12, 20, 35]
2019-05-01 03:24:48  33.0      [20, 33]
2019-05-01 03:33:20   5.0       [11, 5]
2019-05-01 03:41:52   NaN            []
2019-05-01 03:50:24   9.0           [9]

【讨论】:

以上是关于为了在 Python 中保持数据的真实性,重新采样数据的更好方法? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何解决GD32F103在重新上电AD采样时偶尔有6个码的跳动

IsAuthenticated 过期后保持真实

如何在不使用 ffmpeg 保持视频持续时间的情况下重新采样 FPS?

在Python中将不规则间隔的数据重新采样为规则网格

在执行一些额外操作的同时将数据帧重新采样为新数据帧

python中数据的随机采样