1947年〜2018年の出生数と婚姻・離婚件数の推移をプロット

1947年〜2018年の日本の出生数、婚姻件数、離婚件数をグラフ化する。

スポンサーリンク

人口動態データの準備

このサイトからデータをダウンロードする。

from pandas import *

df = read_csv('jappopu.csv',usecols=['Unnamed: 0','出生数','婚姻件数','離婚件数'])
df.head(2)
Unnamed: 0 出生数 婚姻件数 離婚件数
0 1947 2 678 792 934 170 79 551
1 1948 2 681 624 953 999 79 032
df.rename(columns={'Unnamed: 0':'年'},inplace=True)
df = df.replace(r'[,\"\']','', regex=True).replace(r'\s*([^\s]+)\s*', r'\1', regex=True)
df = df.convert_objects(convert_numeric=True)
/root/.pyenv/versions/miniconda3-latest/envs/py368/lib/python3.6/site-packages/ipykernel_launcher.py:1: FutureWarning: convert_objects is deprecated.  To re-infer data dtypes for object columns, use DataFrame.infer_objects()
For all other conversions use the data-type specific converters pd.to_datetime, pd.to_timedelta and pd.to_numeric.
  """Entry point for launching an IPython kernel.

出生数・婚姻件数・離婚件数をプロット

from matplotlib.pyplot import *
from matplotlib.font_manager import FontProperties
from matplotlib import rcParams
style.use('ggplot')

fp = FontProperties(fname='/usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf', size=54)
rcParams['font.family'] = fp.get_name()
rcParams["font.size"] = "20"
fig, ax = subplots(figsize=(25,12))

df[['年','出生数']].set_index('年').plot(ax=ax,kind='bar',color='g',alpha=0.5)
df[['年','婚姻件数']].set_index('年').plot(ax=ax,kind='bar',color='r',alpha=0.5)
df[['年','離婚件数']].set_index('年').plot(ax=ax,kind='bar',color='b',alpha=0.5)
yticks(np.arange(0,2.8e6,1e6/4),
   ['{}万'.format(int(x/1e4)) if x > 0 else 0 for x in np.arange(0,2.8e6,1e6/4)])
ax.set_xticklabels(df['年'], rotation=90);

令和効果により今年は出生数と婚姻件数が増えると一部で予想されているが、こと出生数に関しては、1989年には平成効果は存在しなかったことを考えると、その可能性は限りなく低いだろう。今回はかなり前から改元(元号変更)が分かっていたから前回とは違うと言った意見も聞かれるが、去年の夏頃から始まっているアベノ大不況下で子供を産む人間はそうそういないと思われるので、取らぬたぬきの皮算用になりそうである。

style.use('seaborn-deep')
fig, ax = subplots(figsize=(25,12))

df[['年','出生数']].set_index('年').plot(ax=ax,color='g',alpha=0.5)
df[['年','婚姻件数']].set_index('年').plot(ax=ax,color='r',alpha=0.5)
df[['年','離婚件数']].set_index('年').plot(ax=ax,color='b',alpha=0.5)
ax.lines[0].set_linewidth(3)
ax.lines[1].set_linewidth(3)
ax.lines[2].set_linewidth(3)
legend(loc=1, prop={'size': 26})
yticks(np.arange(0,2.8e6,1e6/4),
   ['{}万'.format(int(x/1e4)) if x > 0 else 0 for x in np.arange(0,2.8e6,1e6/4)])
ax.annotate('丙午', xy=(1966,1360974),  xycoords='data',
             xytext=(-20, -20),textcoords='offset points',
             size=30, ha='right', va="center",
             bbox=dict(boxstyle="round", alpha=0.1),
             arrowprops=dict(arrowstyle="wedge,tail_width=0.5", alpha=0.1));

丙午には子供を産むな!という迷信があるらしく、そういった迷信を信じる人達が子供を作らなかったので、1966年は前年より出生数が3割減となっている。次の丙午である7年後の2026年の出生数は、2025年から始まる令和大恐慌の影響で30万人を割り込んでいるはずである。