e-Statにある2020年の人口動態調査 / 人口動態統計 確定数 出生から出生性比(出生数の男/女の比)をプロットしてみる:
1906年,1966年のピークは「ひのえうま」である。
e-StatのCSVファイルの先頭部分は次のようになっている。文字コードはShift JIS,行末はCRLFである。
令和2年,人口動態統計,, 上巻 出生 第4.1表 年次別にみた出生数・出生率(人口千対)・出生性比及び合計特殊出生率 注 :1)1944年(昭和19年)〜1946年(昭和21年)は戦災による資料喪失等資料不備のため省略した。1947年(昭和22年)〜1972年(昭和47年)は沖縄県を含まない。 2)1926年(昭和元年)・1930年(昭和5年)・1935年(昭和10年)の出生数の総数には、男女不詳が各1が含まれている。 3)率算出に用いた分母人口は日本人人口である。 4)2004・2006・2009〜2017年(平成16・18・21〜29年)の都道府県からの報告漏れ(2019年3月29日公表)による再集計を行ったことにより、 2017年(平成29年)以前の報告書とは数値が一致しない箇所がある。 資料:国立社会保障・人口問題研究所「人口統計資料集」、厚生労働省「人口動態統計」 , 出生数,,, 出生率, 出 生,合計特殊 , 総 数, 男, 女,, 性 比,出 生 率 1899,1386981,713442,673539,32.0,105.9,… 1900,1420534,727916,692618,32.4,105.1,… (中略) 2000,1190547,612148,578399,9.5,105.8,1.36 2001 ,1170662,600918,569744,9.3,105.5,1.33 2002,1153855,592840,561015,9.2,105.7,1.32 (後略)
最初の9行はメタ情報,次の2行は列見出しを2行に分けてスペースで整形したものである。本来のCSVにするためには,メタ情報を削除あるいはコメントアウト(頭に #
を付けるなど)して,ヘッダ行を次のようにすればよい:
年,出生数_総数,出生数_男,出生数_女,出生率,出生性比,合計特殊出生率
さらによく見ると2001年に全角空白が紛れ込んでいる。最初これに気づかなかったので「年」がすべて文字列扱いになってしまった(RやExcelはこの全角空白を読み飛ばすようだ)。ここでは下記のように sep="\s*,"
で読み飛ばすことにした。
結局,元データをそのまま読んで出生性比をプロットするには,次のようにすればよい。「出生性比」という冗長な項目は無視して,「出生数_男」を「出生数_女」で割って正確な出生性比を求めた。
import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv("mb010000.csv", encoding="cp932", skiprows=11, na_values="…", keep_default_na=False, sep="\s*,", names=["年", "出生数_総数", "出生数_男", "出生数_女", "出生率", "出生性比", "合計特殊出生率"]) plt.figure(figsize=(14, 4)) plt.plot(df["年"], df["出生数_男"] / df["出生数_女"], "o-") plt.grid()
ただ,これでは1944〜1946年が欠測値なのに線で結んでしまう。1943年と1947年を結ぶ線を消すには,次のようにすればよい:
df1 = pd.DataFrame({"年": [1944, 1945, 1946]}) df2 = pd.merge(df1, df, how="outer", sort=True) plt.plot(df2["年"], df2["出生数_男"] / df2["出生数_女"], "o-")
冒頭に掲げた図はこのようにして描いた。
Last modified: