Investo_AI / app.py
muskangoyal06's picture
Update app.py
a2d44d6 verified
raw
history blame
3.64 kB
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()