삶의 공유

파이썬을 이용하여 웹에서 금융 데이터 다운 및 시각화 본문

Data Scientist/Python

파이썬을 이용하여 웹에서 금융 데이터 다운 및 시각화

dkrehd 2022. 12. 20. 22:34
728x90
반응형

안녕하세요 ~ 

 

오늘은 파이썬을 이용하여 웹에서 금융 데이터를 다운 받고 데이터를 시각화 하여 어떻게 데이터가 형성 되어 있는지 확인 하는 코드를 작성하는 포스팅을 해보려고 합니다.

 


웹에서 금융 데이터 불러오기


 

먼저 야후 파이낸스 라이브러리를 이용하여 금융 데이터를 다운 받을 건데요 !

 

 

pip install yfinance

 

다음과 같은 코드를 이용하여 야후 파이낸스 라이브러리를 다운받아 주겠습니다.

 

이제 본격적으로 시작해보겠습니다.

 

판다스와, 야후 파이낸스 모듈을 불러오겠습니다.

 

import pandas as pd
import yfinance as yf

start = 데이터 시작 시점

end = 데이터 종료 시점

symber = ticker 정보

start = "2014-10-01"
end = "2021-05-31"
symbol = 'BA'

티커 정보는 아래와 같이 야후 파이낸스 홈페이지에서 확인 하실수 있습니다.

 

자 이제 위 변수들을 이용해서 보잉 주가 데이터를 다운받아보겠습니다.

 

df = yf.download(symbol, start, end)
df

 

 

 

이렇게 잘 나오는 것을 확인 하실수 있습니다. 이 데이터 테이블에 대한 메타정보를 좀 더 자세히 보고 싶으시다면 info함수를 이용해서 볼 수 있습니다.

df.info()

 

 

 

자 이제 여러개의 Symbol을 넣고 데이터를 다운받아보겠습니다.

 

symbols = ['BA', 'MSFT', '^DJI', 'EURUSD=X', 'GC=F', 'BTC-USD']
df = yf.download(symbols, start, end)
df

 

요렇게 데이터가 나오는 것을 확인 할 수 있습니다. 데이터에서 NaN값이 있는 이유는 비트코인 데이터 때문인데요

 

비트코인은 주말에도 장이 진행이 되기 때문에 데이터가 계속 있는 반면에 주식 데이터는 개장을 안하기 때문에 데이터가 없어 이런 NaN데이터가 발생하는 것 입니다.

 

 

또 불편한 부분이 있지 않나요? 컬럼에서 각 티커별로 시가, 종가 정보를 나열하는 데이터 테이블 형태로 바꾸고 싶어지지 않으신가요? ㅎㅎ

 

그럼 해당 형태로 변경을 하는 코드를 작성해보겠습니다.

 

df = df.swaplevel(axis='columns').sort_index(axis='columns')
df

이렇게 swaplevel 함수를 이용하여 티커정보 별로 시가,종가, 거래량 등의 데이터들이 나열될 수 있도록 변경을 해보았습니다.

 

 


데이터 시각화


 

 

이제 시각화를 해보겠습니다. 시각화를 위한 초기 설정을 아래와 같이 해줍니다 !

 

import matplotlib.pyplot as plt
pd.options.display.float_format = '{:.4f}'.format
plt.style.use('seaborn')

 

저희는 종가 데이터만 필요하기 때문에 종가 데이터만 가져 오겠습니다.

 

위에서 했던 Swaplevel함수를 이용해서 다시 원복 시켜주고, Close만 가져오는 코드를 작성해보겠습니다.

 

df = df.swaplevel(axis='columns').sort_index(axis='columns')
close = df.Close.copy()
close

 

이렇게 종가 데이터만 잘 가져온 것을 볼수 있습니다.

 

decribe함수를 이용하여 요약통계 데이터에 대해서 한번 살펴보겠습니다. 이렇게 통계데이터를 살펴보면서 각 항목 별로 데이터 형태가 어떻게 형성되어 있을지 가늠을 할 수 있습니다.

close.describe()

이제 보잉사의 종가 데이터를 시각화 해보겠습니다. dropna함수를 통해 결측 값들을 제거하여 시각화의 노이즈를 제거해주고 시각화를 해줍니다.

 

close.BA.dropna().plot(figsize=(15,8), fontsize=13)
plt.legend(fontsize=13)
plt.show()

보잉사의 종가 데이터를 시각화 하여 확인 할 수 있었습니다.

 

 

 

반응형