Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Absolute
- AGI
- ai
- AI agents
- AI engineer
- AI researcher
- ajax
- algorithm
- Algorithms
- aliases
- Array 객체
- ASI
- bayes' theorem
- Bit
- Blur
- BOM
- bootstrap
- canva
- challenges
- ChatGPT
Archives
- Today
- In Total
A Joyful AI Research Journey🌳😊
[8] 241108 Team Project Results: Stock Headline Sentiment Analysis [Goorm All-In-One Pass! AI Project Master 4기 8일] 본문
🌳AI Project Mastery Bootcamp 2024✨/Project
[8] 241108 Team Project Results: Stock Headline Sentiment Analysis [Goorm All-In-One Pass! AI Project Master 4기 8일]
yjyuwisely 2024. 11. 8. 10:27241108 Fri 8th class
감성 분석 Streamlit 버전을 만들었다
뉴스 감정 분석 및 이벤트 영향 표시
- 뉴스 헤드라인 감정 분석: 최근 주식과 관련된 뉴스 기사나 소셜 미디어 데이터를 수집하여, 감정 분석을 통해 긍정적, 부정적, 중립적인 의견을 분류할 수 있어요. 이를 통해 사용자에게 최근 뉴스가 주식에 어떤 영향을 미치는지 보여줄 수 있습니다.
배포한 웹사이트
https://stock-sentiment-app.streamlit.app/
코드)
app.py
import streamlit as st
import requests
from bs4 import BeautifulSoup
from transformers import pipeline
import time
def get_stock_buy_recommendation(stock_name):
"""
Fetch news headlines and provide stock buy recommendations
"""
# Add a spinner while processing
with st.spinner(f'분석 중... {stock_name}에 대한 정보를 가져오는 중입니다.'):
url = f'https://search.naver.com/search.naver?ie=utf8&sm=nws_hty&query={stock_name}'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
# Extract headlines
headlines = [headline.get_text() for headline in soup.find_all('a', class_='news_tit')[:10]]
# Initialize sentiment analyzer
sentiment_analyzer = pipeline('sentiment-analysis')
# Analyze sentiments
results = []
positive_count = 0
negative_count = 0
for headline in headlines:
sentiment = sentiment_analyzer(headline)[0]['label']
if sentiment == 'POSITIVE':
sentiment_emoji = '😊'
positive_count += 1
elif sentiment == 'NEGATIVE':
sentiment_emoji = '😰'
negative_count += 1
else:
sentiment_emoji = '😐'
results.append((headline, sentiment_emoji))
# Determine recommendation
if positive_count > negative_count:
buy_recommendation = f'{stock_name}을(를) 매수하세요 😊'
elif positive_count < negative_count:
buy_recommendation = f'{stock_name}을(를) 매수하지 마세요 😰'
else:
buy_recommendation = f'{stock_name}에 대해 중립적인 입장입니다 😐'
return results, buy_recommendation
# Set up the Streamlit page
st.set_page_config(page_title="주식 투자 의견 분석기", page_icon="📈")
# Add title and description
st.title("📈 주식 투자 의견 분석기")
st.markdown("""
이 앱은 네이버 뉴스 헤드라인을 분석하여 주식 투자 의견을 제공합니다.
""")
# Create input field
stock_name = st.text_input("종목명을 입력하세요:", placeholder="예: 삼성전자")
# Create analyze button
if st.button("투자의견 분석"):
if stock_name:
try:
# Get recommendation
headline_results, buy_recommendation = get_stock_buy_recommendation(stock_name)
# Display results
st.subheader(f"{stock_name}에 대한 분석 결과")
# Display buy recommendation in a highlighted box
st.info(buy_recommendation)
# Display headlines in an expandable section
with st.expander("뉴스 헤드라인 상세 분석 보기"):
for headline, emoji in headline_results:
st.write(f"{emoji} {headline}")
except Exception as e:
st.error(f"오류가 발생했습니다: {str(e)}")
else:
st.warning("종목명을 입력해주세요.")
# Add footer
st.markdown("---")
st.markdown("Made with ❤️ using Streamlit")
requirement.txt
streamlit
requests
beautifulsoup4
transformers
torch
cd stock_analyzer
pip install -r requirements.txt
streamlit run app.py
You can now view your Streamlit app in your browser.
Local URL: http://localhost:8501
결과)
728x90
반응형
Comments