pywatts/pywatts/routines.py

117 lines
3.0 KiB
Python
Raw Normal View History

2018-06-11 15:20:45 +02:00
import matplotlib.pyplot as pp
2018-06-23 15:00:16 +02:00
import numpy as np
2018-06-11 16:42:13 +02:00
from sklearn.metrics import explained_variance_score, mean_absolute_error, median_absolute_error
import pandas
2018-06-21 14:05:30 +02:00
from random import randint
2018-06-11 13:47:02 +02:00
2018-06-11 15:20:45 +02:00
2018-06-21 14:05:30 +02:00
def train_split(data, size):
used_idxs = []
2018-09-12 17:52:05 +02:00
X_values = {'dc': []}
2018-06-21 14:05:30 +02:00
y_values = []
for i in range(size):
rnd_idx = randint(0, data.size / data.shape[1] - 337)
if rnd_idx in used_idxs:
continue
else:
used_idxs.append(rnd_idx)
2018-06-23 15:00:16 +02:00
X_values['dc'].extend(data['dc'][rnd_idx:rnd_idx + 336].tolist())
y_values.append(data['dc'][rnd_idx + 337].tolist())
2018-06-21 14:05:30 +02:00
return pandas.DataFrame.from_dict(X_values), pandas.DataFrame.from_dict({'dc': y_values})
2018-06-23 15:00:16 +02:00
def input_query(json_str, idx=0):
tmp_df = pandas.read_json(json_str)
return pandas.DataFrame.from_dict(
2018-09-12 17:52:05 +02:00
{'dc': tmp_df['dc'][idx]}
)
2018-09-09 17:25:43 +02:00
def input_queries(json_str):
tmp_df = pandas.read_json(json_str)
2018-09-11 14:41:52 +02:00
oneH = False
try:
s = tmp_df['max_temp'][0]
except KeyError:
oneH = True
2018-09-09 17:25:43 +02:00
queries = []
for i in range(len(tmp_df)):
queries.append(pandas.DataFrame.from_dict(
2018-09-12 17:52:05 +02:00
{'dc': tmp_df['dc'][i]}
2018-09-09 17:25:43 +02:00
))
2018-09-11 14:41:52 +02:00
return oneH, queries
2018-09-09 17:25:43 +02:00
2018-06-23 15:00:16 +02:00
def input_result(json_str, idx=0):
tmp_df = pandas.read_json(json_str)
return tmp_df.values[idx]
2018-06-23 15:00:16 +02:00
def train(nn, X_train, y_train, X_val, y_val, steps=100):
2018-06-11 15:20:45 +02:00
evaluation = []
for i in range(steps):
nn.train(X_train, y_train, batch_size=int(len(X_train['dc'].tolist())/336), steps=100)
2018-06-23 15:00:16 +02:00
evaluation.append(nn.evaluate(X_val, y_val))
print("Training %s of %s" % ((i+1), steps))
2018-06-11 15:20:45 +02:00
return evaluation
def plot_training(evaluation):
loss = []
2018-09-10 19:44:42 +02:00
steps = []
2018-06-11 15:20:45 +02:00
for e in evaluation:
2018-09-10 19:44:42 +02:00
loss.append(e['loss'])
steps.append(e['global_step'])
2018-06-23 15:00:16 +02:00
2018-09-10 19:44:42 +02:00
pp.plot(steps, loss)
2018-06-23 15:00:16 +02:00
# Needed for execution in PyCharm
pp.show()
2018-06-11 15:20:45 +02:00
2018-06-11 16:42:13 +02:00
2018-06-23 15:00:16 +02:00
def predict(nn, X_pred):
pred = nn.predict1h(X_pred)
2018-08-13 14:42:31 +02:00
# Cap results to 0
2018-09-12 17:52:05 +02:00
predictions = np.array([max(p['predictions'], [0]) for p in pred])
2018-06-11 16:42:13 +02:00
return predictions
2018-08-13 14:19:39 +02:00
def predict24h(nn, X_pred):
predictions = []
input = {'dc': X_pred['dc'].tolist()}
for i in range(24):
pred = nn.predict1h(pandas.DataFrame.from_dict(input))
2018-08-13 14:31:39 +02:00
# Cap prediction to 0
predictions.extend(list([max(p['predictions'][0], 0) for p in pred]))
2018-08-13 14:19:39 +02:00
# Remove first value and append predicted value
del input['dc'][0]
input['dc'].append(predictions[-1])
2018-09-09 17:25:43 +02:00
# print("Prediction for hour %d/%d" % (i+1, 24))
2018-08-13 14:19:39 +02:00
return predictions
2018-06-21 14:05:30 +02:00
def eval_prediction(prediction, result):
2018-06-11 16:42:13 +02:00
print("The Explained Variance: %.2f" % explained_variance_score(
2018-06-21 14:05:30 +02:00
result, prediction))
2018-06-11 16:42:13 +02:00
print("The Mean Absolute Error: %.2f volt dc" % mean_absolute_error(
2018-06-21 14:05:30 +02:00
result, prediction))
2018-06-11 16:42:13 +02:00
print("The Median Absolute Error: %.2f volt dc" % median_absolute_error(
2018-06-21 14:05:30 +02:00
result, prediction))
2018-06-11 16:42:13 +02:00
2018-09-09 17:25:43 +02:00
def jsonify(predictions):
json_out = "["
for v in predictions:
json_out += "[" + str(v) + "],"
json_out = json_out[:-1] + "]"
return json_out