저번 포스팅과 이어집니다
![](https://blog.kakaocdn.net/dn/bu1eHa/btrQq3y6yQa/LJIA9kJt8IBWVPzwAmPwlK/img.jpg)
저번 포스팅에서 편차를 구해보고 선형회귀분석을 이용해서 추세선까지 그려봤습니다
오늘은 먼저 저번 포스팅에서 예측했던 '편차가 상승하는 추세이니 실제 기온도 상승하는 추세일거다' 를 확인해보고
각 월 별 평균을 구하고 표준편차를 막대그래프로 그려보겠습니다
자료)
기간
|
1973년 ~ 2021년
|
지점
|
ASOS 부산 관측 지점
|
자료
|
월 별 평균 최고기온
|
개념)
먼저 저번 포스팅에서 설명 드렸었지만 표준편차에 대해 한 번 더 설명해보겠습니다
![](https://blog.kakaocdn.net/dn/lH7v5/btrQrHbe4Jr/LnzTvjFlj8nUrvRO4YZ6zk/img.png)
공식으로는 이렇게 표현합니다
Xi는 관측값, X bar는 평, n은 전체 자료 갯수를 의미합니다
데이터 분석 분야에서는 RMSE(Root Mean Square Error)라고도 부릅니다
이 값이 작을수록 자료들의 특성이 선형 예측에 잘 반영된다는 말입니다
루트를 씌우지 않은 값을 분산, MSE라고 부르는데
분산은 편차의 제곱을 합해서 평균한 것이기 때문에 이상치가 존재할 때 예민하게 반응하지만
루트를 씌운 표준편차는 분산보다는 덜 예민합니다
그래서 표준편차를 대푯값으로 자주 사용하곤 합니다
그래서 표준 편차를 구해서 분석을 해보겠습니다
추가)
![](https://blog.kakaocdn.net/dn/dsV2HT/btrQpUwnZzH/Hw6KIuUkTqGSwRyRNW85C0/img.png)
먼저 저번 포스팅에 예측했었던 1월의 온도와 추세선 입니다
이번에는 조금 다르게 그려보고 싶어서 x축과 y축을 바꿨습니다
1월 달의 온도를 보면은 예상한 것과 똑같이 상승 추세를 보여주고 있습니다
fig, ax8 = plt.subplots(figsize = (25, 20))
ax8.scatter(jan['mmt'], jan.index, s = 70, color = 'm', zorder = 2)
ax8.plot(k1(hjk), hjk, lw = 2, color = 'red')
ax8.set_xlabel('MMT', fontsize = 15)
ax8.set_ylabel('Date',fontsize = 15)
ax8.set_title('January', fontsize = 20)
plt.gca().invert_yaxis()
ax8.grid()
코드)
mm = [jan1, feb1, mar1, apr1, may1, jun1, jul1, agu1, sep1, oct1, nov1, dec1]
jan5 = np.var(jan)
jan6 = math.sqrt(jan5)
sq = [jan6, feb6, mar6, apr6, may6, jun6, jul6, agu6, sep6, oct6, nov6, dec6]
xa = np.arange(1, 13, 1)
month = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',
'September', 'October', 'November', 'December']
fig, ax1 = plt.subplots(figsize = (15, 9))
ax1.bar(xa, mm, zorder = 2, color = 'dodgerblue', alpha = 0.5)
ax1.set_xlabel('Month(January ~ December)', fontsize = 20)
ax1.set_ylabel(r'Mean($\bar{x} = \frac{\sum_{i=1}^{n}{x_i}}{n}$)', fontsize = 20)
ax1.set_title('1973 ~ 2021 Monthly Arithmetic Mean', fontsize = 20)
plt.xticks(xa, labels = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',
'September', 'October', 'November', 'December'])
ax1.grid(zorder = 1)
fig, ax1 = plt.subplots(figsize = (15, 9))
ax1.bar(xa, sq, zorder = 5, color = 'dodgerblue')
ax1.set_xlabel('Month(January ~ December)', fontsize = 20)
ax1.set_ylabel(r'Standard Deviation($\bar{x} = \sqrt{\frac{\sum_{i=1}^{n}{(x_i - \bar{x}})^2}{n}}$)', fontsize = 20)
ax1.set_title('1973 ~ 2021 Standard Deviation', fontsize = 20)
plt.xticks(xa, labels = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',
'September', 'October', 'November', 'December'])
ax1.grid(zorder = 1)
그림 그리는 부분이 2개라 좀 길어보이지만 다 할 수 있습니다
1) 분산과 표준편차 구하기
jan5 = np.var(jan)
jan6 = math.sqrt(jan5)
sq = [jan6, feb6, mar6, apr6, may6, jun6, jul6, agu6, sep6, oct6, nov6, dec6]
xa = np.arange(1, 13, 1)
month = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',
'September', 'October', 'November', 'December']
그리려면 값을 구해야겠져??
variance가 분산이라는 뜻이기 때문에 np.var라는 라이브러리를 사용해서 분산을 먼저 구해줍니다
그 후 square root, sqrt를 해서 표준편차를 구해준 후 리스트 형태로 모아줬습니다
월 별로 x축도 만들어 줬습니다
전 포스팅하고 똑같은 방식으로 숫자를 만들어서 넣고 라벨로 입히는 방식으로 했습니다
2)평균 그림 그리기
fig, ax1 = plt.subplots(figsize = (15, 9))
ax1.bar(xa, mm, zorder = 2, color = 'dodgerblue', alpha = 0.5)
ax1.set_xlabel('Month(January ~ December)', fontsize = 20)
ax1.set_ylabel(r'Mean($\bar{x} = \frac{\sum_{i=1}^{n}{x_i}}{n}$)', fontsize = 20)
ax1.set_title('1973 ~ 2021 Monthly Arithmetic Mean', fontsize = 20)
plt.xticks(xa, labels = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',
'September', 'October', 'November', 'December'])
ax1.grid(zorder = 1)
먼저 49년간의 월 별 평균부터 그리겠습니다
fig, ax1로 도화지와 그림을 만들었습니다
온도 자료들은 대체로 bar 그래프로 보는 것이 값들을 보는데는 좋기 때문에 bar그래프로 했습니다
중간에 zorder는 그림들에 layer를 의미합니다
저는 grid를 거의 대부분 추가하는 편이기 때문에 그림이 grid보다 위에 있게 하려면
zorder를 통해서 조정해주어야합니다
기본값은 0으로 지정되어있고 0은 항상 맨 앞을 의미합니다
grid는 zorder number를 1로, bar 그래프는 2로 설정해서 앞으로 가지고 왔습니다
나머지는 제목하고 x축 y축 이름을 달아주고 xtick을 12칸으로 설정해서
1월부터 12월까지 영어로 입력시켜 주었습니다
이렇게 하면
![](https://blog.kakaocdn.net/dn/FHXdg/btrQr1URyCG/mepBRRtaHsXCZfNsKaxQVk/img.png)
이런 그림이 나오게 됩니다
평범하기 12월 1월 2월까지 춥고 6월, 7월, 8월에 더운게 그래프로 한 눈에 보입니다
추가로 더 알 수 있는 점은 보통 겨울을 NDJ라고 해서 11월, 12월, 1월을 말하지만
11월보다 2월, 3월이 더 춥다는 걸 알 수 있습니다
2)평균 그림 그리기
fig, ax1 = plt.subplots(figsize = (15, 9))
ax1.bar(xa, sq, zorder = 5, color = 'dodgerblue')
ax1.set_xlabel('Month(January ~ December)', fontsize = 20)
ax1.set_ylabel(r'Standard Deviation($\bar{x} = \sqrt{\frac{\sum_{i=1}^{n}{(x_i - \bar{x}})^2}{n}}$)', fontsize = 20)
ax1.set_title('1973 ~ 2021 Standard Deviation', fontsize = 20)
plt.xticks(xa, labels = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',
'September', 'October', 'November', 'December'])
ax1.grid(zorder = 1)
다음은 표준편차입니다
평균 그림 그릴 때랑 다를게 전혀 없습니다
다른 점이라고 하면 y축 label에 식만 바꿔주면 됩니다
이렇게 표준편차 그림을 그리면
![](https://blog.kakaocdn.net/dn/byREkl/btrQqLMiRFi/owXlWTKk0YEfF0K9MikoT0/img.png)
이런 그림이 나옵니다
이 그림을 보면 알 수 있는 점들은 여름과 겨울에 온도의 편차가 크게 나타난다고 할 수 있습니다
제 생각으로는 여름에는 장마가 있고, 겨울에는 눈이 오기 때문에 이 요인들이 작용해서 표준 편차가 크게 나타난다고 생각합니다
다음 포스팅에서 표준편차가 높게 나타나는 1월, 2월, 7월, 8월 12월의 표준편차와
7월, 8월은 강수량, 1월, 2월, 12월은 적설량까지 추가해서 비교해보겠습니다
'파이썬' 카테고리의 다른 글
작업13: Python으로 부산 평균 최고기온 분석하기 4 (0) | 2022.12.04 |
---|---|
작업12: Python으로 부산 평균 최고기온 분석하기3 (0) | 2022.11.05 |
작업10 : Python으로 부산 평균 최고기온 분석하기1 (0) | 2022.11.04 |
작업9 : Python으로 파장별 복사에너지 그래프 그리기 (0) | 2022.10.26 |
작업8 : Fortran으로 만든 자료 시각화 (0) | 2022.10.26 |