Data Analysis/Environment
[Environmental Data Analysis] 2000년 ~ 2020년 국내 시도별 기온 변화 트렌드 분석 with Python
동장군님
2021. 6. 10. 16:46
이번 포스팅에서 다룰 주제는 바로 기온이다. 2000년부터 20년간 대한민국 시도별 평균 기온이 어떻게 변해왔는지 한번 알아보도록 하겠다. 데이터는 아래 국가통계포털 링크에서 확인할 수 있다.
KOSIS
kosis.kr
1. 2000년 ~ 2020년 시도별 기온 변화 트렌드
우선 간단하게 Plotly를 사용해서 시도별 기온 트렌드를 시각화해보도록 하겠다.
그래프 상으로는 뚜렷하게 나타나고 있지는 않지만 확실히 거의 모든 지역에서 평균 기온이 증가한 부분을 확인할 수 있다.
import pandas as pd
import plotly.express as px
df=pd.read_csv('D:/Download/기온.csv',encoding='euc-kr')
df.columns=['Region','Year','Avg.Temp']
si_do={'강원도':'Gangwon-do','경기도':'Gyeonggi-do', '경상남도':'Gyeongsangnam-do','경상북도':'Gyeongsangbuk-do',
'광주광역시':'Gwangju','대구광역시':'Daegu','대전광역시':'Daejeon','부산광역시':'Busan',
'서울특별시':'Seoul','세종특별자치시':'Sejongsi','울산광역시':'Ulsan','인천광역시':'Incheon',
'전라남도':'Jeollanam-do','전라북도':'Jeollabuk-do','제주특별자치도':'Jeju-do','충청남도':'Chungcheongnam-do',
'충청북도':'Chungcheongbuk-do','전국(평균)':'Average'}
df['eng_region']=df['Region'].apply(lambda x: si_do[x])
fig = px.line(df, x="Year", y="Avg.Temp", color='eng_region')
fig.show()
2. 시도별 기온 증가폭
위 그래프로는 명확하게 얼마나 많이 상승한 지 확인할 수 없어서, 2000년 대비 2020년 기온이 얼마나 올랐는지 그래프로 다시 만들어봤다.
대한민국 전체 평균 2000년 대비 2020년에 기온이 약 5.6% 증가한 것으로 나타났다. 기온이 가장 많이 증가한 지역으로는 대전, 충청남도, 강원도, 전라북도, 충청북도로 확인할 수 있으며 대구, 울산, 부산의 경우 상승폭이 평균 대비 절반 수준에 미치지 못할 정도로 낮다.
import plotly.graph_objects as go
df_2000=df[df['Year']==2000]
df_2020=df[df['Year']==2020]
df_2000.set_index('Region',inplace=True)
df_2020.set_index('Region',inplace=True)
tb=pd.concat([df_2000,df_2020],axis=1)
tb.columns=['Year','2000_temp','eng_region','Year2','2020_temp','eng_region2']
tb=tb.drop(['Year2','eng_region2'],axis=1)
tb['temp_increase']=((tb['2020_temp']/tb['2000_temp'])-1)*100
tb=tb.sort_values(by='temp_increase',ascending=False)
colors = ['lightslategray',] * len(tb)
colors[tb['eng_region'].values.tolist().index('Average')] = 'crimson'
fig = go.Figure(data=[go.Bar(
x=tb['eng_region'],
y=tb['temp_increase'],
marker_color=colors,
text=tb['temp_increase']
)])
fig.update_traces(texttemplate='%{text:.2f}%',textposition='outside',)
fig.update_layout(title_text='Temperature Increase %')
fig.show()
fig.to_json()
기온이 1℃만 올라도 사망 위험률이 5% 정도 증가한다고 한다. 태풍/홍수와 같은 자연 재해 뿐만 아니라 기온 상승에 따른 식중독, 폭염, 전염병 등 질환이 늘어나기 때문이다. 우리 생명과도 직결되는 부분이기 때문에 기온은 환경문제에 있어 가장 중요한 부분이 아닐 수 없다.
마지막으로 대한민국 시도, 연도별 평균 기온을 아래와 같이 애니메이션으로 만들어봤다. 해당 부분은 파이썬 스터디용으로 만들어 본 것이니 참고만 하길 바란다.
import folium
from folium import plugins
from selenium import webdriver
import time
import imageio
from PIL import Image
import os
from pathlib import Path
for i in range(2000, 2021):
geo_json='https://raw.githubusercontent.com/southkorea/southkorea-maps/master/kostat/2013/json/skorea_provinces_geo_simple.json'
df_=df[df['Year']==i]
m=folium.Map(
location=[36.97884521132491, 127.86224884213675],
tiles='Stamen Terrain',
zoom_start=6.1
)
folium.Choropleth(
geo_data=geo_json,
name='choropleth',
data=df_,
columns=['eng_region','Avg.Temp'],
key_on='feature.properties.name_eng',
fill_color='YlOrRd',
fill_opacity=0.7,
line_opacity=0.2
).add_to(m)
title_html = '''
<h3 align="left" style="font-size:22px"><b>{}</b></h3>
'''.format('Year: ' + str(i))
m.get_root().html.add_child(folium.Element(title_html))
m.save('C:/Users/IGAWorks_Wade/avg_temp_' + str(i) + '.html')
for i in range(2000,2021):
fn='avg_temp_' + str(i) + '.html'
browser = webdriver.Chrome()
browser.get(f'C:/Users/IGAWorks_Wade/{fn}')
#Give the map tiles some time to load
time.sleep(5)
browser.save_screenshot('avg_temp_' + str(i) + '.png')
browser.quit()
for i in range(2000,2021):
image = Image.open('avg_temp_' + str(i) + '.png')
box = (0, 0, 800, 800)
cropped_image = image.crop(box)
cropped_image.save('kore_avg_temp_' + str(i) + '.png')
image_path = Path()
images = list(image_path.glob('*.png'))
image_list = []
for file_name in images:
print(file_name)
image_list.append(imageio.imread(file_name))
os.remove(file_name)
imageio.mimwrite('GifMap.gif', image_list, fps=2)