晩婚化による晩産化が進んでいると言われている日本女性の年齢別出産数の推移が気になったので早速調べてみることにしました。晩婚化・晩産化・少子化は先進国と一部の新興国のトレンドになっているのですが、日本以外の他の先進国は、国勢調査に載らない子供が相当数いると言われているので、一概に少子化とは言えないようです。例えば、アメリカなどは、統計に載らない不法移民の子供が百万単位でいると言われていて、一説では3000万人近くいると言われている不法移民を入れると、実際は少子化でも何でもない可能性さえあると指摘されています。
import pandas as pd
df = pd.read_excel('birthage.xls',encoding='iso2022_jp_2004',skiprows=1)
df.head(10)
昭和は1925年をプラスして西暦に変換します。
df.loc[5:8,'Unnamed: 1']=df.loc[5:8,'Unnamed: 1']+1925
平成は、1988を足して西暦に変換します。つまり、昭和は1926年が元年で、平成は1989が元年ということです。
df.loc[9:17,'Unnamed: 1']=df.loc[9:17,'Unnamed: 1']+1988
各コラムの名称を変更します。
df.rename(columns={'Unnamed: 1':'年','Unnamed: 4':'15~19歳','Unnamed: 5':'20~24歳',\
'Unnamed: 6':'25~29歳','Unnamed: 7':'30~34歳','Unnamed: 8':'35~39歳',\
'Unnamed: 9':'40~45歳','Unnamed: 10':'46~49歳'}, inplace=True)
a=df[['年','15~19歳','20~24歳','25~29歳','30~34歳','35~39歳','40~45歳','46~49歳']][5:18]
a['年'] = a['年'].astype(int)
この程度の量なら手動でも問題ありませんが、これが100とかになると手動ではとても無理なので、以下のような方法も覚えておくといいかもしれません。
c=[]
for i in range(4,11):
a = i
b = '{} {}'.format("Unnamed:" ,a)
c.append(b)
c
d=[]
for i in range(3,10):
a=i+i*4
b=a+4
c='{}〜{}歳'.format(a,b)
d.append(c)
d
f=["'{}': '{}'".format(c_, d_) for c_, d_ in zip(c, d)]
f
f = ', '.join(f)
print(f)
上のプリントアウトプットを{ }の中に貼り付けます。
年齢別出生数をプロットする¶
from matplotlib.pyplot import *
from matplotlib.font_manager import FontProperties
from matplotlib import rcParams
style.use('seaborn-bright')
fp = FontProperties(fname='/usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf', size=54)
rcParams['font.family'] = fp.get_name()
rcParams.update({'font.size': 25})
fig, ax = subplots(figsize=(20,10))
a.sort_values(by='年', ascending=False,inplace=True)
a.set_index('年').plot(kind='barh',ax=ax,stacked=True)
ax.legend(loc='upper right', fancybox=True, framealpha=0.5)
xlabel('出生数')
#rc('xtick', labelsize=20)
#rc('ytick', labelsize=25)
xticks(np.arange(0,2.1e6,1e6/10),
['{}万'.format(int(x/1e4)) if x > 0 else 0 for x in np.arange(0,2.1e6,1e6/10)])
ax.legend(loc='lower right',fancybox=True,framealpha=0.5,prop={'size': 26});
1975年は15歳〜29歳だけで150万人以上も産んでいたというのは驚きです。2016年の全年代出生数が、1975年の25〜29歳の出生数にすら及ぼないのだから全く話になりません。面白いのは、30歳以上の出生数に関して言えば、1975年時よりも今の方が増えているということです。そのことが晩産化を如実に物語っていると言えます。
df1 = pd.read_csv('birthage.csv',encoding='shift_jis')
df1.head(2)
df1 = df1.set_index(['母の年齢(5歳階級)'])
df1.drop(['/時間軸(年次)'],axis=1,inplace=True)
df1 = df1.apply(pd.to_numeric, errors="coerce").astype(float)
df1.reset_index(inplace=True)
今回は年齢層を10代、20代、30代、40歳以上に分けます。
import numpy as np
df2 = df1[1:3].groupby(np.arange(len(df1[1:3]))//2).sum()
df2.index = df1[1:3].loc[1::2, '母の年齢(5歳階級)']
df3 = df1[3:5].groupby(np.arange(len(df1[3:5]))//2).sum()
df3.index = df1[3:5].loc[1::2, '母の年齢(5歳階級)']
df4 = df1[5:7].groupby(np.arange(len(df1[5:7]))//2).sum()
df4.index = df1[5:7].loc[1::2, '母の年齢(5歳階級)']
df5 = df1[7:10].groupby(np.arange(len(df1[7:10]))//3).sum()
df5.index = df1[7:10].loc[1::3, '母の年齢(5歳階級)']
df6 = pd.concat([df2,df3,df4,df5], axis=0)
df6.rename(index={'出生数_14歳以下【人】':'10代','出生数_20〜24歳【人】':'20代',\
'出生数_30〜34歳【人】':'30代','出生数_40〜44歳【人】':'40歳以上'},inplace=True)
df6.reset_index(inplace=True)
df6
from matplotlib.pyplot import *
from matplotlib.font_manager import FontProperties
from matplotlib import rcParams
style.use('fivethirtyeight')
fp = FontProperties(fname='/usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf', size=54)
rcParams['font.family'] = fp.get_name()
rcParams["font.size"] = "18"
fig, ax = subplots(figsize=(18,10))
df6.set_index('母の年齢(5歳階級)').T.plot(kind='barh',ax=ax,stacked=True)
ax.legend(loc='lower right',fancybox=True,framealpha=0.5,prop={'size': 26})
xticks(np.arange(0,2.51e6,1e6/5),
['{}万'.format(int(x/1e4)) if x > 0 else 0 for x in np.arange(0,2.51e6,1e6/5)]);
戦後間もない1950年は、他の年に比べると30歳以上の女性がメチャクチャ子供を産んでいます。2017年の30代・40歳以上は、1955年の30代・40歳以上よりも多くの子供を産んでいます。晩婚化によって20代の出産が減ったことが少子化の原因であることが一目瞭然かと思われます。問題はその晩婚化の原因です。女性の高学歴化と社会進出が進んだことが、先進国や新興国の少子化の原因であると言われていますが、本当の未婚化・晩婚化の原因は、実際には、高齢者と公務員の国庫収奪による若年層の貧困化にあると指摘されています。つまり、現在の若者は、45年前とは比べ物にならないほど税負担が増えているにもかかわらず、税収のほぼ全てを公務員と一部の高齢者に収奪されているということです。バブル崩壊後に増えたのが、国と地方の借金、公務員給与、高齢者の金融資産、税(年金・社会保険)負担、ワープア、貧富の差であることを考えれば、現在の日本の絶望的な状況も納得がいくはずです。まさにこんな日本に誰がしたと言いたくなります。
1908年〜2017年の平均婚姻年齢(初婚・全婚姻)をグラフ化
若年・中年・高年・超高年層死亡数推移(1950年〜2017年)
日本の交通事故死亡者数の推移を性別・年齢別に棒グラフ化する
Python:日本人の年齢別死亡者数の推移をプロットして考察する
Python:年齢別交通事故死亡数を死亡割合に変換する
Python:在留外国人比率の高い市町村を条件別に抽出する
Python:日本人の年代別・性別死亡数を視覚化して考察する
Python:結婚適齢期女性が最も余っている都市を探し出す
Python:国籍別に在留外国人数の多い市町村を抽出する
Python:1950年〜2017年の年齢別自殺数推移を棒グラフ化する