본문 바로가기

프로젝트/시각화

[Python] 우리나라의 GDP와 GNP의 연도별 변화추세

오늘은 1961년부터 2021년까지의 우리나라의 명목 GNP와 명목 GDP 데이터를 살펴보고 그 차이에 대해 관찰해보겠습니다. 

 

명목 데이터를 사용하는 이유는 사이트에 GNP 데이터가 없기 때문입니다. (아래에서 설명하겠지만 명목 GNP = 명목 GNI이지만 실질 GNP != 실질 GNI 이기 때문에 실질 데이터로 GNP를 구하려면 더 복잡합니다)

 

데이터는 ecos 한국은행 경제통계시스템에서 수집할 수 있습니다.

https://ecos.bok.or.kr/

 

한국은행경제통계시스템

 

ecos.bok.or.kr

 

 

데이터 수집


먼저 명목 GDP 데이터 부터 수집하도록 하겠습니다.

 

사이트의 검색창에 "국내총생산"을 입력하여 가장 첫 번째로 뜨는 "연간지표 > 국내총생산(명목, 원화표시)"를 클릭해 준 후 조회합니다.

 

연도를 1961년부터 2021년까지로 맞춰주시고 자료받기를 눌러 CSV데이터를 받아줍니다.

 

받은 자료에 들어가게 되면 우리에게 필요한 데이터 외에 불필요한 데이터들이 포함되어있는 것을 확인할 수 있는데 그것들은 모두 지워줍니다.

내려받은-데이터의-정리된후-모습
이런식으로 정리하면 됩니다

우리에게 필요한 연도랑 국내총생산 데이터만 남겨줍니다.

 

다음으로 명목 GNP 데이터를 수집하겠습니다.

 

검색창에 국민총소득(명목, 원화표시)을 입력하신 후 이전과 똑같이 자료를 받아 정리해주시면 됩니다.

 

그런데 이상하지 않으신가요? 우리는 GNP 데이터를 받으려하는데 국민총소득은 GNI가 아닌가요?

 

하지만 괜찮습니다. 명목 GNP = 명목 GNI 이기 때문입니다. 

 

사이트에서 GNP 데이터는 따로 제공하지 않고 있기 때문에 GNI 데이터를 수집하시면 됩니다.

 

명목 GNP랑 명목 GNI가 같은 이유는 국민소득삼면등가의 법칙에 의해 생산국민소득, 분배국민소득, 지출국민소득이 등가 관계에 있기 때문입니다. (생산국민소득 = GNP, 분배국민소득 = GNI)

 

직관적으로 생각하면 기업이 생산물을 통해 벌어들인 재화가 노동자, 사업가 등에게 전부 분배가 되기 때문에 명목 GNP랑 명목 GNI가 같은 것입니다. (물론 현실 세계에서는 약간의 오차는 있을 수 있습니다)

 

하지만 주의하셔야 할 점이 있습니다.

 

실질 GNP랑 실질 GNI는 같지 않습니다. 실질 GNI = 실질 GNP + 교역조건에 따른 실질무역손익 입니다.

 

이는 여기서 자세히 설명하지는 않겠습니다.

 

 

데이터프레임 생성


내려받은 두 개의 자료를 사용해보겠습니다.

 

코랩을 사용하는 경우에는 코랩 파일 업로드 칸에 자료를 넣으시면 되고 주피터 노트북을 사용하는 경우에는 나중에 코드 작성할 때 자료의 경로를 입력해주시면 됩니다.

 

먼저 GDP 자료를 데이터프레임으로 만들어줍니다.

# gdp1 데이터프레임 생성
import pandas as pd   # 1

gdp = pd.read_csv("GDP1.csv", encoding="CP949")  # 2
gdp1 = gdp.transpose()  # 3
gdp1.rename(columns=gdp1.iloc[0], inplace=True)	# 4
gdp1.drop(gdp1.index[0], inplace=True)  # 5
  1. pandas 모듈을 임포트합니다.
  2. GDP 자료를 데이터프레임에 저장합니다. 자료에 한글이 있기 때문에 "CP949"로 인코딩합니다. 주피터 노트북을 사용하는 경우 자료의 경로를 포함하여 함수 안에 넣으시면 됩니다.
  3. 우리가 받은 자료의 column은 연도 데이터입니다. 우리는 GDP와 GNP의 비교에 관심이 있으므로 이 형식은 분석하기에 올바르지 않습니다. 따라서 행과 열을 바꾸어 줍니다.
  4. 바꾸어서 출력해보면 여러 가지 문제가 발생하는 것을 확인할 수 있습니다. 열의 이름을 첫 번째 행 데이터로 바꾸어줍니다.
  5. 첫번째 index를 제거해줍니다.

출력 결과는 다음과 같습니다.

gdp1

국내총생산-데이터프레임
gdp1 출력 결과

 

이제 GNP 자료를 데이터프레임으로 만들어보겠습니다. 위와 똑같이 해주면 됩니다.

# gnp 데이터프레임 생성
gnp = pd.read_csv("GNP1.csv", encoding="CP949")
gnp1 = gnp.transpose()
gnp1.rename(columns=gnp1.iloc[0], inplace=True)	# 행열이 전환된 데이터프레임의 열 이름 제대로 수정
gnp1.drop(gnp1.index[0], inplace=True)

 

 

데이터프레임 병합, 열 이름 변경


# 데이터프레임 병합, 열 이름 변경
df = pd.concat([gdp1, gnp1], axis=1)  # 1
df.rename(columns={"  국내총생산(명목, 원화표시)":"GDP", "  국민총소득(명목, 원화표시)":"GNP"}, 
		  inplace=True)  # 2
  1. 두 데이터프레임을 열 방향(좌우)으로 이어 붙인다.
  2. 열 이름을 각각 "GDP", "GNP"로 바꾸어준다.

열 이름을 GDP, GNP로 바꾸어준 이유는 나중에 matplotlib으로 시각화를 할 때 한글이 깨져 보이기 때문입니다.

 

출력 결과는 다음과 같습니다.

df

df-출력-결과
df 출력 결과

연도별로 GDP와 GNP 데이터가 연도별로 잘 정리된 것을 볼 수 있습니다.

 

 

데이터 숫자 변환


 

df.info()

df.info-출력-결과
df.info() 출력 결과

info함수를 통해 행의 수, NaN여부, 데이터 타입 등을 확인해줍니다.

 

데이터를 시각화하거나 분석하기 위해서는 NaN데이터를 없애고 데이터를 숫자로 변환해주어야 합니다.

 

데이터가 "object"(str) 타입이므로 숫자로 변환해줍니다.

 

# 데이터 숫자 변환
for i in df.index:
    for c in df.columns:
        if type(df[c][i]) == str:  # 1
            rm = df[c][i].replace(",","")  # 2
            df[c][i] = float(rm)  # 3
  1. str데이터를 뽑아줍니다.
  2. 데이터에 쉼표가 포함되어 있는 경우 숫자로 변환이 안되므로 쉼표를 제거해줍니다.
  3. 쉼표가 제거된 데이터를 float 타입으로 변환해줍니다.

보통은 astype함수를 통해 전체 데이터의 타입을 바꾸어주지만 이번에 수집한 데이터는 float타입이랑 str타입이 섞여있어 str타입의 데이터만 따로 변환해주었습니다.

 

데이터 타입을 변경해주었지만 info함수를 통해 데이터 타입은 여전히 object로 표시되더군요. (데이터를 각각 따로 변경해주어서 그런 것 같습니다)

 

 

GDP & GNP 시각화


import matplotlib.pyplot as plt  # 1

plt.figure(figsize=(12,8))  # 2
df["GDP"].plot(label="GDP")  # 3
df["GNP"].plot(label="GNP")  # 4
plt.title("South Korea GDP & GNP (1961~2021)")  # 5
plt.xlabel("Year")  # 6
plt.ylabel("(Million)")  # 7
plt.legend()  # 8
plt.grid()  # 9
plt.show()  # 10
  1. matplotlib 모듈을 임포트합니다.
  2. 사이즈 12, 8의 그래프를 생성합니다.
  3. df["GDP"]의 데이터를 사용하여 선 그래프를 생성하고 "GDP"라벨을 붙여줍니다.
  4. df["GNP"]의 데이터를 사용하여 선 그래프를 생성하고 "GNP"라벨을 붙여줍니다.
  5. 그래프의 이름을 붙여줍니다.
  6. 그래프의 x축 이름을 붙여줍니다.
  7. 그래프의 y축 이름을 붙여줍니다.
  8. 각각의 선 그래프의 라벨을 그래프에 표시합니다.
  9. 격자선을 그래프에 표시합니다.
  10. 그래프를 보입니다.

출력 결과는 다음과 같습니다.

그래프-출력-결과
그래프 출력 결과

GNP와 GDP의 선 그래프입니다.

 

원래는 GDP와 GNP의 차이에 대해 보려고 했지만 너무 붙어있어서 유의미한 결과를 도출해낼 수 없습니다.

 

그러므로 이번엔 GDP와 GNP의 차이를 그래프에 퍼센트 단위로 나타내 보겠습니다.

 

 

GDP & GNP 차이(%) 시각화


# GDP 대비 GNP와 GDP의 차이(%)
df["dif"] = (df["GNP"] - df["GDP"]) * 100 / df["GDP"]

GDP와 GNP의 차이를 GDP 대비 퍼센트로 나타내려고 합니다.

 

dif열에 계산한 값을 넣어줍니다.

 

df

df-출력-결과
df 출력 결과

 

plt.figure(figsize=(15,10))
df["dif"].plot()
plt.title("South Korea GDP & GNP Difference (1961~2021)", size=20)
plt.xlabel("Year")
plt.ylabel("Difference(%)")
plt.grid()
plt.show()

그래프-출력-결과
그래프 출력 결과

df의 dif열을 선 그래프로 나타내 보았습니다.

 

이전보다 훨씬 유의미한 결과를 도출해 낼 수 있습니다.

 

GNP가 GDP보다 큰 기간의 경우 차이의 퍼센트가 양수로 나타나고 그 반대의 경우 음수로 나타납니다.

 

 


오늘은 1961년부터 2021년까지의 우리나라의 명목 GNP와 명목 GDP 데이터를 살펴보고 그 차이에 대해 관찰해보았습니다. 

 

그렇다면 GDP와 GNP의 차이는 왜 발생하는 걸까요?

 

그 이유에 대해서는 다음 시간에 설명해보도록 하겠습니다.

 

https://bigdata-doctrine.tistory.com/21

 

[Python] 우리나라 GDP와 GNP의 차이에 대한 분석

https://bigdata-doctrine.tistory.com/20 [Python] 우리나라의 GDP와 GNP의 연도별 변화추세 오늘은 1961년부터 2021년까지의 우리나라의 명목 GNP와 명목 GDP 데이터를 살펴보고 그 차이에 대해 관찰해보겠습니..

bigdata-doctrine.tistory.com

 

 

밑에 코랩 링크와 파일을 남겨놓으니 실습해보세요.

https://colab.research.google.com/drive/1nwysLdUepgBOXn5LLFpTimdWhNmYGKn7?usp=sharing 

 

우리나라의_GDP와_GNP의_연도별_변화추세(배포용).ipynb

Colaboratory notebook

colab.research.google.com

GNP1.csv
0.00MB
GDP1.csv
0.00MB
NFP1.csv
0.00MB