본문 바로가기
대외활동/기타

Yahoo Finance로 회사별 주식 데이터 가져오기

by 윤J 2024. 11. 25.

이번에 이화여대 컴퓨터공학과 캡스톤 졸업 프로젝트로 '주식 투자 입문에 진입 장벽을 느끼는 2030세대를 위해 AI 챗봇을 활용하여 쉽게 주식 투자를 학습할 수 있는 초보자용 모의 투자 서비스' 를 개발하게 되었다.

 

 

우리는 AI 챗봇 모델로 GPT 4.0 Turbo 모델을 사용하기로 결정했고, 모델을 우리 서비스에 맞게 주식에 대한 질의응답이 가능하게 하려면 JSON 형식의 데이터를 넣어주어야 한다. 이를 위해서 우리팀은 Yahoo Finance API 를 사용해서 데이터를 가져오기로 했다. python 기반의 google Colab를 사용하였다.

 

1. Yahoo Finance 주식 데이터 가져오기

 

import yfinance as yf

# 주식 데이터 가져오는 함수
def get_stock_data(ticker: str, period: str = "2y"):
    stock = yf.Ticker(ticker)
    history = stock.history(period=period)
    history_text = ""
    for _, row in history.iterrows():
        history_text += (
            f"날짜: {row.name.strftime('%Y-%m-%d')} / "
            f"시가: {row['Open']:.2f} / "
            f"최고가: {row['High']:.2f} / "
            f"최저가: {row['Low']:.2f} / "
            f"종가: {row['Close']:.2f} / "
            f"거래량: {int(row['Volume'])}주\n"
        )
    return history_text

 

위 코드에서 get_stock_data 함수는 주식 티커(ticker)를 받아 해당 주식의 2년간의 과거 주식 데이터를 가져온다. 각 날짜별로 시가(Open), 최고가(High), 최저가(Low), 종가(Close), 거래량(Volume) 등의 데이터를 포함한다. 

 

2. Yahoo Finance 회사 기본 데이터 가져오기

 

# 기본 정보 가져오는 함수
def get_stock_info(ticker: str):
    stock = yf.Ticker(ticker)
    info = stock.info
    info_text = f"""
회사 이름: {info.get('shortName', '정보 없음')}
전체 회사 이름: {info.get('longName', '정보 없음')}
종목 코드: {info.get('symbol', '정보 없음')}
산업 분야: {info.get('sector', '정보 없음')}
시장 가격: {info.get('regularMarketPrice', '정보 없음')} 원
전일 종가: {info.get('previousClose', '정보 없음')} 원
당일 시가: {info.get('regularMarketOpen', '정보 없음')} 원
당일 최고가: {info.get('dayHigh', '정보 없음')} 원
당일 최저가: {info.get('dayLow', '정보 없음')} 원
시가총액: {info.get('marketCap', '정보 없음')} 원
52주 최고가: {info.get('fiftyTwoWeekHigh', '정보 없음')} 원
52주 최저가: {info.get('fiftyTwoWeekLow', '정보 없음')} 원
PE 비율: {info.get('trailingPE', '정보 없음')}
PEG 비율: {info.get('pegRatio', '정보 없음')}
배당수익률: {info.get('dividendYield', '정보 없음')}%
배당금: {info.get('dividendRate', '정보 없음')} 원
주식 거래량: {info.get('averageDailyVolume3Month', '정보 없음')} 주
영업 이익: {info.get('operatingCashflow', '정보 없음')} 원
매출: {info.get('revenue', '정보 없음')} 원
순이익: {info.get('netIncomeToCommon', '정보 없음')} 원
총 부채: {info.get('totalDebt', '정보 없음')} 원
현금 자산: {info.get('totalCash', '정보 없음')} 원
기업 가치: {info.get('enterpriseValue', '정보 없음')} 원
이익률: {info.get('profitMargins', '정보 없음')}%
매출 총이익률: {info.get('grossMargins', '정보 없음')}%
영업 이익률: {info.get('operatingMargins', '정보 없음')}%
"""
    return info_text

 

위 코드에서는 get_stock_info 함수가 주식 티커에 대한 기본적인 금융 정보를 가져온다. 주식 이름, 종목 코드, 시가총액, P/E 비율, 배당수익률 등 다양한 회사 정보를 반환한다.

 

3. 회사 타커 기반으로 데이터 JSON 형식으로 저장하기

 

# 삼성전자, 현대차, LG에너지솔루션 티커
tickers = {
    "삼성전자": "005930.KS",
    "현대차": "005380.KS",
    "LG에너지솔루션": "373220.KS"
}

# Fine-Tuning 데이터 준비
fine_tuning_data = []

for company, ticker in tickers.items():
    # 주식 데이터와 기본 정보 가져오기
    stock_history_text = get_stock_data(ticker)
    stock_info_text = get_stock_info(ticker)
    
    # Fine-Tuning 데이터에 추가
    fine_tuning_data.append({
        "prompt": f"{company}의 최근 2년 주식 데이터를 알려줘.",
        "completion": stock_history_text
    })
    fine_tuning_data.append({
        "prompt": f"{company}의 기본 정보를 알려줘.",
        "completion": stock_info_text
    })

# Fine-Tuning 데이터를 JSON 파일로 저장
with open('fine_tuning_data_new.json', 'w', encoding='utf-8') as f:
    json.dump(fine_tuning_data, f, ensure_ascii=False, indent=4)

print("JSON 파일이 성공적으로 저장되었습니다.")

 

이 코드에서는 삼성전자, 현대차, LG에너지솔루션의 주식 데이터를 가져오고, 이를 JSON 형식으로 변환하여 GPT 모델 학습에 사용할 수 있도록 한다. 각 회사에 대해 두 가지 요청을 포함한 데이터를 생성하는데, 첫 번째 요청은 주식의 최근 2년간의 데이터를 묻는 것이고, 두 번째는 회사의 기본 정보를 묻는 것이다. 저렇게 저장된 JSON 파일을 불러와서 GPT 학습에 사용할 예정이다.

 

 

실제로 반환되는 JSON 파일은 다음과 같다!

해당 데이터를 기반으로 GPT가 제대로 챗봇의 역할을 할 수 있길 기대해본다. 😄

댓글