1950年的日本,人口金字塔是一个标准的三角形——底部宽阔,顶部尖锐。第一代婴儿潮人群(1947-1949年出生)当时还是幼儿,构成了这个三角形的底座。但当你拖动时间轴,这个形状开始缓慢而确定地扭曲:三角形变成葫芦,葫芦变成倒钟,最终倒向一侧。中位年龄从20岁爬升到56岁,65岁以上人口占比从7%膨胀到38%。
这个250行代码的可视化页面,核心问题其实不在绘图本身——用Plotly或D3画一张静态金字塔只需要30行。真正的难点在数据层:如何让1950年的三角形"正确"。
![]()
作者最初的survival()函数只接收年龄和性别两个参数,套用当代日本生命表:女性存活率按90岁基准计算,男性按85岁。代入1950年数据时,系统预测75岁人群(即1875年出生)的存活率为42%。这个数字对1945年出生者大致合理,对1875年出生者则荒谬得离谱——结核病、婴儿死亡率、两场战争,真实的队列存活曲线远比模型残酷。
修正方案是引入队列特异性死亡率(cohort-specific mortality)。同一套逻辑也适用于未来:2070年的百岁老人出生于1970年,他们的存活概率不能简单套用2020年的生命表外推。
数据生成脚本generate-data.py将人口模型拆为四个函数:出生队列规模、队列特异性存活率、年龄分箱、总人口校准。即使经过精细调参,未校准的模型输出仍会在实际值的92%-105%之间浮动。作者选择保留形状、锚定规模:每年按国立社会保障・人口問題研究所(IPSS)和联合国世界人口展望(UN WPP)的公布总数进行比例缩放——1950年8320万,2020年1.263亿,2070年8700万。
最终效果:点击播放按钮,图表以每年120毫秒的速度变形。你能亲眼看见第一代婴儿潮从底部升起,在2020年代成为中段最臃肿的鼓包,2030年代抵达金字塔顶端,2050年代彻底消失。两个鼓包的2020年,变成单边倾斜的2070年。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.