时间序列数据帧上带有质心的KMeans散点图

时间:2019-06-19 21:06:31

标签: python pandas numpy matplotlib scikit-learn

我正在处理一个熊猫时间序列数据帧,该数据帧包含2列:时间戳记和增量。
下面是一个示例:

>> df.head() 
   timestamp             delta 
0  2016-07-30 00:05:00     0.0 
1  2016-07-30 00:10:00  4265.0 
2  2016-07-30 00:15:00  4568.0 
3  2016-07-30 00:20:00  5857.0 
4  2016-07-30 00:25:00  3847.0 

时间戳包含字符串和增量float64。
我正在尝试运行KMeans(sklearn)并绘制(使用matplotlib)具有点和相对质心的散点图。

我的代码如下:

delta = df['delta'].values
delta = delta.reshape(-1, 1)
timestamp = df['timestamp'].values

km = KMeans(n_clusters=3, random_state=0)
km.fit(delta)
km.predict(delta)

plt.scatter(timestamp, delta, c=km.labels_)
plt.scatter(km.cluster_centers_[:, 0], km.cluster_centers_[:, 1], c='red', marker='x')
plt.show()

此代码返回以下错误:

  
    

IndexError:索引1超出了尺寸1的轴1的范围

  

在这一行:

plt.scatter(km.cluster_centers_[:, 0], km.cluster_centers_[:, 1], c='red', marker='x')

如果我不带错误地运行代码,则散点图将正确绘制。
我试图将时间戳转换为float64,但没有成功。

有人可以帮助我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

错误原因是形状为[3,1]。

一维中有3个簇质心。将第一个质心和第二个质心聚类为(x,y)对是没有意义的。因为此图中的所有质心都在Y轴上(因为增量在Y上)。因此,您必须绘制(0,KMC1),(0,KMC2),(0,KMC3)。

Exemplary Visualization