경기도미래기술학교 AI개발자 부트캠프 56일차 TIL- 캐글 코드 클론코딩 하기 - 2. Store Sales TS Forecasting - A Comprehensive Guide

2023. 7. 26. 09:24카테고리 없음

반응형

 

계속한다.

https://www.kaggle.com/code/ekrembayar/store-sales-ts-forecasting-a-comprehensive-guide

 

Store Sales TS Forecasting - A Comprehensive Guide

Explore and run machine learning code with Kaggle Notebooks | Using data from Store Sales - Time Series Forecasting

www.kaggle.com

이분 것 참고.

이거를 짜고 있는데 Oil 데이터에 NaN 값이 많기 때문이다. 이것을 interpolated로 처리했다.

근데 이분은 아래와 같은 방법으로 먼저 resample을 했다.

oil_df.set_index("date").dcoilwtico.resample("D").sum().reset_index()

resample을 처음봐서 공부를 해봤다. set_index("date")를 한다음

dcoilwtico 이거는 oil_df의 가격을 담당하는 컬럼이다. 이게 빈값이 많아서 이것을 기준으로 resample("D") (Day 기준으로 한다는 뜻.)

.sum()을 한다음 reset_index()를 했다. 근데 왜 sum()을 사용해야 하는지 이해가 잘안됐다.

 

찾아보니 이럴 경우 굳이 .sum()을 쓸 필요 없다고 한다. 대신 안쓰면 오류가 난다.

oil_df.set_index("date").dcoilwtico.resample("D").asfreq().reset_index()

asfreq()를 써도 결과는 같다. 그런데 나는 이게 더 합리적인 것 같아서 이걸로 채택했다. 어차피 안에 들어가는 파라미터는 없어서 값은 같다. sum()은 날짜의 합계를 기준으로 나눠주고 asfreq()는 데이터프레임을 원하는 주기로 나눠주는 것이다. 

 

아무튼 이 작업을 한다음 reset_index()를 한다.

oil.dcoilwtico.interpolate()

그다음 interpolate(). 이것을 쓰면 결측에 대한 값을 선형 예측을 해서 채워주는 역할을 한다. '보간'한다 라는 말을 쓴다.

보간의 뜻은 위와 같다. 임의에 대한 함수값을 추정하는 것!

 

oil = oil_df.set_index("date").dcoilwtico.resample("D").asfreq().reset_index()
# Interpolate
oil["dcoilwtico"] = np.where(oil["dcoilwtico"] == 0, np.nan, oil["dcoilwtico"])
oil["dcoilwtico_interpolated"] =oil.dcoilwtico.interpolate()
# Plot
p = oil.melt(id_vars=['date']+list(oil.keys()[5:]), var_name='Legend')
px.line(p.sort_values(["Legend", "date"], ascending = [False, True]), x='date', y='value', color='Legend',title = "Daily Oil Price" )

내 기준에서 뇌가 녹아버릴 것 같은 코드가

 

melt라는 것도 처음 들어봤고.. solrt_values를 통해서 값을 각각 다르게 채우는 방법도 처음 봤다.

아무튼 천천히 뜯어보면 이렇다.

 

melt를 하게 되면 이렇게 된다. 뭔가 관련이 있는 것 같은 유형을 하나로 녹여서 쓸 수 있는 값이라고 보면 된다.

 

근데 왜 굳~이 melt를 이용해서 해야 하지? 그냥 그래프 그리면 안되나? 해서 그려보니 이렇게 된다.

Legend에는 파랑 빨강이 나오는데 왜 색칠은 안될까??

 

 

 

 

 

히트맵을 그려보니까 기름값과 sales는 예상 외로 큰 연관관계를 볼 수 없었다. -0.3이면 약한 연관관계? 라고 할 수 있다. 아주 비례하지 않는다고 할 수 있는 것.

 

확실히 연관관계가 없는 것을 볼 수 있다. 잔디냐..? ㅋㅋㅋㅋ 

728x90