파이썬 – Python과 판다를 야후 파이낸스 API와 함께 사용하기

Table of Contents

    금융 데이터 분석이나 모델링을 하기위해 간단하게 사용할수 있도록 사용자 친화적인 인터페이스로 만들어진 야후 Finance API와 파이썬, 그리고 판다를 활용하여 금융 데이터를 검색하고 차트로 표현 해봅니다.

    야후 파이낸스 API란 ?

    야후 파이낸스 API는 주식, 채권, 통화, 원자재, 지수에 대한 실시간 주식 시세, 과거 데이터, 금융 뉴스를 제공하는 무료 금융 데이터 API입니다. 이 API는 JSON, CSV, XML 등 다양한 형식의 데이터에 액세스할 수 있는 다양한 엔드포인트를 제공합니다. 금융 분석가, 트레이더, 데이터 과학자가 분석 및 모델링을 위해 금융 데이터를 검색하는 데 널리 사용되는 야후 파이낸스 API는 다음과 같습니다.

    설치사항 확인:

    Python 3.x
    pip를 사용하여 Pandas, matplotlib, yfinance 라이브러리를 설치합니다.

    pip install pandas,matplotlib
    pip install yfinance

    야후 파이낸스 API를 사용하여 금융 데이터 검색하기

    설치 후 yfinance 패키지를 파이썬 코드로 가져올 수 있습니다. 회사의 고유 식별자를 나타내는 티커를 인수로 전달해야 합니다.

    티커 모듈을 사용하면 보다 파이썬적인 방식으로 티커 데이터에 액세스할 수 있습니다:

    티커객체의 히스토리 메서드를 사용하여 가장 최근 날짜(‘1d’는 하루에 해당)의 테슬라(TSLA)의 하루전 주식 데이터를 검색하기 위해 yfinance 라이브러리를 사용합니다.

    import yfinance as yf
    
    tsla= yf.Ticker("TSLA")
    
    # 최근 데이터 가져오기
    hist = tsla.history(period="1d")
    print(hist)

    결과:

    history 결과의 필드항목:

    Date: 특정 기간의 각 거래일을 나타내는 지수입니다.
    Open: 특정 날짜에 시장이 개장했을 때 주식이 거래되기 시작한 가격입니다.
    High: 거래일 동안 주식이 도달한 최고 가격입니다.
    Low: 거래일 동안 주식이 도달한 최저 가격입니다.
    Close: 당일 시장이 마감되었을 때 주식이 거래된 최종 가격입니다.
    Adj Close: 배당금, 주식 분할 및 기타 기업 활동에 맞게 조정된 마감 가격으로, 시간이 지남에 따라 주식 가치를 더욱 정확하게 반영합니다.
    Volume: 해당 거래일에 거래된 주식 수입니다.

    여러 회사의 티커를 잘 모르겠으면 https://stockanalysis.com/list/ 사이트에서 티커를 조회 할 수 있습니다.

    위 항목에서 원하는 그룹을 선택합니다. NASDAQ 100 을 선택하면 아래와 같은 목록이 조회 됩니다.

    기록 데이터를 얻으려면 기간을 지정하거나(이전 예제의 1D를 원하는 기간으로 수정하여) 특정 시간 범위를 정의할 수 있습니다. 1년동안 테슬라 주식의 차트를 보여주는 예제입니다.

    import yfinance as yf
    import matplotlib.pyplot as plt
    
    ticker = yf.Ticker('TSLA')
    
    stock_df = ticker.history(period='1y')
    
    stock_df['Close'].plot(title="Tesla's stock")
    plt.show()  

    결과:

    최근 10년동안 테슽라 주식 차트를 보여줍니다. 날짜를 시작일과 종료일로 구분해서 데이터를 가져옵니다.

    import yfinance as yf
    import matplotlib.pyplot as plt
    import datetime
    startDate = datetime.datetime(2014, 1, 1)
    endDate = datetime.datetime(2024, 6, 30)
    stock_data = yf.Ticker('TSLA')
    stock_df = stock_data.history(start=startDate, end=endDate)
    stock_df['Close'].plot(title="Tesla's stock")
    plt.show()  
    

    결과:

    내역을 하나의 테이블로 다운로드합니다:

    import yfinance as yf
    data = yf.download("SPY AAPL", period="1mo")

    history

    • 단일 티커에 사용됩니다.
    • 더 많은 사용자 정의 옵션을 제공합니다.
    • 상세한 분석 및 특정 요구 사항에 적합합니다.

    download

    • 여러 개의 티커에 사용됩니다.
    • 일괄 데이터 검색이 더 간단하고 잠재적으로 더 빠릅니다.
    • history에 비해 사용자 정의가 간단합니다.

    여러 주식 데이터 검색하기


    여러 주식에 대한 데이터를 검색하여 데이터라는 이름의 데이터 프레임에 저장합니다. 그런 다음 일일 수익률을 계산하고 Matplotlib 패키지를 사용하여 모든 주가의 누적 수익률을 그래프로 나타냅니다.

    import yfinance as yf
    import matplotlib.pyplot as plt
    import pandas as pd
    import datetime
    # Define the ticker list
    import pandas as pd
    tickers_list = ['AAPL', 'GOOGLE', 'AMZN', 'META', 'NFLX', 'NVDA', 'TSLA']
    
    data = yf.download(tickers_list,'2023-1-1')['Adj Close']
    
    ((data.pct_change()+1).cumprod()).plot(figsize=(10, 7))
    plt.legend()
    plt.title("Close Value", fontsize=16)
    
    plt.ylabel('Cumulative Close Value', fontsize=14)
    plt.xlabel('Time', fontsize=14)
    
    plt.grid(which="major", color='k', linestyle='-.', linewidth=0.5)
    plt.show()

    yfinance 라이브러리에서 티커 개체의 정보 속성을 사용해 회사 세부 정보를 검색하면 다양한 재무 및 운영 용어가 제공됩니다. 다음은 회사 세부 정보에 표시될 수 있는 일반적인 용어를 관련 카테고리별로 정리한 것입니다:

    Financial Information (금융 정보)

    • PreviousClose: 전 거래일의 마지막 거래 가격.
    • Open: 현재 거래일의 개장 가격.
    • DayLow: 현재 거래일 동안 주식이 도달한 최저 가격.
    • DayHigh: 현재 거래일 동안 주식이 도달한 최고 가격.
    • Volume: 현재 거래일 동안 거래된 주식의 총 수량.
    • MarketCap: 회사의 발행 주식의 총 시장 가치.
    • EnterpriseValue: 부채를 포함하고 현금을 제외한 회사의 총 가치.
    • TrailingPE: 최근 12개월의 수익을 기준으로 한 주가수익비율(P/E).
    • ForwardPE: 예상 수익을 기준으로 한 주가수익비율(P/E).
    • PriceToSalesTrailing12Months: 최근 12개월의 매출을 기준으로 한 주가매출비율(P/S).
    • EVToRevenue: 매출 대비 기업 가치 비율.
    • EVToEBITDA: 세전 영업이익 대비 기업 가치 비율.
    • 52WeekHigh: 지난 52주 동안 주식이 도달한 최고 가격.
    • 52WeekLow: 지난 52주 동안 주식이 도달한 최저 가격.
    • DividendRate: 주당 연간 배당금.
    • DividendYield: 배당 수익률, 백분율로 표현.
    • ExDividendDate: 배당금을 지급하지 않는 날짜.
    • PayoutRatio: 순이익 대비 배당금 비율.
    • Beta: 시장에 대한 주식의 변동성.
    • TotalDebt: 회사의 총 부채.
    • TotalCash: 회사의 현금 및 현금성 자산.
    • TotalRevenue: 회사가 생성한 총 매출.
    • GrossProfits: 총 매출에서 매출원가를 뺀 금액.
    • EBITDA: 세금, 이자, 감가상각비 차감 전 영업이익.
    • NetIncomeToCommon: 보통주 주주에게 귀속되는 순이익.
    • FreeCashflow: 자본 지출을 제외한 회사가 생성한 현금.

    Operational Information (운영정보)

    • Sector: 회사가 운영하는 산업 부문.
    • Industry: 회사가 운영하는 특정 산업.
    • FullTimeEmployees: 정규직 직원 수.
    • Country: 회사가 본사를 두고 있는 국가.
    • City: 회사가 본사를 두고 있는 도시.
    • Address1: 회사 본사의 주요 주소.
    • Website: 회사의 웹사이트.

    Growth and Profitability Metrics (성장 및 수익성 지표)

    • OperatingMargins: 영업이익 대비 매출 비율.
    • ProfitMargins: 순이익 대비 매출 비율.
    • GrossMargins: 총 이익 대비 매출 비율.
    • ReturnOnAssets: 총 자산 대비 순이익 비율.
    • ReturnOnEquity: 주주 자본 대비 순이익 비율.

    Balance Sheet Information(대차 대조표)

    • CurrentRatio: 유동자산 대비 유동부채 비율.
    • QuickRatio: 유동자산 중 즉시 현금화 가능한 자산 대비 유동부채 비율.