Pandasでデータを最終行もしくは先頭行にappend(アペンド)する方法を、2021年7月の出生数が発表されていたみたいなので、早速、この2021年7月のデータを1月〜6月までのデータにアペンドして、2020年1月〜7月の出生数と比較してみることにしました。 結論から言うと、2021年7月の出生数も前年同月の出生数を上回ることはできませんでした。ここまでは、在宅勤務効果や、政府のバラマキ効果は出ていないようです。
import pandas as pd
from tabula import read_pdf
df = read_pdf("https://www.mhlw.go.jp/toukei/saikin/hw/jinkou/geppo/s2021/dl/202107.pdf",
pages = '3',
multiple_tables=False,
stream=True)
df3=df[0]
df3.head(3)
2021年1月〜6月までのデータをロードします。
df5 = pd.read_csv('numofbirths2021.csv')
df5.head(3)
2021年7月のデータのUnnamed: 0を月に変更します。
df3.rename(columns={'Unnamed: 0':'月'}, inplace = True)
df3.head(2)
月を7月にします。
df3.loc[:0, "月"] = "7"
df3.head(2)
df5の最終行にdf3の先頭行を追加します。
df2 = df5.append(df3.loc[:0], ignore_index=True)
df2.tail(2)
先頭行に追加する場合は以下のようにします。
df4 = pd.concat([df3.loc[:0], df5], ignore_index=True)
df4.head(2)
df6 = pd.read_csv('numofbirths2020.csv')
df6.head(2)
このままだとグラフ化できないので、データに前処理を施します。
df6 = df6.replace(r'[,\"\']','', regex=True).replace(r'\s*([^\s]+)\s*', r'\1', regex=True)
df6 = df6.apply(pd.to_numeric, errors="ignore")
df2 = df2.replace(r'[,\"\']','', regex=True).replace(r'\s*([^\s]+)\s*', r'\1', regex=True)
df2 = df2.apply(pd.to_numeric, errors="ignore")
両データを保存しておきます。
df6.to_csv('numofbirths2020_2.csv', index=False)
df2.to_csv('numofbirths2021_2.csv', index=False)
グラフにします。
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,13))
df6.loc[0:6,['月','出 生 数']].set_index('月').plot(ax=ax,kind='barh',color='g',alpha=0.5, position=1, width=.25)
df2.loc[0:6,['月','出 生 数']].set_index('月').plot(ax=ax,kind='barh',color='r',alpha=0.5, position=0, width=.25)
xticks(np.arange(0,1.1e5,1e4),
['{}万'.format(int(x/1e4)) if x > 0 else 0 for x in np.arange(0,1.1e5,1e4)]);
for i in ax.patches:
ax.text(i.get_width()+2.5e2,i.get_y()+.185,\
'{:,}人'.format(int(round((i.get_width()), 2))), fontsize=20, color='k')
ax.legend(["出生数(2020)","出生数(2021)"],loc='best', prop={'size': 26});
ax.invert_yaxis();
2021年7月も前年割れしてしまっていますが、数字はそれ程落ち込んではいないので、8月以降に期待がもてそうです。とは言っても、2021年の出生数が80万人割れするのは必至で、来年のニュースの見出しに、「出生数80万人割れの衝撃!」が載ることになります。日本はそろそろ真剣に移民・難民の大量受け入れをする議論をする時期に来ています。実際は、議論の余地もない程に深刻な状況に陥ってしまっているのですが、あらゆる面で、政治不在という現状が、この国の本当の悲劇だと言えます。