지난 시간에
초등학교에는 남학생이 더 많을까, 여학생이 더 많을까
를 주제로 데이터 분석을 했다.
https://aigoamigo.tistory.com/105
초등학교에는 남학생이 더 많을까, 여학생이 더 많을까
우리 학급에는 초등학교 남학생이 더 많다. 남자가 12명, 여자가 11명. 그리고 복도를 돌아다닐 때도, 학교 밖을 돌아다닐 때도, 남학생이 여학생보다 더 많이 보인다. 이건 진실일까, 혹은 나의
aigoamigo.tistory.com
그러던 중 우리나라 성비는 어떻게 변화해왔는지 살펴보고 싶었다.
우리나라 성비 변화는 인터넷을 통해 쉽게 찾아볼 수 있었으나,
2022년까지 최신의 데이터를 직접 구해보고 싶어서 분석을 진행해보았다.
데이터 가져오기 및 살펴보기
KOSIS에서 "인구동태건수 및 동태율 추이" 데이터를 가져왔다.
위 데이터에는 아래와 같은 속성들이 포함되어 있다.
'출생아수(명)', '사망자수(명)', '자연증가건수(명)', '조출생률(천명당)', '조사망률(천명당)', '자연증가율(천명당)', '합계출산율(명)', '출생성비(명)', '영아사망률(출생아 천명당)', '혼인건수(건)', '조혼인율(천명당)', '이혼건수(건)', '조이혼율(천명당)', '기대수명(출생시 기대여명)', '기대수명(출생시 기대여명) - 남', '기대수명(출생시 기대여명) - 여'
속성이 너무 많다.
위 속성 중 나에게 필요한 속성만 추려보았다.
"출생아수(명)", "출생성비(명)"
파생변수 만들기
위 속성을 바탕으로 추가적으로 몇가지 속성을 만들었다(파생변수 생성).
"출생성비(비율)", "출생남아수", "출생여아수"
조금 더 설명을 해보자면,
"출생성비(비율)"은
{"출생성비(명)" / "출생성비(명)" +100}
으로 계산했다.
이를 바탕으로
"출생남아수"와 "출생여아수"를 구했다.
"출생남아수"는
{출생아수(명)*출생성비(비율)}
로 구했고,
"출생여아수"는
{출생아수(명)-출생남아수}
고 구했다.
데이터 분석 및 결론
결과는
우리나라 성비는 꾸준히, 여전히 100 이상이다.
하지만 그 성비는 점차 100에 수렴해가는 모습을 보였다.
조금 더 보충 설명을 하자면,
성비가 105라는 말은, 여자가 100명일 때 남자는 105명이라는 뜻이다.
이렇게 분석을 마치고 나니,
아이가 태어날 때, 남자가 더 많이 태어나는 것은 자연스러운 것인가
라는 의문이 들었다.
이를 위해서는 전세계 성비 데이터가 필요하다고 생각했다.
그래서 다음 글은 전세계 성비는 어떻게 변했을까?
를 주제로 글을 써보고자 한다.
이 분석은 Colaboratory에서 Python을 활용해 진행했다.
구체적인 코드를 보고 실습도 해보고 싶다면, 아래의 링크로 이동하면 된다.
https://colab.research.google.com/drive/1b4VUyYWqDNbYAH6ewNnSmsVdhXsGaoty?usp=sharing
230803_population_Kor.ipynb
Colaboratory notebook
colab.research.google.com
보기 편하도록 여기에도 코드를 남겨본다.
#한글 출력 가능 하도록 설정
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
import pandas as pd
pd.set_option('display.max_rows', None)
#우리 나라 성비
##df_kor = pd.read_csv("https://raw.githubusercontent.com/RaccoonTeacher/tistory/main/2023_Population_Korea.csv", encoding="cp949")
##오류 발생 : 'utf-8' codec can't decode byte 0xb1 in position 1: invalid start byte
df_kor = pd.read_csv("https://raw.githubusercontent.com/RaccoonTeacher/tistory/main/2023_Population_Korea.csv", encoding="cp949")
#행, 열 바꾸기
df_kor = df_kor.transpose()
#첫번째 행을 열 이름 설정
df_kor.columns = df_kor.iloc[0]
df_kor = df_kor.drop(index="기본항목별")
#필요한 열만 추출
df_kor_pre = df_kor.loc[:, ["출생아수(명)", "출생성비(명)"]]
#출생 남아, 여아 수 산출
df_kor_pre["출생성비(명)"] = df_kor_pre["출생성비(명)"].astype(float)
df_kor_pre["출생아수(명)"] = df_kor_pre["출생아수(명)"].astype(int)
df_kor_pre["출생성비(비율)"] = df_kor_pre["출생성비(명)"][0] / (df_kor_pre["출생성비(명)"][0] + 100)
df_kor_pre["출생남아수"]=(df_kor_pre["출생아수(명)"] * df_kor_pre["출생성비(비율)"]).astype(int)
df_kor_pre["출생여아수"]=df_kor_pre["출생아수(명)"]-df_kor_pre["출생남아수"]
#꺾은선 그래프 그리기
#한글 폰트 출력 가능하도록 설정
import matplotlib.pyplot as plt
from matplotlib import rc
## 기본 글꼴을 NanumGothic으로 변경
rc('font', family='NanumGothic')
plt.plot(df_kor["출생성비(명)"])
plt.xticks(rotation=45)
plt.title("한국 성비")
plt.ylim([104, 110])
plt.show()
'데이터 분석' 카테고리의 다른 글
전국 Paps 등급은 어떨까? #2023 (0) | 2023.08.17 |
---|---|
전세계 성비는 어떻게 변했을까? (0) | 2023.08.04 |
초등학교에는 남학생이 더 많을까, 여학생이 더 많을까 (0) | 2023.08.01 |
PAPS로 학생 군집화하여 체육시간 모둠 나누는 프로그램 만들기(ChatGPT) (5) | 2023.04.03 |
우리나라 아이돌은 평균 몇 명일까 (0) | 2022.12.09 |
댓글