k-means/matplotlib を使って、エネルギー消費量をクラスタリング。
matplotlibとk-meansを使用して、csvファイルをクラスタリングしようとしています。
私の扱っているcsvデータはエネルギー消費量に関するもので、以下のリンクのものとなります。
https://github.com/camenergydatalab/EnergyDataSimulationChallenge/blob/master/challenge2/data/total_watt.csv
一日ごとのエネルギー消費量を、低・中・高の三段階にクラスタリングしたいと考えています。
以下、コードとなります。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import style
style.use('ggplot')
import pandas as pd
from sklearn.cluster import KMeans
MY_FILE='total_watt.csv'
date = []
consumption = []
df = pd.read_csv(MY_FILE, parse_dates=[0], index_col=[0])
df = df.resample('1D', how='sum')
for row in df:
if len(row) ==2 :
date.append(row[0])
consumption.append(row[1])
import datetime
for x in range(len(date)):
date[x]=datetime.datetime.strptime(date[x], '%Y-%m-%d %H:%M:%S')
X = np.array([date, consumption])
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)
centroids = kmeans.cluster_centers_
labels = kmeans.labels_
print(centroids)
print(labels)
colors = ["b.","g.","r."]
for i in range(len(X)):
print("coordinate:",X[i], "label:", labels[i])
plt.plot(X[i][0], X[i][1], colors[labels[i]], markersize = 10)
plt.scatter(centroids[:, 0],centroids[:, 1], marker = "x", s=150, linewidths = 5, zorder = 10)
plt.show()
しかしこのコードを実行すると、以下のエラーメッセージが得られました。。
(DataVizProj)Soma-Suzuki:Soma Suzuki$ python 4.clusters.py
Traceback (most recent call last):
File "4.clusters.py", line 31, in <module>
kmeans.fit(X)
File "/Users/Suzuki/Envs/DataVizProj/lib/python2.7/site-packages/sklearn/cluster/k_means_.py", line 785, in fit
X = self._check_fit_data(X)
File "/Users/Suzuki/Envs/DataVizProj/lib/python2.7/site-packages/sklearn/cluster/k_means_.py", line 755, in _check_fit_data
X = check_array(X, accept_sparse='csr', dtype=np.float64)
File "/Users/Suzuki/Envs/DataVizProj/lib/python2.7/site-packages/sklearn/utils/validation.py", line 367, in check_array
% (n_features, shape_repr, ensure_min_features))
ValueError: Found array with 0 feature(s) (shape=(2, 0)) while a minimum of 1 is required.
どうすれば正しく、クラスタリングできるのでしょうか、。。。