Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import yfinance as yf | |
| import matplotlib.pyplot as plt | |
| import pandas as pd | |
| from sklearn.model_selection import train_test_split | |
| from sklearn.ensemble import RandomForestRegressor | |
| from sklearn.metrics import mean_squared_error | |
| st.title("Stockiza: Stock Price App") | |
| # Get user input for stock symbol | |
| stock_symbol = st.text_input("Enter a stock symbol:", "AAPL") | |
| # Add a button to fetch data | |
| fetch_button = st.button("Fetch Data") | |
| if fetch_button: | |
| try: | |
| # Fetch stock data using yfinance | |
| stock = yf.Ticker(stock_symbol) | |
| stock_info = stock.info | |
| # Display stock information | |
| st.subheader(f"{stock_info['longName']} ({stock_symbol})") | |
| # Check if 'currentPrice' key exists in stock_info | |
| if 'currentPrice' in stock_info: | |
| st.write(f"Current Price: ${stock_info['currentPrice']:.2f}") | |
| else: | |
| st.write("Current Price: Not available") | |
| # Check if other keys exist before accessing them | |
| if'regularMarketDayRange' in stock_info: | |
| st.write(f"Day's Range: ${stock_info['regularMarketDayRange']}") | |
| if 'fiftyTwoWeekRange' in stock_info: | |
| st.write(f"52-Week Range: ${stock_info['fiftyTwoWeekRange']}") | |
| if'regularMarketVolume' in stock_info: | |
| st.write(f"Volume: {stock_info['regularMarketVolume']:,.0f}") | |
| if'marketCap' in stock_info: | |
| st.write(f"Market Cap: ${stock_info['marketCap']:,.2f}") | |
| # Add a graph | |
| stock_data = stock.history(period="5y") | |
| fig, ax = plt.subplots() | |
| ax.plot(stock_data.index, stock_data["Close"]) | |
| ax.set_title(f"{stock_symbol} Stock Price") | |
| ax.set_xlabel("Date") | |
| ax.set_ylabel("Price ($)") | |
| st.pyplot(fig) | |
| # Prepare data for time series model | |
| stock_data['Date'] = pd.to_datetime(stock_data.index) | |
| stock_data['Year'] = stock_data['Date'].dt.year | |
| stock_data['Month'] = stock_data['Date'].dt.month | |
| stock_data['Day'] = stock_data['Date'].dt.day | |
| # Split data into training and testing sets | |
| X = stock_data[['Year', 'Month', 'Day']] | |
| y = stock_data['Close'] | |
| X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) | |
| # Train a random forest regressor model | |
| model = RandomForestRegressor(n_estimators=100, random_state=42) | |
| model.fit(X_train, y_train) | |
| # Make predictions on the test set | |
| y_pred = model.predict(X_test) | |
| # Evaluate the model | |
| mse = mean_squared_error(y_test, y_pred) | |
| rmse = mse ** 0.5 | |
| st.write(f"Root Mean Squared Error (RMSE): {rmse:.2f}") | |
| # Use the model to predict the stock price 5 years from now | |
| future_date = pd.to_datetime('2027-12-31') | |
| future_data = pd.DataFrame({'Year': [future_date.year], 'Month': [future_date.month], 'Day': [future_date.day]}) | |
| future_price = model.predict(future_data) | |
| st.write(f"Predicted Price 5 Years from Now: ${future_price[0]:.2f}") | |
| except Exception as e: | |
| st.error(f"Error: {e}") |