[2024-07-26] 2023年までのデータに基づいて図を描き直した。
Rで描いた日本人の平均寿命のPython版である。
e-Statで公開されている簡易生命表の「年齢」および男女「生存数」(10万人あたり)を抜き出したCSVファイル lifetable2023.csv を読んでプロットする。
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("https://okumuralab.org/~okumura/stat/data/lifetable2023.csv")
plt.plot(df.Age, df.Male / 100000)
plt.plot(df.Age, df.Female / 100000)
plt.yticks([0, 0.5, 1])
plt.grid()
plt.legend(["男", "女"])
plt.xlabel("年齢")
plt.ylabel("生存率")
plt.savefig("240726a.svg", bbox_inches="tight")
2023年の平均寿命は男81.09歳,女87.14歳であるが,寿命の中央値(上の図の半減期)にあたる寿命中位数は男84歳ほど,女90歳ほどである。これは上の図を描いた後で plt.xlim(82, 92)
などと打ち込んで右の方を拡大すると読み取りやすい。平均より中央値のほうが意味があるだろうし,自分(男性)としても,寿命が81歳と考えるより84歳と考えるほうがうれしい。さらに,現在の年齢(72歳)を1として描き直すと,半減期は86〜87歳まで伸びるので,さらにうれしい。
上のグラフを微分したものに相当するものは,簡易生命表では「死亡数」として10万人あたりの値が出ている。これを上と同様にプロットしたものが次の図である。
import numpy as np plt.plot(df.Age[:-1], -np.diff(df.Male) / 100000) plt.plot(df.Age[:-1], -np.diff(df.Female) / 100000) plt.grid() plt.legend(["男", "女"]) plt.xlabel("年齢") plt.ylabel("死亡率/10万") plt.savefig("240726b.svg", bbox_inches="tight")
死亡数の最頻値は男88歳,女92歳である。
ついでに平均寿命の推移も:
df2 = pd.read_csv("https://okumuralab.org/~okumura/stat/data/life_expectancy_Japan.csv",
comment="#")
plt.plot(df2.Year, df2.Male, "o-")
plt.plot(df2.Year, df2.Female, "o-")
plt.xlabel("年")
plt.ylabel("平均寿命")
plt.grid()
plt.legend(["男", "女"])
plt.savefig("240726c.svg", bbox_inches="tight")
1990年以降に限ってプロット:
df3 = df2[df2.Year >= 1990] plt.plot(df3.Year, df3.Male, "o-") plt.plot(df3.Year, df3.Female, "o-") plt.xlabel("年") plt.ylabel("平均寿命") plt.grid() plt.legend(["男", "女"]) plt.savefig("240726d.svg", bbox_inches="tight")
1995年は阪神・淡路大震災,2011年は東日本大震災の年である。2021〜2022年の減少はCOVID-19が原因のようだ。ただし2020年は逆に平均寿命の伸びが増えているように見える。日本の超過死亡?も参照されたい。
中澤港先生に教えていただいたのだが,平均寿命の男女差をプロットするとおもしろい。男女差はほぼ7歳近くまで開いたが,その後また6歳近くまで持ち直しているのだ。裏RjpWikiさん,中澤先生の考察を参照されたい。
plt.plot(df3.Year, df3.Female - df3.Male, "o-") plt.xlabel("年") plt.ylabel("平均寿命の男女差") plt.grid() plt.savefig("240726e.svg", bbox_inches="tight")
Last modified: