프로그래밍/파이썬

[Python] 버핏 지수 계산하기 (FRED API 이용)

퀀트매니아 2023. 2. 1. 23:10
728x90

Python - 버핏 지수 계산하기 (FRED API 이용)

 

안녕하세요.

오늘은 지난 시간 포스팅에서 설명드렸던 버핏 지수를 FRED API를 이용하여 계산하는 코드를 작성해 보도록 하겠습니다.

 

▼ 버핏 지수가 무엇인지는 아래 포스팅에 정리하였으니 참고해 주시면 감사하겠습니다.

버핏 지수 (Buffett Indicator) 의미와 확인 방법

 

[경제지표] 버핏 지수(Buffett Indicator) 의미와 확인 방법

버핏 지수(Buffett Indicator) 의미와 확인 방법 안녕하세요. 오늘은 한 나라의 주식시장 과열 정도를 측정해 볼 수 있는 지수인 버핏지수에 대해 그 의미를 알아보고, 이 버핏 지수를 쉽게 확인해 볼

quantmania.tistory.com

 

버핏지수는 미국주식 시장의 시가총액을 GDP로 나눈 값인데요.

FRED 사이트에서 Wilshire 5000 지수(장내 + 장외 주가 지수)와 GDP 데이터가 있는 것을 확인하였고, 이 두 지수를 API Key를 이용하여 데이터를 가져와 버핏지수 계산과 그래프를 이미지로 출력해 보는 코드를 작성해보려고 합니다.

 

 

Wilshire 5000 index

 

GDP

 

 

 

필요 라이브러리

 

FRED에서 데이터를 가져오기 위해서 fredapi 라이브러리가 필요합니다. 그래프와 날짜 계산 등을 위해 필요한 라이브러리도 아래 적어 놓았으니 pip를 이용하여 설치를 진행하시면 되겠습니다.

 

pip install fredapi
pip install pandas
pip install matplotlib
pip install datetime

 

▼ 참고로, FRED API Key를 신청하는 방법은 아래 링크를 참고하시면 되겠습니다.

FRED API KEY 신청 및 데이터 불러오기

 

[Python] FRED API KEY 신청 및 데이터 불러오기

FRED API KEY 신청 및 데이터 불러오기 안녕하세요. 오늘은 FRED 홈페이지에서 API KEY를 신청해 보고, 발급받은 KEY를 이용하여 FRED의 경제 데이터들을 불러오는 코드를 작성해보려고 합니다. FRED 데이

quantmania.tistory.com

 

 

 

전체코드

 

아래 코드는 FRED API를 이용하여 Willshire 5000 지수와 GDP 데이터를 가져온 뒤 산출한 버핏 지수를 그래프로 그려 출력하는 코드입니다.

 

 

from datetime import datetime
import fredapi
import pandas as pd
import matplotlib.pyplot as plt

# FRED
key = 'FRED API Key 입력'
fred = fredapi.Fred(api_key=key)

# 데이터 시작일 지정
start_date = datetime(1970,12,31)

# FRED 데이터 불러오기(Willshire)
willshire_data = pd.DataFrame(fred.get_series('WILL5000PRFC', observation_start=start_date), columns=['WILL'])

# FRED 데이터 불러오기(GDP)
gdp_data = pd.DataFrame(fred.get_series('GDP', observation_start=start_date), columns=['GDP'])

# 인덱스 기준으로 그래프 병합
merge_data = pd.merge(willshire_data, gdp_data, how='outer', left_index=True, right_index=True)

# 결측값 채우고, 빈 값 지우기
merge_data = merge_data.fillna(method='ffill')
merge_data = merge_data.dropna()

# 불필요한 행 지우기(첫 번째 행 삭제)
merge_data = merge_data.drop(merge_data.index[0])

# 버핏 지수 산출
buffett_indicator = merge_data['WILL'] / merge_data['GDP'] * 100

# 그래프 사이즈
plt.figure(figsize=(10, 5))

# 한글 깨짐 방지
plt.rcParams['font.family'] = 'Malgun Gothic'
plt.rcParams['axes.unicode_minus'] = False

# 그래프 그리기
plt.plot(buffett_indicator)

# 그래프 제목 작성
plt.title('버핏 지수 : {:.2f}%'.format(buffett_indicator.iloc[-1]))

# 이미지 저장 경로지정
img_path = './temp_img.png'

# 이미지 저장
plt.savefig(img_path, facecolor='#eeeeee')

# 데이터 출력
print(buffett_indicator)

 

 

위 코드를 실행하시면 아래와 같이 버핏지수가 산출되어 그래프를 만들고, 이 그래프를 이미지 파일형태로 저장하는 것을 보실 수 있습니다.

 

 

출력된 버핏 지수 이미지

 

 

다음은 코드를 간략하게 설명드리도록 하겠습니다. 먼저, FRED 데이터를 불러오는 부분을 같이 살펴보겠습니다.

 

 

# 데이터 시작일 지정
start_date = datetime(1970,12,31)

# FRED 데이터 불러오기(Willshire)
willshire_data = pd.DataFrame(fred.get_series('WILL5000PRFC', observation_start=start_date), columns=['WILL'])

# FRED 데이터 불러오기(GDP)
gdp_data = pd.DataFrame(fred.get_series('GDP', observation_start=start_date), columns=['GDP'])

 

 

FRED의 GDP 데이터는 1940년대부터 데이터가 존재했지만, Willshire 5000 지수는 1970년 12월 31일의 데이터부터 존재하는 것을 확인하여 시작일을 datetime을 이용하여 해당일로 지정하였습니다.

그리고, FRED 데이터를 가져오도록 하는 get_series함수의 observation_start값에 넣어 해당일부터 데이터를 가져오도록 했습니다.

 

 

# 인덱스 기준으로 그래프 병합
merge_data = pd.merge(willshire_data, gdp_data, how='outer', left_index=True, right_index=True)

# 결측값 채우고, 빈 값 지우기
merge_data = merge_data.fillna(method='ffill')
merge_data = merge_data.dropna()

# 불필요한 행 지우기(첫 번째 행 삭제)
merge_data = merge_data.drop(merge_data.index[0])

# 버핏 지수 산출
buffett_indicator = merge_data['WILL'] / merge_data['GDP'] * 100

 

 

그리고 두 데이터를 pandas의 merge 함수를 이용하여 인덱스 기준으로 outer 조인을 했습니다.

병합을 진행하고 나니 결측값들이 존재해서 'ffill' 옵션으로 바로 위의 행의 데이터를 가져오도록 하고, 불필요한 행이 있어 첫 번째 행을 삭제하였습니다. 이런 식으로 데이터를 정리된 뒤에 두 테이터를 나누어 버핏지수를 산출하였습니다.

 

 

 

마무리...

 

오늘은 지난 포스팅에서 소개해드렸던 버핏 지수를 FRED의 데이터를 활용하여 산출해 보는 코드를 작성해 보았습니다.

 

며칠 전 텔레그램으로 미국증시 관련하여 여러 경제 지표를 채팅방으로 보내주는 알림 봇을 만들어봤었는데요. 이 알림 봇에 오늘 작성한 버핏 지수를 추가하여 알림을 받아볼 생각입니다.

 

▼ 텔레그램 알림 봇을 만드는 방법은 아래 링크를 통해 확인해 보실 수 있습니다.

[Python] 미국증시 시황 알림 봇 만들기

 

[Python] 미국증시 시황 알림 봇 만들기

미국증시 시황 알림 봇 만들기 안녕하세요. 오늘은 지난 포스팅에서 작성했던 코드들을 활용하여 미국증시 시황 알림 봇을 만들어보려고 합니다. 먼저, 미국증시 시황 알림 봇에 대해 간략히 말

quantmania.tistory.com

 

다음 포스팅에서도 유용한 정보를 소개하는 시간으로 찾아뵙도록 하겠습니다.

감사합니다!

 

728x90