1

我有大量的测量数据(日期时间、温度),我需要在使用散景绘图之前对其进行下采样(以保持流畅的用户界面)

因为我想看到不规则的物理现象,所以我不能只对数据重新采样或在 4(或 10)上取一个样本。我需要一个更聪明的方法来判断是否必须保留样本。

我的想法是取一个参考样本,只要它们靠近参考样本(在参考样本值周围的窗口内),就丢弃以下样本。当一个样本出窗时,它会被保留,并成为后续样本的新参考样本。我会得到一个没有频率的数据集,但我认为这不是问题。

下面的代码是我的自定义/模糊下采样的实现,它可以很好地复制我的数据行为。

import numpy as np
import pandas as pd

# DataFrame / pandas serie creation
size = 300000
index = pd.date_range('01/12/2017 08:15:49', periods=size, freq="3s")
s = 10*np.sin(np.arange(0, 2*np.pi, (2*np.pi/size)))
noise = np.random.random(size)
val = s + noise
serie = pd.Series(data=val, index=index)

# fuzzy downsampling
window = 0.5
def fuzz():
    i = serie.index[0]
    fuzzy_index = [i]
    ref = serie.loc[i]
    for ind, val in serie.iteritems():
        if abs(val - ref) > window:
            fuzzy_index.append(ind)
            ref = serie.loc[ind]
    return serie.loc[fuzzy_index]

# compute downsampling
sub_serie = fuzz()

此代码正在运行,但速度很慢:

%timeit fuzz()
1 loop, best of 3: 8.45 s per loop

窗户我玩不了太多,因为它关系到测温精度。

我的样本量目前是 300000,但在不久的将来可能会增加到几百万。

你知道如何优化/加速这段代码吗?

也许您有其他想法如何进行具有物理意义的下采样?

也许有直接使用散景服务器的解决方案?理想情况下取决于用户的缩放?

4

0 回答 0