Data Analysis/Environment
전국 시도별 신재생 에너지(태양광, 풍력, 수력) 데이터 분석 with Python
동장군님
2021. 3. 14. 20:34
Data Source
국가통계포털에서 제공하는 시도별 신재생 에너지원별 생산량 데이터를 가져와서 데이터 분석을 해보도록 하겠다. 데이터 소스는 다음 링크에서 다운이 가능하다.
KOSIS
kosis.kr
import pandas as pd
df=pd.read_csv('C:/Users/banad/Downloads/에너지.csv',encoding='euc-kr')
df=df[['code','시도','Time','태양광','풍력','수력']]
df=df.melt(id_vars=['code','시도','Time'],var_name ="신재생 에너지",value_name='에너지')
df=df[df['시도']!='전국']
df['에너지']=df['에너지'].replace('-',0)
df['에너지']=df['에너지'].astype(int)
df=df[['시도','Time','신재생 에너지','에너지']]
시도/연도별 신재생 에너지 생산량 현황
- 태양광 에너지 생산량 현황
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter
%matplotlib inline
%config InlineBackend.figure_format='retina'
plt.rcParams["font.family"] = 'Malgun Gothic'
plt.figure(figsize=(18,9))
plt.rcParams["font.size"] = 12
ax=sns.heatmap(sun_df,cmap="Blues",annot=True,fmt=".0f",)
ax.set_title('태양광 에너지 생산량')
- 풍력 에너지 생산량 현황
wind_df=df[df['신재생 에너지']=='풍력']
wind_df=wind_df.pivot(index='시도',columns='Time',values='에너지')
%matplotlib inline
%config InlineBackend.figure_format='retina'
plt.rcParams["font.family"] = 'Malgun Gothic'
plt.figure(figsize=(18,9))
plt.rcParams["font.size"] = 12
ax=sns.heatmap(wind_df,cmap="Blues",annot=True,fmt=".0f")
ax.set_title('풍력 에너지 생산량',)
- 수력 에너지 생산량 현황
water_df=df[df['신재생 에너지']=='수력']
water_df=water_df.pivot(index='시도',columns='Time',values='에너지')
%matplotlib inline
%config InlineBackend.figure_format='retina'
plt.rcParams["font.family"] = 'Malgun Gothic'
plt.figure(figsize=(18,9))
plt.rcParams["font.size"] = 12
ax=sns.heatmap(water_df,cmap="Blues",annot=True,fmt=".0f")
ax.set_title('수력 에너지 생산량',)
- 신재생 에너지 총 생산량 현황
total=pd.DataFrame(df.groupby(['시도','Time']).sum()['에너지']).reset_index()
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'}
total['eng_region']=total['시도'].apply(lambda x: si_do[x] )
total.columns=['region','Year','Energy','eng']
import plotly.express as px
fig = px.line(total, x="Year", y="Energy", color="eng",
line_group="eng", hover_name="eng")
fig.update_layout(
xaxis = dict(
tickmode = 'array',
tickvals = [2015, 2016, 2017, 2018, 2019],
# ticktext = ['One', 'Three', 'Five', 'Seven', 'Nine', 'Eleven']
)
)
fig.show()
ff=fig.to_json()
for x,y in zip(list(si_do.keys()), list(si_do.values())):
ff = ff.replace(y, x)
2015~2019 시도별 신재생 에너지 총 생산량 지도 시각화
확실히 강원도, 전라도 지역에서 태양광, 풍력, 수력 에너지가 가장 많이 생산된 점을 확인할 수 있다.
from urllib.request import urlopen
import json
with urlopen('https://raw.githubusercontent.com/southkorea/southkorea-maps/master/kostat/2018/json/skorea-provinces-2018-geo.json') as response:
kor = json.load(response)
avg=pd.DataFrame(df.groupby(['시도']).sum()['에너지']).reset_index()
for idx, si in enumerate(kor['features']):
name=si['properties']['name']
nvm=avg.loc[(avg['시도']==name),'에너지'].iloc[0]
kor['features'][idx]['properties']['신재생 에너지 생산량']=int(nvm)
kor['features'][idx]['properties']['base_year']='2015~2019 합계'
import mapboxgl
from mapboxgl.viz import *
import os
from mapboxgl.utils import create_color_stops
from mapboxgl.utils import create_numeric_stops
api='~~'
center =[126.986, 37.565]
color_breaks = [1000000,2000000,3000000,4000000,5000000,6000000,7000000,8000000,9000000]
color_stops =create_color_stops(color_breaks,colors='YlGnBu')
viz =ChoroplethViz(
access_token=api,
data=kor,
color_property='신재생 에너지 생산량',
color_stops=color_stops,
center=center,
zoom=5.7,
bearing=-11,
pitch=43,
height_property='신재생 에너지 생산량',
height_stops=create_numeric_stops(color_breaks,0,10),
height_function_type='interpolate'
)
viz.show()
viz.create_html('신재생 에너지 생산량.html')