网友作品 #000247 · 提交于 2026/10/10
死因年报分析器:死因顺位与期望寿命统计分析

作品简介
死因年报分析器读取死亡个案数据与人口数据,交互式完成死因年报核心指标分析:死因顺位、粗率与标化率、分性别、分年龄组、分地区、期望寿命(蒋庆琅法简略寿命表)、30-70 岁四类重大慢性病早死概率与 PYLL(潜在减寿年数)。
界面与分析口径参照《死因年报分析模版》(Excel 版),并内置该模版的 ICD-10 三级分类字典(约 1.38 万条)与 1982/2000/2010 三套标准人口,无需额外准备分类表。作者耗时 7 天、前后更新 50 多个版本打磨而成。
核心亮点
- 功能页面齐全:数据源、地区与标准、总览(8 项核心 KPI、死因顺位 Top10、三大类构成环形图、分年龄组死亡率、帕累托图、去死因期望寿命 Top10)、死因顺位、分性别与年龄组、年度趋势与 Joinpoint、分地区、期望寿命、早死概率、导出
- 顺位多层级:19 大类/三大类/第一~三级/合并层级/U 分类树(即年报 162 类)六个层级,含例数、构成比、粗率、各标准标化率、PYLL,Top15 条形图 + 帕累托图,支持单死因钻取
- 专业统计口径:蒋庆琅法简略寿命表与去死因期望寿命(寿命损失/寿命损失率)、WHO 口径 30-70 岁四类重大慢性病早死概率、PYLL(1-69 岁、上限 70 岁、组中值法)
- Joinpoint 趋势分析:参照 NCI 方法的分段线性回归,网格搜索转折点、F 检验、AR(1) 修正有效自由度,输出各段 APC 与 95% CI 及“趋势是否有统计学意义”的结论,4 个观测年即可分析
- 地区五级汇总:乡镇/区县/市级/省级/大区逐级汇总与筛选,支持分组(城区/郊区)标签;地区编码映射可在应用内维护、未匹配编码快速归区
- 标准人口可扩展:内置三套标准人口,支持新增自定义标准并设默认,顺位表标化率列随标准动态增减
- 数据友好:列名容错、ICD 编码大小写与是否带点均可、出生日期与年龄二选一、一键生成贴近真实死因谱的模拟数据用于培训演示,并附数据质量报告
- 一键导出:顺位各层级、年龄组死亡率、各区各年汇总、寿命表、早死概率等全部结果表导出为 xlsx 年报工作底表
技术与工具
- 技术栈:Python(uv 管理依赖),桌面窗口应用,也可切换浏览器模式运行
- 模块划分:数据读取(列名容错、地区前缀匹配)、分析(顺位/标化率/分年龄性别/分地区)、寿命表(简略寿命表/去死因期望寿命/早死概率/PYLL)、Joinpoint 回归、模拟数据与导出各自独立
- 内置数据:ICD-10 分类字典(约 1.38 万条)、三套标准人口、地区映射表
- 质量保障:ruff + mypy + pytest
- 交付:build.py 打包,产物按平台输出到 dist 目录
- 开发方式:业余水平,把 Excel 模版喂给 AI 依样制作,借助 AI 编程类工具与国内顶级模型完成
开发过程
作者手里原本有一份《死因年报分析模版》Excel,先把模版喂给 AI,让程序依照模版的界面与口径制作;随后进入漫长打磨——很多细节需要抠,前后更新 50 多个版本、耗时 7 天,才沉淀出这个稳定的成品。
适用场景
- 公共卫生、疾控部门的死因年报统计分析与人群健康数据研究
- 已有《死因年报分析模版》Excel 的单位,可把模版口径搬进程序自动计算,一键导出年报工作底表
- 培训演示场景可用内置模拟数据与示例文件练手导入
原始提交内容(点开查看,可复制全文去问 AI)
死因年报分析器 读取死亡个案数据与人口数据,交互式完成死因年报核心指标分析:死因顺位、 粗率与标化率、分性别、分年龄组、分地区、期望寿命(蒋庆琅法简略寿命表)、 30-70 岁四类重大慢性病早死概率、PYLL(潜在减寿年数)。
界面与口径参照《死因年报分析模版》(Excel 版),并内置该模版的 **ICD-10 三级分类字典(约 1.38 万条)**与 1982/2000/2010 三套标准人口, 无需额外准备分类表。
快速开始 开发环境:uv run death_report_analyzer(独立桌面窗口), 或 set APP_NATIVE=0 && uv run death_report_analyzer(浏览器模式) 打包交付:python scripts/build.py(或 skill 级 build_app.py),产物在 dist/DeathReportAnalyzer/<平台>/ 数据格式 死亡数据(xlsx / xlsm / csv,模版「原始表」格式) 必需列 说明 性别编码 1=男,2=女(兼容 男/女、M/F) 根本死因ICD编码 ICD-10,如 C34.9、I219(大小写、是否带点均可) 死亡时间 死亡日期 出生日期 或 年龄 二选一;两者都有时优先用年龄 地区列(可选):按优先级自动识别 常住地址地区编码 户籍地址编码 报告地区编码 地区/区 等;编码按前缀匹配到地区名称。地区映射在应用 「地区与标准」页维护(增删改 / 从文件导入 / 未匹配编码快速归区),持久化到 data/region_map.csv(打包版在 exe 同目录)。不填地区列时按「全市」处理。
地区行政层级(可选):映射表可额外标注每个地区所属的层级及其 4 级上级, 共 5 级:乡镇 区县 市级 省级 大区。文件列依次为 地区编码, 地区名称, 分组, 级别, 区县, 市, 省, 大区(旧版 2~3 列文件可直接 使用,缺失列按空处理)。用途:
「分地区」页指标下拉可切换到 乡镇/区县/市级/省级/大区汇总,逐级查看例数、 构成比与粗率; 全局筛选(数据源页顶部)与各页面的筛选条,地区下拉都列出 [省级] 广东省、[市级] 广州市、[分组] 城区 这类条目,选中即整体筛选; 数据源页还可用「按层级查看」下拉把地区列表切换成只看某一级的上级名称; 「分组」(城区/郊区)是横向标签,与纵向的行政层级互不冲突。 标准人口(标化率) 内置 1982/2000/2010 三套(来自模版);可在「地区与标准」页新增自定义标准 (按 0-4…85+ 顺序粘贴 18 个构成比,自动归一化为 100,或从两列文件导入)、 删除自定义标准、设置默认标准(总览 KPI 用)。顺位表的标化率列随标准动态增减。 自定义配置保存在 data/custom_standards.json。
人口数据(xlsx / xlsm / csv,模版「人口」格式) 宽格式:区 | 年份 | 性别 | 0 | 1-4 | 5-9 | … | 85+(末列可含 85及以上、 总计),也支持长格式 区 | 年份 | 性别 | 年龄组 | 人口数。 区列填地区编码或名称均可——统一经「地区与标准」页的映射转为标准名称; 映射修改后死亡与人口两侧同步重推。无地区/年份/性别列时自动降级处理。
「数据源」页可一键生成模拟数据(贴近真实死因谱,用于培训演示), 也可导出示例数据文件供练习导入。
分析口径 率:单位 1/10 万;标化率为直接法(1982/2000/2010 标准人口,5 岁组) PYLL:0 岁不计,1-69 岁,上限 70 岁(组中值法);PYLL率 = PYLL ÷ 总人口 × 1000 期望寿命:蒋庆琅法简略寿命表(a₀=0.1,a₁₋₄=0.4,其余 0.5;85+ 为开口组) 早死概率:WHO 口径,30-70 岁四类重大慢性病 (恶性肿瘤 C00-C97、心脑血管疾病 I00-I99、糖尿病 E10-E99、慢性呼吸系统疾病 J30-J98) 去死因期望寿命(参照曾晶《2025年四川省人群死因谱及去死因期望寿命分析》): 某死因各年龄组死亡数从全死因中扣除(人口不变)后重编寿命表得 e′₀; 寿命损失 = e′₀ e₀;寿命损失率 = 寿命损失 ÷ e′₀ × 100% 年度趋势:Joinpoint 分段线性回归(对数尺度拟合,APC = (e^β1)×100%); 转折点须同时满足 F 检验(α=0.05)、拟合改善 0.1% 且与相邻转折点 间隔 4 年、每段 2 个观测年;年份不设上限, 4 个观测点即可分析; 存在转折点时以各段显著性判定趋势(整体平均斜率因各段方向相反而无意义) 分母以人口表为准;个案地区无法归入人口表覆盖范围时不参与率计算,并在质量报告提示 功能页面 页面 内容 数据源 文件导入、模拟数据(生成分析 + 下载死亡/人口两个示例 Excel)、数据质量报告、全局筛选(年份/地区/性别,地区支持按乡镇/区县/市级/省级/大区分级与按分组筛选) 地区与标准 地区编码映射维护(表格增删改、从文件导入、数据中未匹配编码快速归区);地区行政层级(乡镇/区县/市级/省级/大区 5 级 + 4 级上级,用于逐级汇总与按层级筛选);标准人口维护(查看、新增/删除自定义标准、设置默认标准) 总览 8 项核心 KPI + 死因顺位 Top10 + 三大类构成(环形图)+ 分年龄组死亡率 + 死因构成帕累托图 + 去死因期望寿命 Top10 死因顺位 19大类/三大类/第一~三级/合并层级(U分类树,即年报162类) 6 个层级;例数、构成比、粗率、各标准标化率、PYLL;Top15 条形图 + 帕累托图(累计构成比);年龄组列三态;单死因钻取 分性别与年龄组 19 年龄组 × 男/女/合计 例数与死亡率(表 + 柱状 + 对数轴曲线 + 年龄构成百分比条形) 年度趋势与 Joinpoint 指标筛选器(粗死亡率 / 各标准人口标化死亡率 / 死亡数)+ 死因与年龄范围筛选 + 分年份趋势图(线性纵轴)+ Joinpoint 分段线性回归(参照 NCI 方法):网格搜索转折点、F 检验判定显著性、AR(1) 修正有效自由度、输出各段 APC 与 95% CI + APC 柱状图(带 95% CI 误差线),自动给出“趋势是否有统计学意义”的结论。年份不设上限(模拟数据已支持至多 50 年),有 4 年以上数据即可分析。本页不受全局年份筛选影响,死因下拉也基于全量数据 分地区 地区级别筛选(不汇总/按乡镇/区县/市级/省级/大区汇总,选定后全部表与图按该层级展示,率与期望寿命按上级地区重新计算)+ 各地区例数/构成比/粗率 + 地区×主要死因堆叠图 + 按指标切换的地区水平对比图(e0/早死概率/PYLL/标化率) 期望寿命 合计/男/女完整寿命表 + l(x)、e(x)、m(x) 死亡率、q(x) 死亡概率曲线 + 去死因期望寿命(去死因期望寿命/寿命损失/寿命损失率,按三大类·18大类·19大类 × 合计/男/女)+ 各区各年期望寿命一览 早死概率 四类慢病 + 全死因,合计/男/女(分组柱状 + 雷达图 + 构成环形图)+ 各区各年早死概率一览(一键计算) 导出 一键导出全部结果表(顺位各层级 + 各层级年龄组死亡率/例数 + 各区各年汇总 + 寿命表 + 早死概率的 xlsx 年报工作底表) 质量与验证 uv run ruff check . uv run mypy . uv run pytest -q 项目结构 src/death_report_analyzer/ constants.py # 年龄组、四类慢病 ICD 范围、口径常量 icd_dict.py # ICD-10 分类字典加载 data_io.py # 死亡/人口文件读取(列名容错、地区前缀匹配) analysis.py # 筛选、顺位、标化率、分年龄性别、分地区 life_table.py # 简略寿命表、去死因期望寿命、早死概率、PYLL joinpoint.py # Joinpoint 分段线性回归(F 检验、AR(1) 修正、统计分布函数) demo_data.py # 模拟数据生成与示例文件导出 export.py # 结果导出 xlsx ui_state.py # 应用状态中枢 ui/ # 界面(8 个页面 + 公共组件) assets/data/ # 内置数据(ICD 字典 icd19.csv、标准人口 std_pop.csv、地区映射 region_map.csv)