TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 데이터 분석>

[파이썬] 시계열 데이터 다루기 - 3

by 기록자_Recordian 2024. 5. 6.
728x90
반응형
시작에 앞서
해당 내용은 <파이썬으로 데이터 주무르기> -민형기 저, BJPUBLIC 출판사 의 내용을 토대로 작성되었습니다.
보다 자세한 내용은 해당 교재를 확인하여 주시기 바랍니다.

지난 분석 보기

[파이썬] 시계열 데이터 다루기 - 2

시작에 앞서해당 내용은 -민형기 저, BJPUBLIC 출판사 의 내용을 토대로 작성되었습니다.보다 자세한 내용은 해당 교재를 확인하여 주시기 바랍니다.지난 분석 보기 [파이썬] 시계열 데이터 다루

puppy-foot-it.tistory.com


Seasonal 시계열 분석으로 주식 데이터 분석하기 (feat.Yahoo Finance)

 
DataReader 함수를 사용하여 구글이 제공하는 주가 정보를 받아오려고 하였으나,
현재(2024년 5월)는 구글에서 데이터를 제공하고 있지 않기 때문에, 데이터를 가져오려면 다른 데이터 소스를 사용해야 한다.
다른 데이터 소스로는 Yahoo Finance와 같은 데이터 제공업체를 사용할 수 있다.
 
※ 단, 야후에서 기아자동차의 종목 코드는 'KRX:000270' 이 아닌, '000270.KS' 이다.

import pandas_datareader as pdr #Pandasd의 datareader 모듈 import

start = datetime(2003, 1, 1)
end = datetime(2017, 6, 30)

KIA = pdr.DataReader('000270.KS', 'yahoo', start, end) #yahoo 주가 정보 이용하기
KIA.head()

 
그러나,  하단의 에러가 뜬다.

AttributeError: 'NoneType' object has no attribute 'group'

 
해당 에러는 데이터를 읽어올 때 발생하며, 이는 데이터 소스에서 응답이 없거나 유효하지 않은 데이터 형식이어서 발생된다고 한다. 따라서, 다른 방식으로 yahoofinance 에서 주가 정보를 불러오는 법을 찾아야 할 거 같다.
 
먼저 yahoofinance 데이터를 가져오기 위한 파이썬 라이브러리인 yfinance 라이브러리를 설치

pip install yfinance

 
그리고나서 yfinance 모듈을 불러온다.

import yfinance as yf

 

yfinance 라이브러리 설치

 
※ KIA ticker 찾기
 
앞서 KIA의 번호는 설명하였지만, 그래도 다른 종목 코드를 검색하는 법을 아주 간단히 설명하면,
Yahoo Finance를 접속하여 찾고자 하는 종목을 검색하면 된다. KIA는 '000270.KS'

Yahoo Finance - Stock Market Live, Quotes, Business & Finance News

At Yahoo Finance, you get free stock quotes, up-to-date news, portfolio management resources, international market data, social interaction and mortgage rates that help you manage your financial life.

finance.yahoo.com

야후 파이낸스 기아

 
yfinance 모듈을 불러온 뒤, 원하는 기간의 주가 정보를 불러오기 위한 코드 실행

start = datetime(2003, 1, 1)
end = datetime(2017, 6, 30)

KIA = yf.download('000270.KS', start=start, end=end)
KIA.head()

 

야후 파이낸스 기아 주가 정보

 
여기까지 하면 야후 파이낸스로 기아자동차 주가 정보 불러오기 완성!


그래프 그려보기

 
2003년 1월 1일부터 2017년 6월 30일까지의 기아자동차( 000270.KS ) 주가 정보를 받아
'종가(Close)' 정보를 기준으로 그래프를 그려 본다.

KIA['Close'].plot(figsize=(12,6), grid=True);

 

종가 기준 주가 그래프
 일부 데이터를 잘라 먼저 forecast 수행( 추후에 참 값과의 비교 위함)

 
먼저 2016년 12월 31일 까지만 데이터를 잘라 새로운 DataFrame 생성

# '2016-12-31'까지의 데이터를 유지하고 나머지 데이터를 삭제
KIA_trunc = KIA[:'2016-12-31']
KIA_trunc #'2016-12-31'까지의 데이터가 포함된 새로운 DataFrame인 KIA_trunc 생성
TRUNC

그리고 별도의 데이터 프레임을 만든다

# 새로운 DataFrame 생성
df = pd.DataFrame({'ds': KIA_trunc.index, 'y': KIA_trunc['Close']})

# 인덱스 재설정
df.reset_index(inplace=True)

# 'Data' 열 삭제
del df['Date']

df.head()
새로운 DataFrame 만들기

1년 후 (2017년 12월 31일까지)의 정보 예측

m = Prophet() #Prophet()은 Prophet 모델을 초기화하는 것을 의미. 
m.fit(df); #초기화 후 fit() 메서드를 사용하여 주어진 데이터를 모델에 학습시킴
Prophet
future = m.make_future_dataframe(periods=365) #365일 이후의 날짜를 생성하도록 설정
future.tail()
make future
forecast

 

plot_components로 요소별로 확인

 
plot_components 를 통해 trend, weekly, yearly 를 확인

plot_components

다른 날짜의 기아 주가 불러오기

 
2014년 1월 1일부터 2017년 7월 31일까지의 기아 주가 데이터를 불러와 시각화 한다.

start = datetime(2014, 1, 1)
end = datetime(2017, 7, 31)

KIA = yf.download('000270.KS', start=start, end=end)
KIA['Close'].plot(figsize=(12,6), grid=True);

 

기아 주가

 
예측용으로 사용할 데이터 만들기 (2017년 5월 31일까지)

KIA_trunc = KIA[:'2017-05-31']
KIA_trunc['Close'].plot(figsize=(12,6), grid=True);
다른 날짜로 데이터 만들기

데이터를 조금 손 보고

df = pd.DataFrame({'ds': KIA_trunc.index, 'y': KIA_trunc['Close']})

# 인덱스 재설정
df.reset_index(inplace=True)

# 'Data' 열 삭제
del df['Date']
m = Prophet()
m.fit(df);

 
61일 간의 데이터 예측

future = m.make_future_dataframe(periods=61)
future.tail()

결과확인

forecast = m.predict(future)
m.plot(forecast)

 

forecast

 
이후의 2개월 데이터의 참 값을 통해 예측과 실제값 비교

plt.figure(figsize=(12,6))
plt.plot(KIA.index, KIA['Close'], label='real')
plt.plot(forecast['ds'], forecast['yhat'], label='forecast')
plt.grid()
plt.legend()
plt.show()
real vs forecast

 
다음 챕터에서는 예제를 통해 Growth Model과 Holiday Forecast 분석


다음글

[파이썬] 시계열 데이터 다루기 - Growth Model / Holiday Forecast

728x90
반응형