SPB Git forge

spb/wp8_uqo

Public
3commits 1branches 1releases
4.2 MBsize
maindefault branch
2 h agolast push
Python 56.2% TeX 43.7%
2.4 KB · 89 lines python
Raw Blame History
1"""FRED API client for macroeconomic data."""23from __future__ import annotations45import pandas as pd6from fredapi import Fred78from src.config import DATA_RAW_FRED, FRED_API_KEY9from src.utils import setup_logging1011logger = setup_logging("fred")121314def get_fred_client() -> Fred:15    """Return an authenticated FRED client."""16    return Fred(api_key=FRED_API_KEY)171819def _fetch_series(20    series_id: str,21    start: str = "2024-01-01",22    end: str = "2026-06-01",23) -> pd.DataFrame:24    """Generic helper: fetch a FRED series and return as DataFrame."""25    client = get_fred_client()26    data = client.get_series(series_id, observation_start=start, observation_end=end)27    df = data.to_frame(name=series_id)28    df.index.name = "date"29    return df303132def fetch_fed_funds_rate(33    start: str = "2024-01-01",34    end: str = "2026-06-01",35) -> pd.DataFrame:36    """Fetch DFF series (daily federal funds rate)."""37    df = _fetch_series("DFF", start, end)38    path = DATA_RAW_FRED / "fed_funds_rate.csv"39    df.to_csv(path)40    logger.info("Saved DFF (%d obs) to %s", len(df), path)41    return df424344def fetch_cpi(45    start: str = "2024-01-01",46    end: str = "2026-06-01",47) -> pd.DataFrame:48    """Fetch CPIAUCSL series (Consumer Price Index)."""49    df = _fetch_series("CPIAUCSL", start, end)50    path = DATA_RAW_FRED / "cpi.csv"51    df.to_csv(path)52    logger.info("Saved CPIAUCSL (%d obs) to %s", len(df), path)53    return df545556def fetch_unemployment(57    start: str = "2024-01-01",58    end: str = "2026-06-01",59) -> pd.DataFrame:60    """Fetch UNRATE series (unemployment rate)."""61    df = _fetch_series("UNRATE", start, end)62    path = DATA_RAW_FRED / "unemployment.csv"63    df.to_csv(path)64    logger.info("Saved UNRATE (%d obs) to %s", len(df), path)65    return df666768def fetch_all_fred_data() -> None:69    """Fetch all FRED series and save to data/raw/fred/."""70    DATA_RAW_FRED.mkdir(parents=True, exist_ok=True)71    logger.info("=== Starting FRED data acquisition ===")7273    try:74        fetch_fed_funds_rate()75    except Exception as exc:76        logger.error("Failed to fetch DFF: %s", exc)7778    try:79        fetch_cpi()80    except Exception as exc:81        logger.error("Failed to fetch CPIAUCSL: %s", exc)8283    try:84        fetch_unemployment()85    except Exception as exc:86        logger.error("Failed to fetch UNRATE: %s", exc)8788    logger.info("=== FRED data acquisition complete ===")89