归一化几个不同长度和尺度的时间序列

Ame*_*ina 3 python numpy matplotlib scipy

假设我在numpy中有几个随机时间序列,例如:

my_time_series = dict()
for L in range(20,50,10):
   scaling = np.random.randint(100)
   my_time_series[L] = scaling * np.random.rand(L) + scaling * np.random.rand(L)
Run Code Online (Sandbox Code Playgroud)

我想对它们的比例和长度进行归一化,以便可以对其可视化并比较随时间的变化。为此,一种方法是:

  1. 在标准化规模:应用Z-标准化
  2. 长度标准化:将较短的时间序列拉伸(插值)到最长的时间序列,以使它们都具有相同的长度。

动机:我最感兴趣的是比较时间序列在其生命周期中的相对变异性(无论它们有多长)。

如何在numpy中执行此操作?

Kyl*_*own 6

y_normed = {k: (data-np.mean(data))/np.std(data) 
            for k, data in my_time_series.items()}

maxlength = max(my_time_series)
x_interped = {k: np.interp(np.linspace(0, 1, maxlength), 
                           np.linspace(0, 1, k), data) 
              for k, data in y_normed.items()}

[plot(data) for data in x_interped.values()]
Run Code Online (Sandbox Code Playgroud)

数据图