경제 데이터가 필요할 때는 Fred API를 사용하면 됨
무료로 사용 가능
가장 먼저 사용해 본 건 Tags,
- 엔드 포인트는 fred/tags/series
- CPI 관련 데이터를 보고 싶었음
Response는 내가 원하는 값은 아니었음
나는 정확히 "미국 근원 소비자 물가지수" 데이터가 필요했기 때문에
이런 지수 값들을 보려면,
엔드포인트 =fred/series/observations를 확인하면 됐다
원하는 데이터의 시리즈 ID만 넣어주면 됨
시리즈 ID는 웬만하면 챗GPT가 알고 있었음
import requests
# 미국 CPI 및 근원 CPI 시리즈 ID
CPI_ID = "CPIAUCSL" # 미국 일반 CPI
CORE_CPI_ID = "CPILFESL" # 미국 근원 CPI (식료품·에너지 제외)
# CPI 데이터의 Release ID (CPI는 Release ID 10번)
RELEASE_ID = 10 # CPI 발표 일정
# FRED API URL
# CPI 데이터 가져오기 (전년 동월 대비 YoY%, 전월 대비 MoM% 포함)
def get_cpi_data(series_id, units=None):
params = {
"api_key": FRED_API_KEY,
"file_type": "json",
"series_id": series_id,
"observation_start": "2024-01-01",
"observation_end": "2025-01-01",
"sort_order": "desc",
"limit": 12 # 최근 12개월 데이터 조회
}
if units: # 변환 옵션 적용 (YoY 또는 MoM)
params["units"] = units
response = requests.get(BASE_URL, params=params)
if response.status_code == 200:
return response.json()["observations"]
else:
print(f"Error: {response.status_code}, {response.text}")
return []
# CPI 발표 일정 가져오기
def get_cpi_release_dates():
params = {
"api_key": FRED_API_KEY,
"file_type": "json",
"release_id": RELEASE_ID,
"sort_order": "desc",
"limit": 12 # 최근 12개월 발표 일정 가져오기
}
response = requests.get(RELEASE_URL, params=params)
if response.status_code == 200:
return [release["date"] for release in response.json()["release_dates"]]
else:
print(f"Error: {response.status_code}, {response.text}")
return []
# 데이터 가져오기 (CPI 값, YoY, MoM)
cpi_data = get_cpi_data(CPI_ID) # 일반 CPI 값
cpi_yoy_data = get_cpi_data(CPI_ID, units="pc1") # 일반 CPI 전년 동월 대비 상승률(%)
cpi_mom_data = get_cpi_data(CPI_ID, units="pch") # 일반 CPI 전월 대비 상승률(%)
core_cpi_data = get_cpi_data(CORE_CPI_ID) # 근원 CPI 값
core_cpi_yoy_data = get_cpi_data(CORE_CPI_ID, units="pc1") # 근원 CPI 전년 동월 대비 상승률(%)
core_cpi_mom_data = get_cpi_data(CORE_CPI_ID, units="pch") # 근원 CPI 전월 대비 상승률(%)
release_dates = get_cpi_release_dates() # CPI 발표 일정 가져오기
# 발표 일정 개수가 부족하면 "N/A"로 채우기
while len(release_dates) < len(cpi_data):
release_dates.append("N/A") # 부족한 발표 일정은 "N/A" 처리
# 데이터 출력 (CPI + 발표일정 포함)
print("\n 미국 CPI 및 전년 동월 대비(YoY %) & 전월 대비(MoM %) 변화율 (최근 12개월)")
for i in range(len(cpi_data)):
print(f"데이터 기준 월: {cpi_data[i]['date']}, CPI: {cpi_data[i]['value']}, CPI YoY: {cpi_yoy_data[i]['value']}%, CPI MoM: {cpi_mom_data[i]['value']}%, 발표일: {release_dates[i]}")
print("\n 미국 근원 CPI 및 전년 동월 대비(YoY %) & 전월 대비(MoM %) 변화율 (최근 12개월)")
for i in range(len(core_cpi_data)):
print(f"데이터 기준 월: {core_cpi_data[i]['date']}, 근원 CPI: {core_cpi_data[i]['value']}, 근원 CPI YoY: {core_cpi_yoy_data[i]['value']}%, 근원 CPI MoM: {core_cpi_mom_data[i]['value']}%, 발표일: {release_dates[i]}")
근데 시리즈 ID 틀릴 때가 있는데, 그럴 때는 직접 검색
자세히 검색하지 않고 그냥 "core cpi" 정도만 검색하면 시리즈 ID 찾을 수 있다
발표일 데이터를 같이 받았음
발표일 엔드포인트는 RELEASE_DATES_ENDPOINT = "/fred/release/dates"
지표 발표 후, 시장 반응 같은 정보들을 위해 날짜를 같이 가져왔다.
근데 개별 릴리즈 데이트를 가져오려면 release_id 가 필요한데,
ChatGPT 선생님이 release_id는 계속 틀리게 알려줌
# PCE 발표 일정 가져오기
def get_pce_release_dates():
params = {
"api_key": FRED_API_KEY,
"file_type": "json",
"release_id": RELEASE_ID,
"sort_order": "desc",
"limit": 12 # 최근 12개월 발표 일정 가져오기
}
response = requests.get(RELEASE_DATES_URL, params=params)
# return response
if response.status_code == 200:
return [release["date"] for release in response.json()["release_dates"]]
else:
print(f"Error: {response.status_code}, {response.text}")
return []
그래서 직접 찾아야 함
엔드포인트는 RELEASES_DATES_ENDPOINT = "/fred/releases/dates"
release/dates 아님
여기로 요청하면, 설정한 기간 내에 발표한 데이터 이름과 릴리즈 ID 모두 볼 수 있음
import requests
# FRED API URL
# FRED 발표 일정 데이터 가져오기
def get_all_release_dates():
params = {
"api_key": FRED_API_KEY,
"file_type": "json",
"realtime_start": "2024-01-01",
"realtime_end": "9999-12-31",
"limit": 1000, # 최대 1000개 데이터 가져오기
"order_by": "release_date",
"sort_order": "desc"
}
response = requests.get(RELEASES_DATES_URL, params=params)
if response.status_code == 200:
return response.json()
else:
print(f"Error: {response.status_code}, {response.text}")
return None
# 실행
release_dates = get_all_release_dates()
# 결과 출력
if release_dates:
for release in release_dates["release_dates"]:
print(f"Release Date: {release['date']}, Release ID: {release['release_id']}, Release Name: {release['release_name']}")
나는 PCE의 Release ID가 필요했고, 이는 Personal Income and Outlays 보고서에 포함
미국 미시간대 인플레이션 기대치 값도 가져오려고 했다
import requests
# 미시간 대학교 기대 인플레이션 시리즈 ID
MICH_EXP_INFLATION_ID = "MICH"
# FRED API URL
# 📌 API 요청 함수 (최신 데이터 포함)
def get_michigan_inflation_data():
params = {
"api_key": FRED_API_KEY,
"file_type": "json",
"series_id": MICH_EXP_INFLATION_ID,
"observation_start": "2024-01-01", # 시작일 유지
"observation_end": "2025-02-01", # 최신 데이터 포함하도록 변경
"sort_order": "desc", # 최신 데이터 먼저 가져오도록 변경
"limit": 100
}
response = requests.get(BASE_URL, params=params)
if response.status_code == 200:
return response.json()["observations"]
else:
print(f"Error: {response.status_code}, {response.text}")
return []
# 데이터 가져오기
mich_data = get_michigan_inflation_data()
# 보기 쉽게 출력
print("\n 미시간 대학교 소비자 인플레이션 기대치 (최신 포함)\n")
print(f"{'날짜':<12} {'기대 인플레이션 (%)':<10}")
print("=" * 30)
for entry in mich_data:
date = entry["date"]
value = entry["value"]
print(f"{date:<12} {value:<10}")
일단 특징은
- 미시간대 인플레이션 기대치는 월에 2번 발표가 됨
- 처음 발표되는 것은 예비치, 두 번째 발표되는 것은 확정치
- Response 값들은 확정치임
결과값
출처 : 인베스팅 닷컴
하지만, 25년 1월 데이터가 발표됐는데 응답 데이터에는 없었음
그래서 좀 추측을 해보면, 확정치 발표가 1월 25일에 됐는데
업데이트가 1월 24일이라 데이터를 받지 못한 건가?..