Внедрение SOM на набор данных временных рядов для потребления энергии - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь построить карту SOM с помощью matplotlib, мой набор данных заполнен ежечасно записанным значением энергопотребления для 27 домов. вот мой код:

import sys
sys.path.insert(0, '../')
%load_ext autoreload

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.patches import Patch
%matplotlib inline

from minisom import MiniSom
from sklearn.preprocessing import minmax_scale, scale
%autoreload 2
data_consumption2 = pd.read_excel(r"C:\Users\user\Desktop\Thesis\Tarek\Parent.xlsx", sheet_name="Consumption")
Metadata= pd.read_excel(r"C:\Users\user\Desktop\Thesis\Tarek\Parent.xlsx", sheet_name="Metadata for households")
Households= Metadata["HH Tot"] 
data_consumption2['Timestamp'] = pd.to_datetime(data_consumption2['Timestamp'], unit='s')
data_consumption2.fillna(0,inplace=True)
# transpose the dataframe accordingly
data_consumption2 = data_consumption2.set_index('Timestamp')
data_consumption2 = data_consumption2.resample('M').mean()
#data_consumption2.rename(columns=lambda x : x.strftime('%Y-%m'), inplace=True)
data_consumption2.reset_index(inplace=True)
K=data_consumption2.rename(columns={'index':'house_no'}, inplace=True)
data_consumption2.columns.rename(None, inplace=True)
data= data_consumption2.iloc[: , 1:]
category_color = {'High Consumption': 'red',
                  'Medium Consumption': 'blue',
                  'Low Consumption': 'yellow',
                 }

X = data[feature_names].values
X = scale(X)

size = 16
som = MiniSom(size, size, len(X[0]),
              neighborhood_function='gaussian', sigma=1.5,
              random_seed=1)

som.pca_weights_init(X)
som.train_random(X, 1000, verbose=True)
def shorten_house(c):

    house_map = som.labels_map(X,data.columns)  
    plt.figure(figsize=(14, 14))
    for p, houses in house_map.items():

        houses = list(houses)
        x = p[0] + .1
        y = p[1] - .3
        for i, c in enumerate(houses):

            off_set = (i+1)/len(houses) - 0.05
            plt.text(x, y+off_set, shorten_house(c), color='r', fontsize=10)

    plt.pcolor(som.distance_map().T, cmap='gray_r', alpha=.2)
    plt.xticks(np.arange(size+1))         
    plt.yticks(np.arange(size+1)) 
    plt.grid()
    legend_elements = [Patch(facecolor=clr,
                         edgecolor='w',
                         label=l) for l, clr in category_color.items()]
    plt.legend(handles=legend_elements, loc='center left', bbox_to_anchor=(1, .95))
    plt.show()  

проблема в том, что когда я запускаю свой код, он не выдает никаких ошибок, но также не показывает никакого результата, даже при построении пустой карты.

Я немного новичок в python, и мне нужна помощь, чтобы узнать, что не так с моим кодом, тогда я могу это исправить. наилучшие пожелания!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...