Я пытаюсь построить карту 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, и мне нужна помощь, чтобы узнать, что не так с моим кодом, тогда я могу это исправить. наилучшие пожелания!