我在一个月(30 天)中每 5 分钟收集一次传感器数据。这意味着,我有一个时间序列数据,总共有 288*30 个数据点。
我想散点图数据(x 轴:时间,y 轴:传感器值)。以下代码用于测试。
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
# generate time series randomly (length: 1 month)
rng=pd.date_range("2015-11-11",periods=288*30,freq="5min")
ts=pd.Series(np.random.randn(len(rng)),rng)
nr=3
nc=1
fig=plt.figure(1)
fig.subplots_adjust(left=0.04,top=1,bottom=0.02,right=0.98,wspace=0.1,hspace=0.1)
for i in range(3):
ctr=i+1
ax=fig.add_subplot(nr,nc,ctr)
ax.scatter(ts.index,ts.values)
ax.set_xlim(ts.index.min(),ts.index.max())
plt.show()
Run Code Online (Sandbox Code Playgroud)
我生成了具有 288*30 个观测值的随机时间序列数据,并试图将其绘制在散点图中。但是,如您所见,无法分析该图。
我想重绘它满足以下条件:
我想要图的放大版本。换句话说,某个时间范围(例如,2~3 小时)的部分数据点被一次性显示出来。然后,相邻点之间应该有足够的空间。
我想将图形保存为 png 或 pdf 文件。然后,如果我打开文件,图像(或 pdf)查看器有一个水平滚动条,使我能够浏览整个图形。
有谁能解决吗?
我认为对于 matplotlib 专家来说并不难,但对于我这个初学者来说却很难。
我想做一个时间序列聚类任务。假设我们有四个数据 (t1~t4)。
t1={1,1,1,1,1,1,1}
t2={10,10,10,10,10,10,10}
t3={100,100,100,100,100,100,100}
t4 = {1,5,9,13,17,21,25}
Run Code Online (Sandbox Code Playgroud)
在这里,我在这个例子背后的意图是我想把 t1、t2、t3 组合在一起,因为它的形状是一条恒定的线。但是,t4 看起来像上升线,所以它应该在其他组中。
但是,如果我使用 DTW(python mlpy 包)计算 t1 和其他人之间的距离,我得到的结果如下:
t1-t1: 0 (absolutely)
t1-t2: 63
t1-t3: 693
t1-t4: 84
Run Code Online (Sandbox Code Playgroud)
我们可以看到,t1-t3 之间的距离远大于 t1-t4 之间的距离。我猜是因为 t3 的幅度幅度比其他幅度大得多。
在这种情况下,在适应 DTW 之前对每个时间序列数据使用 min-max 归一化(即 0 到 1 归一化)是个好方法吗?换句话说,使 t1, t2, t3 为 {0,0,0,0,0,0,0},t4 为 {0, 0,17,...., 1}?然后,DTW 根据我的需要返回结果。
很快,我想知道在 DTW 之前规范化任务是否合适。我是 DTW 的新手,很抱歉打扰您的基本问题!:)