Update app.py
Browse files
app.py
CHANGED
@@ -17,63 +17,67 @@ from utils.helper import *
|
|
17 |
# Streamlit interface
|
18 |
st.title('Stock Forecasting App')
|
19 |
|
20 |
-
|
21 |
-
|
22 |
-
|
|
|
|
|
|
|
23 |
look_back = 50
|
24 |
|
25 |
if st.button('Train Models'):
|
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 |
-
|
|
|
|
17 |
# Streamlit interface
|
18 |
st.title('Stock Forecasting App')
|
19 |
|
20 |
+
with st.sidebar:
|
21 |
+
stock = st.text_input('Enter Stock Ticker', 'AAPL')
|
22 |
+
start_date = st.date_input('Start Date', dt.date(2020, 1, 1))
|
23 |
+
end_date = st.date_input('End Date', dt.date.today())
|
24 |
+
num_of_epochs = st.number_input('Insert a number', step=1, min_value=2, max_value=100, value=10)
|
25 |
+
|
26 |
look_back = 50
|
27 |
|
28 |
if st.button('Train Models'):
|
29 |
+
with st.spinner('Wait for it...'):
|
30 |
+
data = download_data(stock, start_date, end_date)
|
31 |
+
|
32 |
+
# Setting 80 percent data for training
|
33 |
+
training_data_len = math.ceil(len(data) * .8)
|
34 |
+
|
35 |
+
# Splitting the dataset
|
36 |
+
train_data = data[:training_data_len].iloc[:,:5]
|
37 |
+
test_data = data[training_data_len:].iloc[:,:5]
|
38 |
+
|
39 |
+
# Selecting Open Price values
|
40 |
+
dataset_train = train_data.Close.values
|
41 |
+
|
42 |
+
# Reshaping 1D to 2D array
|
43 |
+
dataset_train = np.reshape(dataset_train, (-1,1))
|
44 |
+
|
45 |
+
# scaling dataset
|
46 |
+
scaler = MinMaxScaler(feature_range=(0,1))
|
47 |
+
scaled_train = scaler.fit_transform(dataset_train)
|
48 |
+
|
49 |
+
# Selecting Open Price values
|
50 |
+
dataset_test = test_data.Close.values
|
51 |
+
|
52 |
+
# Reshaping 1D to 2D array
|
53 |
+
dataset_test = np.reshape(dataset_test, (-1,1))
|
54 |
+
|
55 |
+
# Normalizing values between 0 and 1
|
56 |
+
scaled_test = scaler.fit_transform(dataset_test)
|
57 |
+
|
58 |
+
# Split train and test
|
59 |
+
X_train, y_train = create_datasets(scaled_train, look_back)
|
60 |
+
X_test, y_test = create_datasets(scaled_test, look_back)
|
61 |
+
|
62 |
+
# Create models
|
63 |
+
rnn_model = create_rnn_model((look_back, 1))
|
64 |
+
lstm_model = create_lstm_model((look_back, 1))
|
65 |
+
gru_model = create_gru_model((look_back, 1))
|
66 |
+
|
67 |
+
# Training
|
68 |
+
rnn_model.fit(X_train, y_train, epochs=num_of_epochs, batch_size=1)
|
69 |
+
lstm_model.fit(X_train, y_train, epochs=num_of_epochs, batch_size=1)
|
70 |
+
gru_model.fit(X_train, y_train, epochs=num_of_epochs, batch_size=1)
|
71 |
+
|
72 |
+
# Prediction
|
73 |
+
y_rnn_pred = rnn_model.predict(X_test)
|
74 |
+
y_lstm_pred = lstm_model.predict(X_test)
|
75 |
+
y_gru_pred = gru_model.predict(X_test)
|
76 |
+
|
77 |
+
# Recover the price data
|
78 |
+
y_rnn_pred = scaler.inverse_transform(y_rnn_pred)
|
79 |
+
y_lstm_pred = scaler.inverse_transform(y_lstm_pred)
|
80 |
+
y_gru_pred = scaler.inverse_transform(y_gru_pred)
|
81 |
+
|
82 |
+
# Visualization
|
83 |
+
plot_predictions(train_data, test_data, y_rnn_pred, y_lstm_pred, y_gru_pred)
|