如何将我的 csv 数据可视化为集群

Posted

技术标签:

【中文标题】如何将我的 csv 数据可视化为集群【英文标题】:How can I visualize my csv data into cluster 【发布时间】:2015-09-27 16:29:17 【问题描述】:

我想将我的 csv 数据可视化到集群中。

这是我的 csv 数据。(https://github.com/soma11soma11/EnergyDataSimulationChallenge/blob/challenge2/soma11soma/challenge2/analysis/Soma/total_watt.csv)

供您参考。 我可以将 csv 数据可视化为 3D 图形。

这是我的代码。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d



MY_FILE = 'total_watt.csv'

df = pd.read_csv(MY_FILE, parse_dates=[0], header=None, names=['datetime', 'consumption'])

df['date'] = [x.date() for x in df['datetime']]
df['time'] = [x.time() for x in df['datetime']]

pv = df.pivot(index='time', columns='date', values='consumption')

# to avoid holes in the surface
pv = pv.fillna(0.0)

xx, yy = np.mgrid[0:len(pv),0:len(pv.columns)]

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

surf=ax.plot_surface(xx, yy, pv.values, cmap='jet', cstride=1, rstride=1)

fig.colorbar(surf, shrink=0.5, aspect=10)

dates = [x.strftime('%m-%d') for x in pv.columns]
times = [x.strftime('%H:%M') for x in pv.index]

ax.set_title('Energy consumptions Clusters', color='lightseagreen')
ax.set_xlabel('time', color='darkturquoise')
ax.set_ylabel('date(year 2011)', color='darkturquoise')
ax.set_zlabel('energy consumption', color='darkturquoise')
ax.set_xticks(xx[::10,0])
ax.set_xticklabels(times[::10], color='lightseagreen')
ax.set_yticks(yy[0,::10])
ax.set_yticklabels(dates[::10], color='lightseagreen')

ax.set_axis_bgcolor('black')

plt.show()


#Thanks for reading! Looking forward to the Skype Interview.

这是图表,我从这段代码中得到的。

我想我应该改变这段代码的一些点,以便将数据分为三组:高、中、低能耗。

我想通过对数据进行聚类得到的图像是这样的。(2D,3colors。)

k 均值??????我应该使用吗?..

【问题讨论】:

请将您的标题编辑成更有意义的内容,而不是评论 我也想拥有如此漂亮的数据集群... 通过查看您的数据,我会尝试一些具有径向基函数的集群,例如来自 sklearn 的 SVC。顺便提一句。有一个很好的流程图:scikit-learn.org/stable/tutorial/machine_learning_map/… 【参考方案1】:

这是使用KMeans 的结果。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
from sklearn.cluster import KMeans


MY_FILE = '/home/Jian/Downloads/total_watt.csv'

df = pd.read_csv(MY_FILE, parse_dates=[0], header=None, names=['datetime', 'consumption'])

df['date'] = [x.date() for x in df['datetime']]
df['time'] = [x.time() for x in df['datetime']]

stacked = df.pivot(index='time', columns='date', values='consumption').fillna(0).stack()


# do unsupervised clustering
# =============================================
estimator = KMeans(n_clusters=3, random_state=0)
X = stacked.values.reshape(len(stacked), 1)
cluster = estimator.fit_predict(X)

# check the mean value of each cluster
X[cluster==0].mean()  # Out[53]: 324.73175293698534
X[cluster==1].mean()  # Out[54]: 6320.8504071851467
X[cluster==2].mean()  # Out[55]: 1831.1473140192766


# plotting
# =============================================

fig, ax = plt.subplots(figsize=(10, 8))
x = stacked.index.labels[0]
y = stacked.index.labels[1]
ax.scatter(x[cluster==0], y[cluster==0], label='mean: '.format(X[cluster==0].mean()), c='g', alpha=0.8)
ax.scatter(x[cluster==1], y[cluster==1], label='mean: '.format(X[cluster==1].mean()), c='r', alpha=0.8)
ax.scatter(x[cluster==2], y[cluster==2], label='mean: '.format(X[cluster==2].mean()), c='b', alpha=0.8)
ax.legend(loc='best')

【讨论】:

非常感谢!但它不起作用错误消息是; (DataVizProj)Soma-Suzuki:Soma Suzuki$ python 4.clusters.py Traceback(最近一次调用最后):文件“4.clusters.py”,第 5 行,在 from sklearn.cluster import KMeans ImportError: No module命名为 sklearn.cluster 我重新安装了 sklean 并且成功了!!非常感谢!! 什么是""mean 324....., mean,,,6320........ 和 mean 1831.,,,,,,,,,, 顺便说一句!?!?!? @SuzukiSoma 这是每个集群的平均消费水平。如果需要,您可以在 label= 中重命名它们。 所以表示如果消费接近1831...点为蓝色,消费接近3247,...点为绿色,如果消费接近6320,点会红。 ???

以上是关于如何将我的 csv 数据可视化为集群的主要内容,如果未能解决你的问题,请参考以下文章

在JavaFX中的openstreetmap上显示分层集群

如何将对象序列化为 CSV 文件?

在我的 PyQt5 GUI(非基于 Web 的应用程序)中嵌入图形(数据可视化)的最佳方式

转换 csv 数据以进行分析和可视化

我们如何可视化多维数据集群?

将速度场可视化为定向箭头