-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCode2.py
138 lines (100 loc) · 3.35 KB
/
Code2.py
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# -*- coding: utf-8 -*-
"""Untitled4.ipynb
Automatically generated by Colaboratory.
Original file is located at
https://colab.research.google.com/drive/1x-za71znk_O7JhGvIwLKMmifqh2oRxSi
# STOCK PREDICTION USING NUERAL NETWORKS
### Using Artificial Reccurent Neural Network called Long Short Term Memory (LSTM) for predicting the closing stock price of a corporation.
"""
!pip install sklearn
#Import libraries
import math
import pandas as pd
import numpy as np
import pandas_datareader as web
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, LSTM
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')
#get the stock data
df = web.DataReader('AAPL', data_source='yahoo', start='2012-01-01', end='2020-04-30')
#display data
df
#Can change end date to present date using time module
#Visualize Closing History
plt.figure(figsize=(16,8))
plt.title("Closing Prize Chart")
plt.plot(df['Close'])
plt.xlabel('Date', fontsize=18)
plt.ylabel('Close Price USD ($)',fontsize=18)
plt.show
#New dataframe with only close coloumn
data = df.filter(['Close'])
#Convert dataframe to a numpy array
dataset =data.values
#Get 80% of the data st=et length used for training the LSTM
training_data_len = math.ceil(len(dataset)*.8)
training_data_len
#Preprocessing of Data
Scaler = MinMaxScaler(feature_range=(0,1))
scaled_data=Scaler.fit_transform(dataset)
scaled_data
#Create the training dataset
#Creating Scaled Training Dataset
train_data = scaled_data[0:training_data_len,:]
#Split data into x_train and y_train
x_train = []
y_train = []
for i in range (60,len(train_data)):
x_train.append(train_data[i-60:i,0])
y_train.append(train_data[i, 0])
# Convert x_train and y_train to numpy arrays
x_train, y_train = np.array(x_train), np.array(y_train)
#Reshape the x_train dataset
x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1))
x_train.shape
#Build the LSTM Model
model = Sequential()
#Add NN Layers
model.add(LSTM (50, return_sequences=True, input_shape=(x_train.shape[1],1))) #l1
model.add(LSTM (50, return_sequences=False)) #l2
model.add(Dense(25))
model.add(Dense(1))
#Compile the model
model.compile(optimizer='adam', loss='mean_squared_error')
model.fit(x_train, y_train, batch_size=1, epochs=1)
#Create test dataset
test_data = scaled_data[training_data_len-60:,:]
#Create x_test, y_test
x_test=[]
y_test = dataset[training_data_len:,:]
for i in range(60, len(test_data)):
x_test.append(test_data[i-60:i,0])
#Convert to numpy_array
x_test = np.array(x_test)
#Reshape the test data from 2D to 3D
x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1))
#Get models predicted values
predictions = model.predict(x_test)
predictions = Scaler.inverse_transform(predictions)
#Get RMSE
rmse = np.sqrt(np.mean((predictions - y_test)**2))
rmse
#Plot the data
train = data[:training_data_len]
valid = data[training_data_len:]
valid['Predictions'] = predictions
#Visualize the data
plt.figure(figsize=(16,8))
plt.title('Model')
plt.xlabel('Date', fontsize=18)
plt.ylabel('Closing Price in USD($)', fontsize=18)
plt.plot(train['Close'])
plt.plot(valid[['Close','Predictions']])
plt.legend(['Train','Validation','Prediction'], loc='lower right')
plt.show()
#Show Actual and Predicted Prices
valid
#Getting Quote for 31/04/2020
apple_quote = web.DataReader('AAPL', data_source='yahoo', start='')