안녕하십니까? 째까입니다.
시계열 자료 분석할 때, 특히 기후 관련 분석할 때 많이 듣는 말 있으시죠?
"추세 제거 한걸로 비교해야 할껀데요."
"시간이 반영된거니 제거해야할 꺼에요."
등등..
째까는 기상, 환경 분야에서만 활동했고 기후 연구는 처음이라 대체 뭔소린지 ;
무튼 detrend는 선형 회귀에 노이즈를 제거한다 뭐 이런건데요.
저는 시간 vs 기온 자료로 분석할 것이니
예상 분석 과정은 poly1d로 추세선을 구한다 -> 추세선에 값의 갯수만큼 넣어 추세 값을 구한다 -> 기온 값 - 추세 값을 한다.
라고 생각했습니다?
아니 근데 이게 잘 안되는거에요 ;
화나서 얘를 어쩌지 이러고있다가 문득 구글에 쳐봤는데 scipy에 detrend라는 함수가 있다고하네요? ㅎ... 존빡+환희
자 해봅시다.
사용한 자료는 NOAA global anomaly 웅앵입니다. 링크 걸어둡니다요.
전구 자료이니 lon, lat 차원을 없애야겠죠?
평균하여 없애고 시간과 변수(air)만 남겨뒀습니다!
lon, lat 평균하는 것은 아래 블로그 참고해주세요!
2023.08.20 - [파이썬] 전구 자료 위경도 평균해보자! 추세선까지 그려보자!
detrend는 위 글에서 조금만 더 추가하면됩니다!
필요한 라이브러리는 이전 글과 동일합니다!
def check_poly_plot(temp_nc, sst_nc):
global lwhpa, hihpa, wnt, smr, daou_path
wnt_temp_ds = weights_var(temp_nc, syy, eyy, wnt, lwhpa, hihpa)
wnt_time = wnt_temp_ds["year"]
wnt_temp = wnt_temp_ds["air"]
wnt_temp2 = signal.detrend(wnt_temp) # a
wnt_x2, wnt_orig_temp, wnt_orig_reg = cal_time_poly(wnt_temp_ds)
wnt_x2, wnt_diff_temp, wnt_diff_reg = cal_time_poly(wnt_temp_ds, "True")
fig1, ax1 = plt.subplots(figsize = (14, 8))
ax1.plot(wnt_time, wnt_orig_temp, color = "r", label = "Origin")
ax1.plot(wnt_time, wnt_orig_reg(wnt_x2), color = "r", linestyle = "--")
ax1.plot(wnt_time, wnt_diff_temp, color = "b", label = "Detrended")
ax1.plot(wnt_time, wnt_diff_reg(wnt_x2), color = "b", linestyle = "--")
ax1.set_xlabel("Year")
ax1.set_ylabel("1000 hPa - 50 hPa temperature")
ax1.set_ylabel("Temperature")
ax1.set_title("Detrended example(DJF)")
ax1.legend()
plt.tight_layout()
plt.show()
여기서 이번 글의 핵심은 wnt_temp2인데요
scipy안에 detrend를 이용해서 air를 넣으면
알아서 시간 변화를 제거합니다... 괜히 빼고 난리쳤죠 전 ㅎ...
빼고 난리치는건 밑에 함수 보시면됩니다!
def cal_time_poly(nc, diff = "False") :
x = nc["year"]
x2 = np.arange(1, len(x)+1)
x3 = np.arange(len(x))
y = nc["air"]
z = np.polyfit(x2, y,1).round(2)
pred = np.poly1d(z)
if diff == "False" :
return x2, y, pred
diff_value = []
if diff != "False" :
for i in x3 :
polied = pred(i)
diff = y[i] - polied
diff_value.append(diff)
z = np.polyfit(x2, diff_value, 1).round(2)
pred = np.poly1d(z)
return x2, diff_value, pred
무튼 빼고 난리친걸 그림 그리면!
이렇게 변화하는 걸 볼 수 있습니다!
detrend한 것도 이런식으로 하실 수 있어요 ㅎㅎ...
코딩에 참고되길 바랍니당
그럼 이만!
'IT_프로그래밍' 카테고리의 다른 글
[파이썬] 전구 자료 위경도 평균해보자! 추세선까지 그려보자! (0) | 2023.08.20 |
---|---|
[굿노트/노타빌리티] todo 진짜 깔끔한거 찾으세요? 이거 어떠세요 (0) | 2023.06.06 |
[파이썬] 기상 자료 분석 진짜 쉽게 하자 matplotlib - 1 (1) | 2022.08.29 |
[굿노트/노타빌리티] 정말 심플한 위클리 플래너 속지는 없어? (0) | 2022.08.23 |
[python] 파이썬 독학_"모두의 알고리즘 with 파이썬"_2, 문제 1 연습문제 (0) | 2022.01.16 |
댓글