Python 3.x 时间序列异常检测图

Python 3.x 时间序列异常检测图,python-3.x,matplotlib,time-series,outliers,anomaly-detection,Python 3.x,Matplotlib,Time Series,Outliers,Anomaly Detection,我有一个熊猫数据帧的大小(1280,2)。数据的标题如下所示: 我正在使用基于聚类的异常检测方法,使用k-means。它创建“k”个类似的数据点簇。不属于这些组的数据点被标记为异常 def getDistanceByPoint(data, model): distance = pd.Series() for i in range(0,len(data)): Xa = np.array(data.loc[i]) Xb = model.cluster_centers_[model.

我有一个熊猫数据帧的大小(1280,2)。数据的标题如下所示:

我正在使用基于聚类的异常检测方法,使用k-means。它创建“k”个类似的数据点簇。不属于这些组的数据点被标记为异常

def getDistanceByPoint(data, model):
distance = pd.Series()
for i in range(0,len(data)):
    Xa = np.array(data.loc[i])
    Xb = model.cluster_centers_[model.labels_[i]-1]
    distance.set_value(i, np.linalg.norm(Xa-Xb))
return distance
kmeans = KMeans(n_clusters=9).fit(data) 
outliers_fraction = 0.01
distance = getDistanceByPoint(data, kmeans)
number_of_outliers = int(outliers_fraction*len(distance))
threshold = distance.nlargest(number_of_outliers).min()
(0:normal, 1:anomaly) 
df['anomaly1'] = (distance >= threshold).astype(int)

我想用x轴作为经过的时间,y轴作为值来绘制数据帧。我想用蓝色绘制正常数据值,用红色绘制异常值。我怎样才能画出这个呢?

这就是你需要的。记住相应地将
time
value
更改为您的列名

fig, ax = plt.subplots()
a = df.loc[df['anomaly'] == 1, ['time', 'value']]
ax.plot(df['time'], df['value'], color='blue')
ax.scatter(a['time'], a['value'], color='red')
plt.show()

查看了解更多信息。

这是您需要的。记住相应地将
time
value
更改为您的列名

fig, ax = plt.subplots()
a = df.loc[df['anomaly'] == 1, ['time', 'value']]
ax.plot(df['time'], df['value'], color='blue')
ax.scatter(a['time'], a['value'], color='red')
plt.show()
查看更多信息