File size: 1,575 Bytes
94ed9e1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import os
from joblib import load
from numpy import append, expand_dims
from pandas import read_json, to_datetime, Timedelta

from tensorflow.keras.models import load_model


class Utilities:
	def __init__(self) -> None:
		self.model_path = './models'
		self.posttrained_path = './posttrained'
		self.scaler_path = './pickles'

	def cryptocurrency_prediction_utils(self,
		days: int,sequence_length: int, model_name: str) -> list:
		model_path = os.path.join(self.model_path, f'{model_name}.keras')
		model = load_model(model_path)

		dataframe_path = os.path.join(self.posttrained_path, f'{model_name}-posttrained.json')
		dataframe = read_json(dataframe_path)
		dataframe.set_index('Date', inplace = True)

		minmax_scaler = load(os.path.join(self.scaler_path, f'{model_name}_minmax_scaler.pickle'))
		standard_scaler = load(os.path.join(self.scaler_path, f'{model_name}_standard_scaler.pickle'))

		lst_seq = dataframe[-sequence_length:].values
		lst_seq = expand_dims(lst_seq, axis = 0)

		predicted_prices = {}
		last_date = to_datetime(dataframe.index[-1])

		for _ in range(days):
			predicted_price = model.predict(lst_seq)
			last_date       = last_date + Timedelta(days = 1)

			predicted_prices[last_date] = minmax_scaler.inverse_transform(predicted_price)
			predicted_prices[last_date] = standard_scaler.inverse_transform(predicted_prices[last_date])

			lst_seq = append(lst_seq[:, 1:, :], [predicted_price], axis = 1)

		values = [{'date': date.strftime('%Y-%m-%d'), 'price': float(price)} for date, price in predicted_prices.items()]
        
		return values