Spaces:
Configuration error
Configuration error
| import streamlit as st | |
| import yfinance as yf | |
| import requests | |
| from googleapiclient.discovery import build | |
| from transformers import pipeline | |
| import numpy as np | |
| # YouTube API setup | |
| def youtube_api_setup(): | |
| api_key = 'AIzaSyB-pW8FME-a7KMRqwEeQJStTxDPqvQNMm0' # Replace with your YouTube API key | |
| youtube = build('youtube', 'v3', developerKey=api_key) | |
| return youtube | |
| # Fetch YouTube sentiment | |
| def fetch_youtube_sentiment(symbol, youtube, sentiment_model): | |
| search_response = youtube.search().list(q=symbol, part='snippet', maxResults=10).execute() | |
| video_ids = [item['id']['videoId'] for item in search_response['items'] if 'videoId' in item['id']] | |
| comments = [] | |
| for video_id in video_ids: | |
| comment_response = youtube.commentThreads().list(part='snippet', videoId=video_id, maxResults=50).execute() | |
| for comment in comment_response['items']: | |
| comment_text = comment['snippet']['topLevelComment']['snippet']['textOriginal'] | |
| comments.append(comment_text) | |
| sentiments = sentiment_model(comments) | |
| sentiment_scores = [s['label'] for s in sentiments] | |
| positive = sentiment_scores.count('POSITIVE') | |
| negative = sentiment_scores.count('NEGATIVE') | |
| return positive, negative | |
| # Moving Average (technical analysis) | |
| def calculate_moving_average(stock_data, window_size): | |
| prices = stock_data['Close'].to_numpy() | |
| moving_avg = np.convolve(prices, np.ones(window_size)/window_size, mode='valid') | |
| return moving_avg | |
| # Fetch stock data using Yahoo Finance | |
| def fetch_stock_data(symbol): | |
| stock = yf.Ticker(symbol) | |
| stock_data = stock.history(period="1y") | |
| return stock_data | |
| # Main app | |
| def main(): | |
| st.title("Empower_AI: powered by intel ONEapi") | |
| # Input for stock symbol | |
| stock_symbol = st.text_input("Enter Stock Symbol (e.g., AAPL, TSLA):", "AAPL") | |
| if st.button("Analyze"): | |
| # Fetch stock data | |
| stock_data = fetch_stock_data(stock_symbol) | |
| # Display stock data overview | |
| st.subheader(f"Stock Overview - {stock_symbol}") | |
| st.write(stock_data.tail()) | |
| # Sentiment analysis | |
| sentiment_model = pipeline("sentiment-analysis") | |
| # YouTube Sentiment | |
| st.subheader("YouTube Sentiment Analysis") | |
| youtube = youtube_api_setup() | |
| positive_youtube, negative_youtube = fetch_youtube_sentiment(stock_symbol, youtube, sentiment_model) | |
| st.write(f"Positive Comments: {positive_youtube}, Negative Comments: {negative_youtube}") | |
| # Technical analysis (Moving Average) | |
| st.subheader("Technical Analysis (Moving Average)") | |
| window_size = st.slider("Select Moving Average Window Size:", 5, 100, 20) | |
| moving_avg = calculate_moving_average(stock_data, window_size) | |
| st.line_chart(moving_avg) | |
| # Fundamental analysis | |
| st.subheader("Fundamental Analysis") | |
| st.write("Market Cap:", stock_data['Close'].iloc[-1] * stock_data['Volume'].mean()) | |
| st.write("Price-to-Earnings Ratio (P/E):", stock_data['Close'].iloc[-1] / (stock_data['Close'].mean())) | |
| # Recommendation based on sentiment analysis | |
| st.subheader("Stock Recommendation") | |
| total_positive = positive_youtube | |
| total_negative = negative_youtube | |
| if total_positive > total_negative: | |
| st.write(f"Recommendation: **BUY** {stock_symbol}") | |
| elif total_negative > total_positive: | |
| st.write(f"Recommendation: **SELL** {stock_symbol}") | |
| else: | |
| st.write(f"Recommendation: **HOLD** {stock_symbol}") | |
| if __name__ == "__main__": | |
| main() | |