데이터 엔지니어링/데이터 처리 애플리케이션

야후 파이넨스 API를 이용한 주식정보 통계 만들기

General AI 2024. 7. 24. 09:05
728x90
반응형

야후 파이넨스 API를 이용한 주식정보 통계 만들기

Python과 Streamlit을 사용하여 야후 파이넨스 API로부터 주식 정보를 가져와 통계를 만드는 방법에 대해 알아보겠습니다. 특히 인기 있는 미국 ETF들의 최근 일주일 성과를 비교하는 대시보드를 만들어 볼 것입니다.

야후 파이넨스 API를 이용한 주식정보 통계 만들기

야후 파이넨스 API를 이용한 주식정보 통계 만들기

필요한 라이브러리 설치하기

우리가 사용할 주요 라이브러리는 다음과 같습니다:

  • streamlit: 데이터 애플리케이션을 쉽게 만들 수 있는 프레임워크
  • yfinance: 야후 파이넨스에서 주식 데이터를 가져오는 파이선 라이브러리
  • pandas: 데이터 처리와 분석을 위한 라이브러리

위 라이브러리를 설치하고 아래와 같은 코드를 작성합니다.

import streamlit as st
import yfinance as yf
import pandas as pd
from datetime import datetime, timedelta

# 페이지 설정
st.set_page_config(layout="wide")

# 인기 있는 ETF 리스트
popular_etfs = {
    "SPY": "SPDR S&P 500 ETF Trust",
    "QQQ": "Invesco QQQ Trust",
    "IVV": "iShares Core S&P 500 ETF",
    "VTI": "Vanguard Total Stock Market ETF",
    "VOO": "Vanguard S&P 500 ETF"
}

def get_etf_data(tickers, days=7):
    end_date = datetime.now()
    start_date = end_date - timedelta(days=days)

    data = yf.download(tickers, start=start_date, end=end_date)
    return data['Close']

st.title('Popular US ETF Performance - Last Week Comparison')

st.write('This app compares the performance of popular US ETFs over the last week.')

# 데이터 가져오기
df = get_etf_data(list(popular_etfs.keys()))

# 날짜 형식 변경
df.index = df.index.strftime('%Y-%m-%d')

# 변동률 계산
df_pct_change = df.pct_change()

# 2열 레이아웃 생성
col1, col2 = st.columns(2)

with col1:
    st.subheader("Daily Closing Prices")
    st.dataframe(df.style.format("{:.2f}"), height=300)

    st.subheader("Price Trends")
    st.line_chart(df)

with col2:
    st.subheader("Daily Percentage Change")
    st.dataframe(df_pct_change.style.format("{:.2%}").applymap(
        lambda x: 'color: red' if x < 0 else 'color: green'), height=300)

    st.subheader("Summary Statistics")
    summary = pd.DataFrame({
        'Start Price': df.iloc[0],
        'End Price': df.iloc[-1],
        'Total Change (%)': ((df.iloc[-1] - df.iloc[0]) / df.iloc[0] * 100).round(2),
        'Highest Price': df.max(),
        'Lowest Price': df.min(),
    })
    st.dataframe(summary.style.format({
        'Start Price': '{:.2f}',
        'End Price': '{:.2f}',
        'Total Change (%)': '{:.2f}%',
        'Highest Price': '{:.2f}',
        'Lowest Price': '{:.2f}'
    }), height=300)

st.caption("Data source: Yahoo Finance (via yfinance library)")
st.caption("Note: Past performance does not guarantee future results.")

애플리케이션 구조

애플리케이션의 코드를 분석하고 설명합니다. 이 애플리케이션은 아래 3가지로 구성됩니다.

  1. (데이터) ETF 데이터 가져오기
  2. (처리) 데이터 처리 및 변환
  3. (시각화) 데이터 시각화 및 표시

이제 각 부분을 자세히 살펴보겠습니다.

1. ETF 데이터 가져오기

먼저, yfinance 라이브러리를 사용하여 야후 파이넨스에서 ETF 데이터를 가져옵니다.

def get_etf_data(tickers, days=7):
    end_date = datetime.now()
    start_date = end_date - timedelta(days=days)

    data = yf.download(tickers, start=start_date, end=end_date)
    return data['Close']

이 함수는 주어진 티커 목록에 대해 지정된 기간 동안의 종가 데이터를 가져옵니다.

2. 데이터 처리 및 변환

가져온 데이터는 추가 처리가 필요합니다. 날짜 형식을 변경하고 일일 변동률을 계산합니다.

df = get_etf_data(list(popular_etfs.keys()))
df.index = df.index.strftime('%Y-%m-%d')
df_pct_change = df.pct_change()

3. 데이터 시각화 및 표시

Streamlit을 사용하여 데이터를 시각적으로 표현합니다. 우리는 2열 레이아웃을 사용하여 정보를 효과적으로 표시합니다.

col1, col2 = st.columns(2)

with col1:
    st.subheader("Daily Closing Prices")
    st.dataframe(df.style.format("{:.2f}"), height=300)

    st.subheader("Price Trends")
    st.line_chart(df)

with col2:
    st.subheader("Daily Percentage Change")
    st.dataframe(df_pct_change.style.format("{:.2%}").applymap(
        lambda x: 'color: red' if x < 0 else 'color: green'), height=300)

    # 요약 통계 표시
    ...

작성된 파이선 코드를 실행하면 아래와 같은 화면을 볼 수 있습니다.

  • 일일 종가 데이터
  • 가격 추세 차트
  • 일간 변동률 (색상으로 구분)
  • 요약 통계 (시작 가격, 종료 가격, 총 변동률, 최고가, 최저가)

야후 파이넨스 API를 이용한 주식정보 통계 만들기

이렇게 만든 대시보드는 투자자들이 주요 ETF들의 최근 성과를 쉽게 비교하고 분석할 수 있게 해줍니다. Python과 Streamlit의 강력한 기능을 활용하면, 복잡한 금융 데이터도 간단하고 직관적인 인터페이스로 표현할 수 있습니다. 이 프로젝트를 확장하여 더 많은 주식이나 다른 유형의 금융 상품을 포함시킬 수 있고, 더 긴 기간의 데이터를 분석하거나 추가적인 기술적 지표를 계산할 수도 있습니다.

728x90
반응형