Skip to content

Instantly share code, notes, and snippets.

Created Nov 25, 2021
What would you like to do?
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import pandas_datareader as web
import datetime as dt
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout,LSTM
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
# Load Data
company = "FB"
start = dt.datetime(2012,1,1)
end = dt.datetime(2020,1,1)
data = web.DataReader(company, "yahoo", start, end)
# Prepare Data
scaler = MinMaxScaler(feature_range=(0,1))
scaler_data = scaler.fit_transform(data["Close"].values.reshape(-1, 1))
prediction_days = 60
x_train = []
y_train = []
for x in range(prediction_days,len(scaler_data)):
x_train.append(scaler_data[x-prediction_days:x, 0])
y_train.append(scaler_data[x, 0])
x_train, y_train = np.array(x_train), np.array(y_train)
x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1))
# Build The Model
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(x_train.shape[1],1)))
model.add(LSTM(units=50, return_sequences=True))
model.add(Dense(units=1)) # Prediction of the next closing value
model.compile(optimizer="adam", loss="mean_squared_error"),y_train, epochs=25, batch_size=32)
""" Test The Model Accuracy on Existing Data"""
# Load Test Data
test_start = dt.datetime(2020,1,1)
test_end =
test_data = web.DataReader(company, "yahoo",test_start,test_end)
actual_prices = test_data["Close"].values
total_dataset =pd.concat((data["Close"],test_data["Close"]), axis=0)
model_inputs = total_dataset[len(total_dataset) - len(test_data) - prediction_days:].values
model_inputs = model_inputs.reshape(-1, 1)
model_inputs = scaler.transform(model_inputs)
# Make Predictions on Test Data
x_test = []
for x in range (prediction_days, len(model_inputs)):
x_test.append(model_inputs[x-prediction_days:x, 0])
x_test = np.array(x_test)
x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1))
predicted_prices = model.predict(x_test)
predicted_prices = scaler.inverse_transform(predicted_prices)
# Plot The Test Predictions
plt.plot(actual_prices, color="black", label=f"Actual {company} Price")
plt.plot(predicted_prices, color="green", label=f"Predicted {company} Price ")
plt.title(f"{company} Share Price")
plt.ylabel(f"{company} Share Price")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment