Data Analysis/Environment

전국 시도별 신재생 에너지(태양광, 풍력, 수력) 데이터 분석 with Python

동장군님 2021. 3. 14. 20:34

Data Source

국가통계포털에서 제공하는 시도별 신재생 에너지원별 생산량 데이터를 가져와서 데이터 분석을 해보도록 하겠다. 데이터 소스는 다음 링크에서 다운이 가능하다.

 

kosis.kr/statHtml/statHtml.do?orgId=101&tblId=DT_1YL20401&vw_cd=MT_GTITLE01&list_id=111&seqNo=&lang_mode=ko&language=kor&obj_var_id=&itm_id=&conn_path=MT_GTITLE01

 

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')