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이면 약한 연관관계? 라고 할 수 있다. 아주 비례하지 않는다고 할 수 있는 것.
확실히 연관관계가 없는 것을 볼 수 있다. 잔디냐..? ㅋㅋㅋㅋ