Abhisesh7 commited on
Commit
a1b9452
·
verified ·
1 Parent(s): 2c7a50f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +92 -52
app.py CHANGED
@@ -1,56 +1,96 @@
1
- import gradio as gr
2
- import pandas as pd
3
- import numpy as np
4
  import yfinance as yf
 
 
 
5
  from sklearn.preprocessing import MinMaxScaler
6
- from tensorflow import keras
7
-
8
- # Load your trained model
9
- model = keras.models.load_model('your_model.h5') # Ensure this path is correct
10
-
11
- # Function to predict stock prices
12
- def predict_stock_price(stock_ticker, start_date, end_date):
13
- # Fetch data
14
- data = yf.download(stock_ticker, start=start_date, end=end_date)
15
-
16
- # Check if data is returned
17
- if data.empty:
18
- return "No data available for the selected dates."
19
-
20
- # Preprocess data
21
- scaler = MinMaxScaler()
22
- scaled_data = scaler.fit_transform(data['Close'].values.reshape(-1, 1))
23
-
24
- # Prepare input for the model
25
- input_data = scaled_data[-60:] # Use the last 60 days of data
26
- input_data = input_data.reshape((1, input_data.shape[0], 1))
27
-
28
- # Predict stock prices
29
- prediction = model.predict(input_data)
30
- predicted_price = scaler.inverse_transform(prediction) # Rescale back to original price
31
-
32
- return f"Predicted stock price for tomorrow: ${predicted_price[0][0]:.2f}"
33
-
34
- # Create the Gradio interface
35
- stock_ticker_input = gr.Dropdown(
36
- choices=["AAPL", "GOOGL", "MSFT", "AMZN", "TSLA"], # Add more tickers as needed
37
- label="Select Stock Ticker"
38
- )
39
-
40
- start_date_input = gr.Date(label="Start Date")
41
- end_date_input = gr.Date(label="End Date")
42
-
43
- iface = gr.Interface(
44
- fn=predict_stock_price,
45
- inputs=[
46
- stock_ticker_input,
47
- start_date_input,
48
- end_date_input
49
- ],
50
- outputs="text",
51
- title="Stock Price Prediction App",
52
- description="Enter the stock ticker and date range to predict the stock price for tomorrow."
53
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
 
55
  # Launch the Gradio app
56
- iface.launch()
 
 
 
 
1
  import yfinance as yf
2
+ import numpy as np
3
+ import pandas as pd
4
+ import tensorflow as tf
5
  from sklearn.preprocessing import MinMaxScaler
6
+ import gradio as gr
7
+ import matplotlib.pyplot as plt
8
+
9
+ # Define stock tickers for the dropdown
10
+ tickers = ['AAPL', 'MSFT', 'GOOGL', 'TSLA', 'AMZN', 'FB', 'NFLX', 'NVDA', 'INTC', 'IBM']
11
+
12
+ # Function to fetch stock data and make predictions
13
+ def stock_prediction_app(ticker, start_date, end_date):
14
+ # Fetch historical stock data from Yahoo Finance
15
+ stock_data = yf.download(ticker, start=start_date, end=end_date)
16
+
17
+ # Check if data is fetched correctly
18
+ if stock_data.empty:
19
+ return "No data available for the selected date range.", None
20
+
21
+ # Prepare the data for LSTM model
22
+ df_close = stock_data[['Close']] # Use only the 'Close' column for prediction
23
+ scaler = MinMaxScaler(feature_range=(0, 1))
24
+ scaled_data = scaler.fit_transform(df_close)
25
+
26
+ # Create datasets for training the LSTM model
27
+ def create_dataset(data, time_step=60):
28
+ X_train, y_train = [], []
29
+ for i in range(len(data)-time_step-1):
30
+ X_train.append(data[i:(i+time_step), 0])
31
+ y_train.append(data[i + time_step, 0])
32
+ return np.array(X_train), np.array(y_train)
33
+
34
+ X_train, y_train = create_dataset(scaled_data)
35
+
36
+ # Reshape the data for LSTM [samples, time steps, features]
37
+ X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)
38
+
39
+ # Define LSTM model
40
+ lstm_model = tf.keras.Sequential([
41
+ tf.keras.layers.LSTM(50, return_sequences=True, input_shape=(60, 1)),
42
+ tf.keras.layers.LSTM(50, return_sequences=False),
43
+ tf.keras.layers.Dense(25),
44
+ tf.keras.layers.Dense(1)
45
+ ])
46
+
47
+ # Compile the model
48
+ lstm_model.compile(optimizer='adam', loss='mean_squared_error')
49
+
50
+ # Train the model
51
+ lstm_model.fit(X_train, y_train, batch_size=1, epochs=1)
52
+
53
+ # Predict on the same data (just for demonstration)
54
+ predictions = lstm_model.predict(X_train)
55
+ predictions = scaler.inverse_transform(predictions) # Convert back to original scale
56
+
57
+ # Create a plot to show predictions
58
+ plt.figure(figsize=(10, 5))
59
+ plt.plot(df_close.values, label='Actual Stock Price')
60
+ plt.plot(predictions, label='Predicted Stock Price')
61
+ plt.title(f'{ticker} Stock Price Prediction')
62
+ plt.xlabel('Days')
63
+ plt.ylabel('Stock Price')
64
+ plt.legend()
65
+
66
+ # Save the plot to display in Gradio app
67
+ plt.savefig('stock_prediction_plot.png')
68
+
69
+ # Return a message and the path to the saved plot
70
+ return f"Prediction complete for {ticker} from {start_date} to {end_date}", 'stock_prediction_plot.png'
71
+
72
+ # Create the Gradio UI for the app
73
+ app = gr.Blocks()
74
+
75
+ with app:
76
+ gr.Markdown("# Stock Buy/Sell Prediction App")
77
+
78
+ # Dropdown for stock tickers
79
+ ticker = gr.Dropdown(tickers, label="Select Stock Ticker")
80
+
81
+ # Textboxes for manual date input
82
+ start_date = gr.Textbox(label="Start Date (YYYY-MM-DD)")
83
+ end_date = gr.Textbox(label="End Date (YYYY-MM-DD)")
84
+
85
+ # Button to trigger the prediction
86
+ predict_button = gr.Button("Predict")
87
+
88
+ # Output fields for text and image
89
+ output_text = gr.Textbox(label="Prediction Result")
90
+ output_image = gr.Image(label="Stock Price Graph")
91
+
92
+ # Set up button click event to run the prediction function
93
+ predict_button.click(fn=stock_prediction_app, inputs=[ticker, start_date, end_date], outputs=[output_text, output_image])
94
 
95
  # Launch the Gradio app
96
+ app.launch()