pandas-datareader 는 금융 및 경제 데이터를 쉽게 접근할 수 있도록 돕는 Python 라이브러리로, pandas의 확장 패키지 역할을 합니다.  초기에는 pandas.io.data 모듈로 존재했으며, 야후 파이낸스(Yahoo Finance), FRED(연방준비은행 경제 데이터), 구글 파이낸스 등에서 데이터를 가져오는 기능을 제공했습니다. 지금 보니 Yahoo는 정상적으로 동작하지 않는 경우가 종종 발생을 하네요. 뭔가 예제 코드들이랑 버전이 안 맞는게 아닌가 싶네요.

pandas 0.19.0에서 분리 (2016년 10월)pandas.io.data 모듈이 공식적으로 deprecated 되고, 별도의 패키지인 pandas-datareader 로 분리되었습니다. 이는 다음과 같은 이유에서 였습니다.

  • 의존성 최소화: pandas의 코어 기능에 집중하기 위해 외부 API 통신과 관련된 코드를 제거하고자 했습니다.
  • 유연한 유지보수: 데이터 소스의 API 변경(예: 야후 파이낸스 API 중단)에 빠르게 대응하기 위해 독립적인 패키지로 분리했습니다.
  • 확장성: 새로운 데이터 소스(Alpha Vantage, Quandl 등)를 추가하기 용이하도록 구조를 개선했습니다.

분리 이후 pandas-datareader는 pandas와 별도로 버전 관리되며, 오픈소스 커뮤니티에서 적극적으로 유지보수하고 있습니다. 데이터 소스의 변화(예: API 키 요구, 엔드포인트 변경)에 맞춰 지속적으로 업데이트되고 있습니다.

개발 목적

  1. 통합된 데이터 접근 인터페이스
    금융/경제 데이터는 야후, FRED, World Bank 등 다양한 소스에 분산되어 있습니다. pandas-datareacher는 이들 소스에 대한 일관된 API를 제공해 사용자가 소스마다 다른 코드를 작성할 필요 없이 DataFrame으로 쉽게 데이터를 불러올 수 있게 합니다.
  2. 연구 및 분석 편의성
    금융 데이터 분석, 머신러닝 모델링, 경제 연구 등에서 반복적인 데이터 수집 작업을 간소화하기 위해 개발되었습니다. 예를 들어, 단 몇 줄의 코드로 주가 또는 GDP 데이터를 조회할 수 있습니다.
  3. API 변경 대응
    야후 파이낸스의 역사적 API 중단(2017년), Alpha Vantage의 API 키 도입 등 외부 서비스 정책 변화에 유연하게 대처하기 위해 커뮤니티가 협력하여 솔루션을 제공합니다.

주요 데이터 소스

  • 금융 데이터: Yahoo Finance, Alpha Vantage, IEX Cloud
  • 경제 지표: FRED(미국 연준), World Bank, OECD
  • 기타: Nasdaq Trader, Tiingo, Quandl(유료) 등

Packege install

pip install pandas-datareader

Naver Data 

import pandas_datareader.data as web

def get_pandas_naver_data(id, start, end):
    _df = web.DataReader(id, "naver", start=start, end=end)
    return _df

Naver가 보여서 반가워서 코드를 넣어봤습니다.

Stooq Data

import pandas_datareader.data as web

def get_pandas_stooq_data(id, start, end):
    _df = web.DataReader(id, "stooq", start=start, end=end)
    return _df

Fred Data

import pandas_datareader.data as web

def get_pandas_fred_data(id):
    return web.get_data_fred(id)

Output Main Code

import datetime as dt


if "__main__" == __name__:
    df = get_pandas_naver_data('005930', '2025-01-01', '2025-01-20')
    print(df.head())

    start_date = dt.datetime(2025, 1, 1)
    end_date = dt.datetime(2025, 1, 20)

    df = get_pandas_stooq_data('AAPL', start_date, end_date)
    print(df.head())

    df = get_pandas_fred_data("UNRATE")
    print(df.head())

By Mark

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다