12265


matplotlibとk-meansを使用して、csvファイルをクラスタリングしようとしています。

私の扱っているcsvデータはエネルギー消費量に関するもので、以下のリンクのものとなります。  
<https://github.com/camenergydatalab/EnergyDataSimulationChallenge/blob/master/challenge2/data/total_watt.csv>

一日ごとのエネルギー消費量を、低・中・高の三段階にクラスタリングしたいと考えています。  
以下、コードとなります。

[code]

    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()
    
[/code]

しかしこのコードを実行すると、以下のエラーメッセージが得られました。。

[code]

    (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.
    
[/code]

どうすれば正しく、クラスタリングできるのでしょうか、。。。


CC BY-SA 3.0
2015-07-10T08:45:15.177
12248
2015-07-10T19:13:51.210
10314
question
python matplotlib pandas
k-means/matplotlib　を使って、エネルギー消費量をクラスタリング。


以下にコードを示しますが、特に解説を加えなくても理解していただけるかと思います。

[code]

    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
    import datetime
    
    MY_FILE='total_watt.csv'
    
    df = pd.read_csv(MY_FILE, header=None, names=('date', 'consumption'), parse_dates='date', index_col='date')
    df = df.resample('1D', how='sum').dropna()
    
    import matplotlib.dates as md
    dates = md.date2num(df.index.to_pydatetime())
    consumption = [v for vv in df.values for v in vv]
    
    X = np.array(zip(dates, consumption))
    kmeans = KMeans(n_clusters=3)
    kmeans.fit(X)
    
    centroids = kmeans.cluster_centers_
    labels = kmeans.labels_
    
    print(centroids)
    print(labels)
    
    colors = ["b.", "g.", "r."]
    
    ax = plt.gca()
    xfmt = md.DateFormatter('%Y-%m-%d')
    ax.xaxis.set_major_formatter(xfmt)
    plt.xticks(rotation=25)
    
    for i in range(len(dates)):
      print("coordinate:", dates[i], consumption[i], "label:", labels[i])
      plt.plot(dates[i], consumption[i], colors[labels[i]], markersize = 10)
    
    plt.scatter(centroids[:, 0], centroids[:, 1], marker="x", s=150, linewidths=5, zorder=10)
    
    plt.show()
    
[/code]

![出力結果](https://i.stack.imgur.com/tBgVE.png)


CC BY-SA 3.0
2015-07-10T19:06:13.367
12265
2015-07-10T19:13:51.210
2015-07-10T19:13:51.210
12248
answer