파이썬

작업12: Python으로 부산 평균 최고기온 분석하기3

이석사 중 2022. 11. 5. 00:03
728x90

 

저번에 이어서 표준편차가 높게 나온 이유를 분석해보겠습니다

 


자료)

기간
1973년 ~ 2021년
지점
ASOS 부산 관측 지점
자료
월 별 평균 최고기온, 1, 2, 7, 8월 합계 강수량

 


7월)

prec = pd.DataFrame(pd.read_excel("/content/drive/MyDrive/기상통계학/pre.xlsx"))

pre7 = prec['july'].to_list()

fj1 = np.polyfit(pre7, jul['mmt'], 1)

fj5 = np.poly1d(fj1)

fig, ax15 = plt.subplots(figsize = (15, 9))

twin1 = ax15.twinx()

ax15.plot(hjk, jul, color = 'red', label = 'july mmt', lw = 3)
twin1.plot(hjk, pre7, color = 'blue', label = 'july pre', lw = 3)
ax15.set_xlabel('Date', fontsize = 15)
ax15.set_ylabel('Mean Max Temperature', fontsize = 15)
twin1.set_ylabel('Precipitation', fontsize = 15)
ax15.set_title('July MMT and Pre', fontsize = 20)

plt.xticks(hjk)
ax15.set_xticklabels(jul3, rotation = 45)

ax15.grid()
ax15.legend(prop = {'size' : 15})
twin1.legend(loc = 2, prop = {'size' : 15})

fig, ax16 = plt.subplots(figsize = (15, 9))

ax16.scatter(pre7, jul['mmt'], color = 'red')
ax16.plot(pre7, fj5(pre7), color = 'blue', lw = 2)

ax16.set_xlabel('Precipitation', fontsize = 15)
ax16.set_ylabel('Mean Max Temperature', fontsize = 15)
ax16.set_title('July temperature according to precipitation', fontsize = 20)

ax16.grid()
 

먼저 7월 그림입니다

 

자료는 모두 기상자료개방포털에서 가져왔습니다

 

이번 포스팅은 코드분석 보다는 그린 자료들을 위주로 분석해보겠습니다

 

먼저 저 코드로 그린 그림입니다

 

저희가 알아보려고 한건 강수량이 평균 최고기온에 영향을 주는지 입니다

 

강수가 있는 날이 없는 날보다 온도가 높기 때문에 이 둘은 음의 상관 관계라고 생각할 수도 있습니다

 

그러면 강수가 많은 날은 온도가 내려가고 적은 날은 올라가는게 보이는지 보겠습니다

강수량이 극단적으로 많거나 적은 부분에서는 보이지만 중간 부분에서는 전혀 보이지 않습니다

 

그렇다고 선형관계가 없지 않습니다

 

산점도로 그림을 그려서 선형식을 그려보면

 

음의 상관 관계가 있을거라고 추측한거에 맞게 선형식 그래프도 강수량이 증가함에 따라

 

감소하는 추세를 보여줍니다

 

상관 계수를 계산해보면

 

-0.5 정도의 상관 관계가 있다고 나옵니다

 

결과적으로 부산의 7월 평균 최고기온은 강수량에 영향을 받지만 다른 요소들도 관여를 한다 라고 생각할 수 있습니다


8월)

다음은 8월 입니다

 

7월하고 똑같이 해보겠습니다

 

pre8 = prec['august'].to_list()

fj2 = np.polyfit(pre8, agu['mmt'], 1)

fj6 = np.poly1d(fj2)

fig, ax18 = plt.subplots(figsize = (15, 9))

twin2 = ax18.twinx()

ax18.plot(hjk, agu, color = 'red', label = 'aug mmt', lw = 3)
twin2.plot(hjk, pre8, color = 'blue', label = 'aug pre', lw = 3)
ax18.set_xlabel('Date', fontsize = 15)
ax18.set_ylabel('Mean Max Temperature', fontsize = 15)
twin2.set_ylabel('Precipitation', fontsize = 15)
ax18.set_title('August MMT and Pre', fontsize = 20)

plt.xticks(hjk)
ax18.set_xticklabels(agu3, rotation = 45)

ax18.grid()
ax18.legend(prop = {'size' : 15})
twin2.legend(loc = 2, prop = {'size' : 15})

fig, ax19 = plt.subplots(figsize = (15, 9))

ax19.scatter(pre8, agu['mmt'], color = 'red')
ax19.plot(pre8, fj6(pre8), color = 'blue', lw = 2)

ax19.set_xlabel('Precipitation', fontsize = 15)
ax19.set_ylabel('Mean Max Temperature', fontsize = 15)
ax19.set_title('August temperature according to precipitation', fontsize = 20)

ax19.grid()
 

8월도 7월과 비슷하게 극단적인 값들에서만 추세가 보일 뿐입니다

 

역시 산점도랑 선형회귀분석을 해보겠습니다

8월은 더 강한 음의 상관 계수가 나타났습니다

 

8월은 7월보다 강수량에 의한 온도 증감이 조금 더 지배적이다 라고 생각할 수 있습니다


1월)

pre1 = prec['januaray'].to_list()

fj3 = np.polyfit(pre1, jan['mmt'], 1)

fj7 = np.poly1d(fj3)

fig, ax20 = plt.subplots(figsize = (15, 9))

twin3 = ax20.twinx()

ax20.plot(hjk, jan, color = 'red', label = 'jan mmt', lw = 3)
twin3.plot(hjk, pre1, color = 'blue', label = 'jan pre', lw = 3)
ax20.set_xlabel('Date', fontsize = 15)
ax20.set_ylabel('Mean Max Temperature', fontsize = 15)
twin3.set_ylabel('Precipitation', fontsize = 15)
ax20.set_title('Januaray MMT and Pre', fontsize = 20)

plt.xticks(hjk)
ax20.set_xticklabels(jan3, rotation = 45)

ax20.grid()
ax20.legend(prop = {'size' : 15})
twin3.legend(loc = 2, prop = {'size' : 15})

fig, ax21 = plt.subplots(figsize = (15, 9))

ax21.scatter(pre1, jan['mmt'], color = 'red')
ax21.plot(pre1, fj7(pre1), color = 'blue', lw = 2)

ax21.set_xlabel('Precipitation', fontsize = 15)
ax21.set_ylabel('Mean Max Temperature', fontsize = 15)
ax21.set_title('Januaray temperature according to precipitation', fontsize = 20)

ax21.grid()
 

1월은 얼핏 보면 비슷한가? 라는 생각이 들었던거 같습니다

 

1월은 오히려 양의 상관 관계를 보여주고 있습니다

 

상관 계수 또한 0.43정도로 꽤나 큰 값이 나왔습니다

 

겨울철에는 물이 얼거나 하면서 응고열이 방출되기 때문에 그런게 아닌가 싶기도 합니다


2월)

pre2 = prec['february'].to_list()

fj4 = np.polyfit(pre2, feb['mmt'], 1)

fj8 = np.poly1d(fj4)

fig, ax22 = plt.subplots(figsize = (15, 9))

twin4 = ax22.twinx()

ax22.plot(hjk, feb, color = 'red', label = 'feb mmt', lw = 3)
twin4.plot(hjk, pre2, color = 'blue', label = 'feb pre', lw = 3)
ax22.set_xlabel('Date', fontsize = 15)
ax22.set_ylabel('Mean Max Temperature', fontsize = 15)
twin4.set_ylabel('Precipitation', fontsize = 15)
ax22.set_title('Februray MMT and Pre', fontsize = 20)

plt.xticks(hjk)
ax22.set_xticklabels(feb3, rotation = 45)

ax22.grid()
ax22.legend(prop = {'size' : 15})
twin4.legend(loc = 2, prop = {'size' : 15})

fig, ax23 = plt.subplots(figsize = (15, 9))

ax23.scatter(pre2, feb['mmt'], color = 'red')
ax23.plot(pre2, fj8(pre2), color = 'blue', lw = 2)

ax23.set_xlabel('Precipitation', fontsize = 15)
ax23.set_ylabel('Mean Max Temperature', fontsize = 15)
ax23.set_title('Februray temperature according to precipitation', fontsize = 20)

ax23.grid()
 

2월은 오히려 선형관계를 보지 않아도 비슷한 형태를 띈드는게 보일 정도입니다

 

선형 회귀 분석 또한 1월보다 기울기가 더 가팔라진 모습입니다

 

상관 계수 또한 1월보다 더 큰 값이 나온 모습입니다

 


이렇게 1월, 2월, 7월, 8월 4개의 달에 대해서 분석을 해봤습니다

 

여기서 중요한 건 여름에 비가 오면 시원해진다는 이미 알고 있는 사실이기 때문에 선형 회귀 분석을 해도 괜찮지만

 

선형 회귀 분석 전에 정말 중요한 전제는

 

'상관 관계가 있다고 해서 인과관계가 있는 것은 아니다' 라는게 만족 되어야합니다

 

아무리 둘이 상관 계수가 1이 나와도 인과관계가 없을수도 있으며 0이 나와도 상관 관계가 있을수도 있다는 말이죠

 

저 문장을 기억하시면서 선형 회귀 분석을 하시면 얼마든지 분석이 가능합니다

 

다음 포스팅은 히스토그램과 boxplot을 그려보겠습니다

 

728x90