명목, 실질 GDP 시각화 및 분석
- 분석 목적:
2016년 2분기부터 2021년 1분기 까지 실질 및 명목 GDP의 트렌드, 순환성을 분석하고 앞으로 어떻게 될 지를 예상해 본다.
- GDP(Gross Domestic Product)란
한 나라에서 가계, 정부, 기업 등의 경제주체가 일정기간 동안에 생산한 재화 및 서비스의 부가가치를 의미한다. 명목은 물가가 반영되지 않은 것이고 실질은 물가가 반영된 값이라고 볼 수 있다. 또한 계절성이 존재하는 자료이기 때문에 원자료와 계절조정으로 나눌 수 있다. 본 분석에서는 계절조정된 자료만을 사용하였다.
import pandas as pd
import numpy as np
import plotly.graph_objects as go
import plotly
nomial_gdp= pd.read_csv("./GDP_계절조정_명목.csv",encoding="euckr")
real_gdp = pd.read_csv("./GDP_계절조정_실질.csv",encoding="euckr")
real_columns= real_gdp.transpose()[:1].values
nomial_columns = nomial_gdp.transpose()[:1].values
real_gdp2 = real_gdp.transpose()[1:]
nomial_gdp2 = nomial_gdp.transpose()[1:]
real_gdp2.columns = real_columns[0]
nomial_gdp2.columns = nomial_columns[0]
for c in real_columns[0]:
real_gdp2[c] = [np.float32(x.replace(",","")) for x in real_gdp2[c]]
nomial_gdp2[c] = [np.float32(x.replace(",","")) for x in nomial_gdp2[c]]
nomial_gdp2= nomial_gdp2.reset_index()
nomial_gdp2.columns =['날짜', '농림어업', '광업', '제조업', '전기, 가스 및 수도사업', '건설업', '서비스업',
'국내총생산(시장가격, GDP)']
nomial_gdp2.날짜= [str(x).replace(" ","Q") for x in nomial_gdp2.날짜]
real_gdp2 = real_gdp2.reset_index()
real_gdp2.columns =['날짜', '농림어업', '광업', '제조업', '전기, 가스 및 수도사업', '건설업', '서비스업',
'국내총생산(시장가격, GDP)']
real_gdp2.날짜 = [str(x).replace(" ","Q") for x in real_gdp2.날짜]
real_gdp2
| 날짜 | 농림어업 | 광업 | 제조업 | 전기, 가스 및 수도사업 | 건설업 | 서비스업 | 국내총생산(시장가격, GDP) | |
|---|---|---|---|---|---|---|---|---|
| 0 | 2016Q2 | 7767.299805 | 555.900024 | 113274.898438 | 10121.099609 | 21945.300781 | 236862.296875 | 426230.00000 |
| 1 | 2016Q3 | 7807.600098 | 626.400024 | 112531.500000 | 10366.500000 | 22810.199219 | 238198.796875 | 428335.68750 |
| 2 | 2016Q4 | 7792.399902 | 560.200012 | 114227.296875 | 10375.400391 | 23067.699219 | 238793.500000 | 430914.81250 |
| 3 | 2017Q1 | 7716.700195 | 586.299988 | 116367.796875 | 10776.599609 | 23662.900391 | 239817.500000 | 435062.09375 |
| 4 | 2017Q2 | 8065.000000 | 575.400024 | 116086.101562 | 10906.099609 | 23509.699219 | 242170.796875 | 437982.59375 |
| 5 | 2017Q3 | 8138.100098 | 557.799988 | 118955.601562 | 11138.700195 | 23792.500000 | 244907.593750 | 444474.00000 |
| 6 | 2017Q4 | 8140.000000 | 485.000000 | 116660.796875 | 10992.500000 | 23403.300781 | 246210.406250 | 443292.81250 |
| 7 | 2018Q1 | 8175.399902 | 530.799988 | 118244.296875 | 10490.700195 | 23793.699219 | 249871.703125 | 448384.09375 |
| 8 | 2018Q2 | 8079.399902 | 511.200012 | 119948.203125 | 10650.299805 | 23197.000000 | 251464.593750 | 451225.09375 |
| 9 | 2018Q3 | 7839.299805 | 496.200012 | 122121.101562 | 10851.700195 | 22437.000000 | 253438.796875 | 454330.81250 |
| 10 | 2018Q4 | 8015.100098 | 503.299988 | 123216.601562 | 11089.799805 | 22313.199219 | 255647.593750 | 458065.40625 |
| 11 | 2019Q1 | 8583.599609 | 472.899994 | 120108.000000 | 11287.500000 | 22099.400391 | 257260.296875 | 457150.68750 |
| 12 | 2019Q2 | 8273.299805 | 472.100006 | 120933.398438 | 11894.299805 | 22680.300781 | 260198.406250 | 461932.59375 |
| 13 | 2019Q3 | 8312.900391 | 468.600006 | 122912.898438 | 10597.599609 | 21990.300781 | 261925.093750 | 463803.59375 |
| 14 | 2019Q4 | 8203.099609 | 502.100006 | 124980.398438 | 11148.200195 | 22595.500000 | 265169.812500 | 469779.50000 |
| 15 | 2020Q1 | 8481.200195 | 481.500000 | 124808.203125 | 11879.200195 | 22646.500000 | 258460.500000 | 463853.18750 |
| 16 | 2020Q2 | 7748.600098 | 458.600006 | 113051.601562 | 11696.099609 | 22386.699219 | 256393.593750 | 449238.40625 |
| 17 | 2020Q3 | 7747.200195 | 460.700012 | 121512.703125 | 11392.900391 | 21379.400391 | 258974.796875 | 459271.81250 |
| 18 | 2020Q4 | 8077.299805 | 510.700012 | 125276.296875 | 11842.700195 | 21675.800781 | 260445.703125 | 464517.68750 |
| 19 | 2021Q1 | 8680.099609 | 461.500000 | 130075.500000 | 12541.799805 | 21866.599609 | 262248.000000 | 472602.18750 |
- 수치로만 봤을 때 다음과 같이 구분할 수 있겠다.
하락세: 광업, 건설업 등
상승세: 농림어업, 제조업, 전기가스 수도사업, 서비스업
GDP는 지속적으로 증가하는 것이 특징이 있다는 것을 수치로 확인할 수 있다.
시각화로 조금 더 확실하게 분석해보면 다음과 같다.
fig= go.Figure(layout=dict(title=dict(text="명목 GDP 및 구성요소들 MINMAX SCALE")))
fig.add_trace(go.Line(x=nomial_gdp2.날짜,y=((nomial_gdp2['농림어업']-np.min(nomial_gdp2['농림어업']))/(np.max(nomial_gdp2['농림어업'])-np.min(nomial_gdp2['농림어업']))),name="농림어업"))
fig.add_trace(go.Line(x=nomial_gdp2.날짜,y=((nomial_gdp2['광업']-np.min(nomial_gdp2['광업']))/(np.max(nomial_gdp2['광업'])-np.min(nomial_gdp2['광업']))),name="광업"))
fig.add_trace(go.Line(x=nomial_gdp2.날짜,y=((nomial_gdp2['제조업']-np.min(nomial_gdp2['제조업']))/(np.max(nomial_gdp2['제조업'])-np.min(nomial_gdp2['제조업']))),name="제조업"))
fig.add_trace(go.Line(x=nomial_gdp2.날짜,y=((nomial_gdp2['전기, 가스 및 수도사업']-np.min(nomial_gdp2['전기, 가스 및 수도사업']))/(np.max(nomial_gdp2['전기, 가스 및 수도사업'])-np.min(nomial_gdp2['전기, 가스 및 수도사업']))),name="수도사업"))
fig.add_trace(go.Line(x=nomial_gdp2.날짜,y=((nomial_gdp2['건설업']-np.min(nomial_gdp2['건설업']))/(np.max(nomial_gdp2['건설업'])-np.min(nomial_gdp2['건설업']))),name="건설업"))
fig.add_trace(go.Line(x=nomial_gdp2.날짜,y=((nomial_gdp2['국내총생산(시장가격, GDP)']-np.min(nomial_gdp2['국내총생산(시장가격, GDP)']))/(np.max(nomial_gdp2['국내총생산(시장가격, GDP)'])-np.min(nomial_gdp2['국내총생산(시장가격, GDP)']))),name='GDP'))
fig= go.Figure(layout=dict(title=dict(text="실질 GDP 및 구성요소들 MINMAX SCALE")))
fig.add_trace(go.Line(x=real_gdp2.날짜,y=((real_gdp2['농림어업']-np.min(real_gdp2['농림어업']))/(np.max(real_gdp2['농림어업'])-np.min(real_gdp2['농림어업']))),name="농림어업"))
fig.add_trace(go.Line(x=real_gdp2.날짜,y=((real_gdp2['광업']-np.min(real_gdp2['광업']))/(np.max(real_gdp2['광업'])-np.min(real_gdp2['광업']))),name="광업"))
fig.add_trace(go.Line(x=real_gdp2.날짜,y=((real_gdp2['제조업']-np.min(real_gdp2['제조업']))/(np.max(real_gdp2['제조업'])-np.min(real_gdp2['제조업']))),name="제조업"))
fig.add_trace(go.Line(x=real_gdp2.날짜,y=((real_gdp2['전기, 가스 및 수도사업']-np.min(real_gdp2['전기, 가스 및 수도사업']))/(np.max(real_gdp2['전기, 가스 및 수도사업'])-np.min(real_gdp2['전기, 가스 및 수도사업']))),name="수도사업"))
fig.add_trace(go.Line(x=real_gdp2.날짜,y=((real_gdp2['건설업']-np.min(real_gdp2['건설업']))/(np.max(real_gdp2['건설업'])-np.min(real_gdp2['건설업']))),name="건설업"))
fig.add_trace(go.Line(x=real_gdp2.날짜,y=((real_gdp2['국내총생산(시장가격, GDP)']-np.min(real_gdp2['국내총생산(시장가격, GDP)']))/(np.max(real_gdp2['국내총생산(시장가격, GDP)'])-np.min(real_gdp2['국내총생산(시장가격, GDP)']))),name='GDP'))
건설업은 물가변동의 영향을 크게받아 명목GDP는 상승했지만 실질GDP에서의 하락이 있었음을 알 수 있었다.
다음은 실질 GDP만을 이용하여 분석을 진행. 과연 앞으로의 GDP 는 어떻게 될까?
fig= go.Figure(layout=dict(title=dict(text="실질 GDP")))
fig.add_trace(go.Line(x=real_gdp2.날짜,y=real_gdp2['국내총생산(시장가격, GDP)']))
다음과 같이 GDP는 오를 수 밖에 없다는 것을 알 수 있다. 보면 2020년 2분기에 큰 하락이 있었는데 코로나의 여파가 컸음을 알 수 있다.
GDP는 Trend성이 있기 때문에 순환성을 파악하기 위해서는 Trend를 제거해야 한다. 다양한 방법이 있지만 이 포스트에서는 전기대비, 전년동기대비를 한번 둘러볼 예정이다.
real_gdp2['전기GDP'] = real_gdp2['국내총생산(시장가격, GDP)'].shift(1)
real_gdp2['전년동기GDP'] = real_gdp2['국내총생산(시장가격, GDP)'].shift(4)
real_gdp2['전기대비 GDP 증가율'] =(real_gdp2['국내총생산(시장가격, GDP)'] - real_gdp2['전기GDP'])/real_gdp2['전기GDP']
real_gdp2['전년동기대비 GDP 증가율'] = (real_gdp2['국내총생산(시장가격, GDP)'] - real_gdp2['전년동기GDP'])/real_gdp2['전년동기GDP']
fig= go.Figure(layout=dict(title=dict(text="실질 GDP 증가율")))
fig.add_trace(go.Line(x=real_gdp2.날짜,y=real_gdp2['전기대비 GDP 증가율'],name = '전기대비 GDP 증가율'))
fig.add_trace(go.Line(x=real_gdp2.날짜,y=real_gdp2['전년동기대비 GDP 증가율'],name = '전년동기대비 GDP 증가율'))
확실히 코로나의 여파로 GDP는 2분기에 많은 타격을 받았다. 반동이 큰 만큼 급격한 상승을 보여주고 있어 경기가 과열되는 것이 아닌지 걱정이 되는 그래프이기도 하다. 경계할 필요가 있긴 하겠다.
Leave a comment