Spaces:
Sleeping
Sleeping
File size: 3,635 Bytes
586da4f b394f68 586da4f b394f68 586da4f b394f68 5e036fb b394f68 586da4f b394f68 586da4f b394f68 586da4f b394f68 7a274a9 b394f68 586da4f b394f68 586da4f a2d44d6 b394f68 586da4f b394f68 edee933 b394f68 586da4f c4d773d edee933 7a274a9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 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 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
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()
|