信息速览
欧洲健康全民数据库(European Health for All database,下称 HFA-DB)是世卫组织欧洲区域办事处在哥本哈根维护的一套卫生统计库。它记录 53 个成员国上报的基本人口、死亡、发病与住院、生活方式、环境、卫生资源与卫生费用,一共 613 项指标,逐年排列,最长的一条能从 1949 年一路排到 2025 年。
它最容易被误会成「WHO 数据的一个欧洲切片」。这个误会代价很大:全球层面的 WHO 数字大多是重新建模后的估计值,而 HFA-DB 的主体是成员国报上来的原始数。同一个国家同一年的婴儿死亡率,HFA-DB 与全球估计库可能相差两三倍,差的不是谁错,而是「报的数」与「估的数」本来就是两回事。
搞清楚这条界线,才知道什么时候该用它、什么时候该换别的来源。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 本质 | WHO 欧洲区办事处的成员国上报卫生统计库,属 Health for All 家族 |
| 官方入口 | gateway.euro.who.int(European Health Information Gateway)下的 datasets 页 |
| 指标数 | 613 项(官方页面口径;接口里另有 5 条空壳,见 §2.3) |
| 国家数 | 53 个成员国;长表另有 4 个国以下单元、1 个历史实体、18 个国家组 |
| 时间跨度 | 1949 至 2050,逐指标不同;1970 年只是中位数起点 |
| 观测单元 | 指标 × 国家 × 年份 × 性别,部分指标再加城乡与是否 |
| 一次性导出 | 长表约 133 万行、12.1 MB 压缩包,含表格式与透视式两种切法 |
| 接口形态 | WHO/Europe Data Warehouse REST v5,返回 JSON 或 CSV,非 OData |
| 更新状态 | 活跃。数据集页标注 2026 年 10 月 24 日更新,接口里多数指标数据戳为 2026 年 10 月 23 日 |
| 许可 | WHO 版权声明 + 数据共享许可,非无条件开放 |
| 在库内的位置 | 欧洲纵向上报序列;与全球估计库、欧洲统计口径库构成三层分工 |
§1 它到底是什么:一份成员国自己报的账
§1.1 与全球估计库的根本差别
世卫组织同时维护两套数字,一套是成员国报的,一套是全球层面估的。HFA-DB 属于前者。
这不是行政细节,而是两种不同性质的数据。上报值反映的是某个国家统计体系在某个年份的实际产出:它的生命登记覆盖到哪、它的死因编码用哪一版、它的分母用的是常住人口还是户籍人口。估计值反映的是国际机构用模型把缺口补齐之后的结果,为的是让 194 个国家可以在同一张图上比较。
两者各有各的用处,但不能混用。要做欧洲内部的历史趋势分析,用上报值才能看出真实的口径断裂;要做跨区域的横向比较,用估计值才能避免「谁报得细谁就显得差」的偏差。HFA-DB 的产品页把这一点说得很直白:它的价值恰恰在于「基于上报数据而非估计值」。
§1.2 它服务的是一套政策框架
HFA-DB 不是为科研建的,是为监测建的。官方页面写明,这个库汇集的是欧洲区主要监测框架所属的指标,并且点名了两个框架:Health 2020(后来接续为欧洲工作规划)与可持续发展目标。
这解释了它的指标选择为什么看起来有点杂:既有总死亡率这种经典流行病学指标,也有全科医生人数、门诊人均就诊次数、医院病床数、卫生总费用占 GDP 比重这类卫生系统指标,还有识字率、基尼系数、城镇化率、劳动参与率这类社会经济背景变量。它们不是按学科分类挑的,是按「政策要盯哪些数」挑的。
理解这一点很关键。如果按流行病学教材的逻辑去找指标,会觉得它缺了很多病种;如果按卫生系统绩效评估的逻辑去找,会发现它相当完整。
§1.3 决策卡:你的处境决定它值不值
| 你的处境 | HFA-DB 能帮你什么 |
|---|---|
| 想复原某个欧洲国家 1970 年代以来的粗死亡率或预期寿命序列 | 有,而且是成员国原报值,能看到口径切换造成的断点 |
| 做欧洲 53 国的卫生系统面板回归 | 有,卫生资源、费用、利用三类指标齐全,可直接取国家-年 |
| 要比较欧洲与非洲、东南亚的同一指标 | 不合适,只能用全球层面估计库,两套数不能混 |
| 需要某国 2025 年的最新婴儿死亡率 | 多数指标到 2024 或 2025,但缺报与滞后普遍,须查国家备注 |
| 要按城乡拆分看供水与排污覆盖 | 有,COUNTRY 之外还有一个居住地维度,只有少部分指标填了值 |
| 想做欧洲区内部的次国家分析 | 只有比利时与英国有国以下单元,其余国家没有 |
| 想用同一年同一指标做跨国排名且要求口径一致 | 不建议直接排,上报口径差异会让排名失真 |
§1.4 不适合谁
如果你的需求是「一份口径统一、可以直接跨国排序的欧洲健康面板」,HFA-DB 给不了。它给的是各国自己报的数,而各国的数在定义、覆盖与年份上都不齐。这种情况下更合适的是 OECD 卫生统计(成员国口径做过协调)或全球层面的估计库。
如果你的需求是「个体层面的临床或队列数据」,它更是完全给不了——这个库里没有一行个案,最小的统计单元是成员国的一年。
如果需求是「最新的疫情或实时监测数字」,也不合适。它的更新节奏是年度汇编加批量入库,最新值多半滞后一两年,实时性远不如各国疾控或欧洲疾控中心的周报。
§2 数据构成与规格
§2.1 三层结构:目录、长表、元数据
HFA-DB 的组织方式可以拆成三层,每层解决一类问题。
第一层是指标目录。八个一级分类,每个分类下挂若干指标,每个指标有稳定的代码(形如 HFA-080)、英文短名与全名、单位、数据来源、外部编号。这一层回答「有什么」。
第二层是观测长表。每一行是一次观测,用指标代码、国家、年份、性别定位,部分指标再加居住地与是否两个维度。这一层回答「值是多少」。
第三层是元数据与注释。指标层面有定义注释,国家层面有逐国的来源与口径备注。这一层回答「这个数可信到什么程度、有没有断点」。
三层的关系是:目录里的每一条都能在长表里找到对应行,长表里的每一行都能在注释里找到它的来路。缺了第三层,前两层就只是数字。
§2.2 主键与维度
一条观测由五到七个维度共同定位,取决于指标本身。以 §2.5 的 HFA-080 为例,它在核心四维之外不加任何维度;而供水覆盖类指标会额外挂上城乡维度,指标名里带「是否有」的会挂上一个是非维度。核心四维是固定的:
| 维度 | 代码 | 取值 | 说明 |
|---|---|---|---|
| 指标 | Measure code | HFA_1 至 HFA_640 之间的 618 条 |
稳定代码,跨年不变,但编号不连续 |
| 国家或组 | COUNTRY | 53 个成员国 + 4 个国以下单元 + 1 个历史实体 | 见 §2.4 |
| 年份 | YEAR | 1949 至 2050 | 逐指标不同,且有空档 |
| 性别 | SEX | ALL / MALE / FEMALE / 空 |
空值只出现在极少数指标上 |
另外两个可变维度只在特定指标里出现:
| 维度 | 代码 | 取值 | 出现场景 |
|---|---|---|---|
| 居住地 | PLACE_RESIDENCE | 空 / URBAN / RURAL / TOTAL |
供水、排污等环境类指标 |
| 是否 | YES_NO | 空 / YES / NO |
个别政策类指标 |
聚合组不在 COUNTRY 列里,而在接口的 COUNTRY_GRP 维度里。这一点在一次性导出的长表上会看不到——导出文件把组代码直接写进了 COUNTRY 列,与成员国混在一起。混用的后果见 §6.5。
还有一处不一致,值得单独记一笔:元数据工作簿的 Countries 表只有 53 行,接口 /api/v5/countries 返回 66 条,长表里却有 71 个代码。三个数都对,只是统计的是三种东西——53 是成员国,66 是接口认为「可以当地区引用」的全部记录(含部分国家组与属地表),71 是长表实际出现过的全部代码(含国以下单元与历史实体)。做国家层分析只认 53,其余两套数只在排查时用来定位漏了谁。
§2.3 规模量级
以下是可核验的量级:
| 项目 | 数值 | 口径 |
|---|---|---|
| 官方指标数 | 613 | 官方数据集页标注 |
| 接口可列出指标 | 618 | DW 接口 measures 列表中 HFA_ 前缀记录 |
| 差额 | 5 | 数据掩码为空、无观测值的占位项 |
| 一级分类 | 8 | 人口与社会经济、死亡、发病与住院、生活方式、环境、卫生资源、卫生利用与费用、生殖妇幼 |
| 成员国 | 53 | 官方国家组定义 WHO_EURO |
| 国家组 | 18 | 接口 COUNTRY_GRP 维度可选值 |
| 一次性导出长表行数 | 1,331,061 | 三个表格式分片合计 |
| 一次性导出压缩包 | 12.1 MB | 含 6 个 CSV 与 1 个元数据工作簿 |
| 长表年份跨度 | 1949 至 2050 | 逐行扫描的最早与最晚年份 |
| 单指标导出示例 | 119 KB | HFA_1 单指标 CSV 声明体积 |
| 元数据工作簿工作表 | 10 | README、清单、标签、国家、国家组、分类、注释等 |
613 与 618 的差不是版本错位,而是统计口径不同:页面只列有数据的指标,接口把五条空壳也列了出来。写文献时用 613,编排程序时用 618,两者不要互相校对。
另一个常被混淆的数是「8,000 多项指标」。那是数据仓库跨全部数据集的总量,HFA-DB 只占其中很小一块。真正与 HFA-DB 相邻的是欧洲死亡数据库,它有八百多条指标,与 HFA-DB 的死亡类指标大量重叠——同一个指标常常同时挂在两个数据集下,取数时按需挑一个即可。
§2.4 国家层的真实构成
长表里一共出现 71 个代码,但真正的国家只有 53 个。拆开看是这样:
| 类别 | 个数 | 例子 | 用法 |
|---|---|---|---|
| 成员国 | 53 | FRA、DEU、TUR |
可直接当国家用 |
| 国以下单元 | 4 | 比利时三区(BE-BRU 一类)、英国四构成国 |
只有在需要次国家分析时用 |
| 历史实体 | 1 | 塞尔维亚和黑山 | 2006 年之前的历史口径,不可与两国相加 |
| 国家组 | 18 | WHO_EURO、EU_MEMBERS、CIS |
是聚合值,不是国家 |
比利时与英国的国以下单元是个隐蔽的陷阱。能力列表里它们与成员国并列,名字也像国家;如果直接按「全部国家」求均值,比利时会被算四次、英国被算五次。接口层面这一点还好处理,因为国以下单元在 COUNTRY 维度里与 53 国共处一个列表,没有单独标记;导出文件层面则完全混在 COUNTRY 列里。
历史实体「塞尔维亚和黑山」同样需要留意。它存在的那几年有完整观测,解体之后的塞尔维亚与黑山又各自有观测。三者相加会重复计算人口,相减会得到负值。
§2.5 一个具体切片的核对
拿 HFA-080(晚期新生儿死亡,每千活产)来看,可以看到 HFA-DB 的典型形态:
- 指标名与定义注释在指标层,定义注释里还带着原始指标编码
E070103.T,说明它是从更早的编码体系迁过来的; - 单位在元数据里标为「每千活产」,数据类型标为比率;
- 数据从 1970 年开始,一直排到 2015 年,共 1,726 行;
- 国家维度覆盖 53 国,但没有一条国别注释。
最后一条值得一说。同为 1970 年起步的指标,HFA_1(年中人口)带着几十条国别注释,写着每国的人口来源机构与口径变更;HFA-080 一条都没有。这说明国别注释的完备程度与指标的重要性、争议程度相关,不是全库统一配置。用之前翻一眼有没有注释,比默认它有要稳妥。
§2.6 起止年份不是 1970,是一条分布
「1970 年起逐年」是流传最广的一条说法,也是错得最彻底的一条。
长表里最早的值出现在 1949 年,最晚到 2050 年。按指标统计起点,1968 年与 1970 年两个年份占了大头——死亡与人口类指标集中在这两年起步;1980 年、1990 年各有一批;1950 年代的起点主要来自世界卫生报告口径的婴儿死亡率与预期寿命估计。
按指标统计终点,情况分化更明显:约六成指标的数据排到 2024 年或更晚,但也有一百多项停在 2016 年及以前。停产的原因各不相同,有的是数据源不再提供,有的是指标定义被新框架取代。
这带来一个直接后果:不能假设「所有指标都覆盖同一个时间窗」。做面板时若以「最后一年」作为对齐点,会把一批停在 2015 年的指标整体丢掉,而不是如实反映它们的缺失。
| 起点年份 | 大致含义 | 典型指标 |
|---|---|---|
| 1949–1955 | 世界卫生报告口径的估计序列 | 婴儿死亡率、五岁前死亡概率(估计值) |
| 1960–1968 | 生命登记与死亡统计 | 粗死亡率、各年龄别死亡、预期寿命 |
| 1970 | 人口与社会经济变量 | 年中人口、城镇化率、GDP 人均 |
| 1980–1995 | 卫生资源、费用、生活方式 | 医生数、病床数、吸烟率、酒类消费 |
| 2000 以后 | 后加指标与 SDG 相关 | 健康预期寿命、肥胖率、结核治疗成功率 |
§2.7 八个分类各管什么
一级分类的名称与包含的指标数如下,这组数字与官方页面列出的八个目录一致:
| 分类 | 指标数 | 主要内容 |
|---|---|---|
| 死亡类指标 | 213 | 全死因与分死因、分年龄段、年龄标化死亡率 |
| 发病、残疾与出院 | 124 | 传染病发病、癌症发病与患病、精神障碍、住院出院 |
| 生活方式 | 22 | 吸烟、饮酒、膳食能量结构、体力活动 |
| 环境 | 18 | 供水、排污、居住密度、空气质量相关 |
| 卫生资源 | 64 | 医生、护士、助产士、药师、床位、毕业生数 |
| 卫生利用与费用 | 50 | 就诊次数、住院日、平均住院天数、各类费用占比 |
| 生殖、孕产与儿童健康 | 54 | 孕产妇死亡、分娩陪护、疫苗接种、母乳喂养 |
| 人口与社会经济 | 68 | 人口结构、预期寿命、教育、收入、就业 |
死亡类占了三成半,这是历史遗留:HFA 家族最初就是从死亡统计起步的。反过来说,如果研究主题是发病或卫生系统,能用的指标数量会明显少于死亡类,需要提前确认。
§2.8 与同类资源的定位差异
| 资源 | 覆盖范围 | 数值性质 | 时间深度 | 适用场景 |
|---|---|---|---|---|
| HFA-DB | 欧洲 53 国 | 成员国上报 | 最深,个别到 1949 | 欧洲纵向趋势、口径断裂研究 |
| 全球卫生观察库 | 全球 194 国 | 建模估计为主 | 1950 年代起 | 跨区域比较、全球监测 |
| OECD 卫生统计 | OECD 成员国 | 经协调的上报值 | 1960 年代起 | 发达国家卫生系统绩效 |
| 欧洲统计局卫生统计 | 欧盟及邻国 | 欧盟统一口径 | 1990 年代起 | 欧盟内部法规监测 |
| 欧洲死亡率数据库 | 欧洲部分国家 | 逐日死亡计数 | 1960 年代起 | 死亡率的短期波动与超额死亡 |
一句话的判断规则:要欧洲的深历史与上报原貌 → HFA-DB;要全球可比 → 全球估计库;要欧盟法规口径 → 欧洲统计局;要逐日死亡 → 欧洲死亡率数据库。
§3 指标目录层:编号、分类与命名
§3.1 编号体系与它的历史包袱
指标代码形如 HFA_ 加数字,从 1 排到 640,中间有 22 个号没有被使用。这不是随意跳号,而是早期用编号分区段、后来区段被合并留下的痕迹。
除了代码,每个指标还带一个外部编号,标注在元数据里。HFA-080 的外部编号是 1140,HFA_1 的外部编号是 0010 0011 0012 三个——因为 HFA_1 是按性别汇总的口径,对应原始库里男、女、合计三条记录。
这个细节说明了 HFA-DB 的演化路径:它不是一个从头设计的关系库,而是把一套更早的扁平指标表逐代迁移过来的。迁移留下了三类痕迹:编号不连续、汇总指标对应多条原始记录、部分指标名里嵌着旧编码。使用时的实践建议是只认 HFA_ 代码,不认外部编号,后者在不同版本的元数据里不稳定。
§3.2 命名里的四个缩写
指标名里随处可见四个缩写,官方在数据集注释里专门解释过,不认它们会看不懂指标:
| 缩写 | 全称 | 含义 |
|---|---|---|
| SDR | age-standardized death rate | 年龄标化死亡率,按欧洲标准人口加权 |
| FTE | full-time equivalent | 全时当量,用于折算医护人员工作量 |
| PP | physical persons | 实有人数,与 FTE 相对 |
| PPP$ | purchasing power parity dollar | 按购买力平价折算的美元 |
前两个最容易搞混。同一个「医生数」指标,按 FTE 和按 PP 会给出两个值,小国与兼职比例高的国家差距尤其大。做人力密度比较时必须先确认用的是哪一个,而确认方式就是看指标名里有没有这两个缩写。
§3.3 分类树与两套分类
库里其实有两套分类:一套是 HFA-DB classification,用于数据集的目录结构;另一套叫 HFA explorer,是前端的可视化分类。两套的顶级分类名大体相同,但指标的归属有出入。
对使用者的意义是:如果按分类去批量抓指标,抓到的集合会因用哪一套而不同。稳妥的做法是先按 HFA-DB classification 定稿一份指标清单,再按代码逐个取数,不要依赖分类树动态遍历。
§3.4 指标元数据有哪些字段
每个指标在接口里返回的元数据包含四组:单位与数据类型、数据来源、外部编号、数据集归属。
| 字段 | 示例值 | 用法 |
|---|---|---|
| UNIT_TYPE | deaths per 1000 live births |
单位,做量纲对齐时必需 |
| DATA_TYPE_REPRESENTATION | RATIO / COUNT / AVERAGE |
比率、计数或均值,决定能否相加 |
| DATA_SOURCE | HFA |
数据来源标签 |
| EXTERNID | 1140 |
原始库编号 |
| data_sets | HFA、CAH、HFAMDB |
同时属于哪几个数据集 |
最后一行容易被忽略:同一个指标可以同时属于多个数据集。HFA_1 就同时挂在 HFA-DB、儿童青少年健康数据集与欧洲死亡数据库三个数据集下。所以「HFA-DB 有 613 个指标」与「接口里 HFA_ 前缀有 618 条」说的不是一件事——后者是按代码前缀筛的,不是按数据集成员身份筛的。
§4 观测层:一行数据与它的注释
§4.1 一行长什么样
单指标导出文件的形态很朴素:前面是一段元数据,中间是表头,后面是数据行。
"COUNTRY","COUNTRY_GRP","SEX","YEAR","VALUE"
"ALB","","ALL","1970","2138000"
"ALB","","ALL","1971","2195600"
"ALB","","ALL","1972","2253200"
两处细节值得留意。第一,COUNTRY_GRP 这一列在成员国行上是空的,只有在国家组聚合行上才有值。第二,VALUE 是字符串而不是数值,因为有一部分值是区间或带标识的,不是纯数字。
§4.2 空值与缺行是两回事
这是使用时最常踩的一个坑:某国某年没有这一行,与某国某年这一行的值为空,含义不同。
没有行通常意味着「这一年该国没有上报,或这一年的数据源没有覆盖」;有行但值为空通常意味着「上报了但值不可得」。前者反映的是上报体系的状态,后者反映的是测度失败。做缺失分析时若把两者合并处理,会把两种性质完全不同的缺失混成一种。
实操上建议在加载阶段就生成一张缺失矩阵:行是指标-国家,列是年份,区分「无行」与「空值」两种状态。这张矩阵本身就是一份很有用的数据质量图——哪一年的整体覆盖率骤降,往往对应某个统计体系的重组。
§4.3 国家备注:藏在元数据里的断点清单
国别注释是这一层最有价值、也最容易被忽略的部分。
以 HFA_1 为例,克罗地亚的注释写明:1995 至 1996 年间,人口统计的基准从「法定人口」改为「实际居住人口」,1996 年的估计值因此受到影响。这类注释直接把一条看似平滑的序列打断,告诉使用者哪里不该连。
注释的形态是短句,混杂着来源机构名称、网址与口径说明,没有统一模板。这既是优点也是缺点:优点是不会被格式化抹掉细节,缺点是没法程序化解析,只能人工读。
§4.4 国家组的十八种切法
COUNTRY_GRP 有十八个可选值,覆盖了欧洲区常用的各种分组:
| 组代码 | 含义 | 用途 |
|---|---|---|
WHO_EURO |
整个欧洲区 53 国 | 区域汇总 |
EU_MEMBERS |
欧盟成员国 | 与欧盟口径对齐 |
EU_BEFORE_MAY2004 |
2004 年 5 月前入盟(EU15) | 老成员国对比 |
EU_AFTER_MAY2004 |
2004 年 5 月后入盟 | 新成员国对比 |
CIS |
独联体 | 后苏联空间 |
SEEHN |
东南欧卫生网络 | 巴尔干地区 |
CENTRAL_ASIA |
中亚 | 中亚五国 |
WESTERN_BALKANS |
西巴尔干 | 入盟候选国 |
NORDIC |
北欧 | 高福利模型样本 |
SMALL |
小国 | 人口规模对照组 |
欧盟的切割点被细化到「2004 年 5 月之前 / 之后 / 2020 年 2 月之前」,这反映的是欧盟扩容的时间线。用这些组做分析时要注意:组的成员是会变的,EU_BEFORE_FEB2020 这种命名本身就是一种时间切片,不能当作固定分组反复使用。
§4.5 同一年为什么不加总
一个自然的冲动是把 53 国加总得到「欧洲区合计」。这在本库里有现成的 WHO_EURO 组可以直接取,不必自己加。
自己加会出错的原因有三个:一是 VALUE 里混着比率与计数,比率不能加;二是组里的国家名单与 53 国名单不完全一致,成员国资格有历史变动;三是缺报国家在组聚合里被跳过,自己加则会得到偏低的合计。
所以经验规则是:要聚合就取组,不要自己算。
§2.5 那条晚期新生儿死亡指标在这一层也能看出门道:它的国家维度只列 53 国,没有国以下单元,说明这个指标从来不在次国家层面采集。反过来说,有国以下单元的指标,其「国家值」与「各区值」的关系也需要单独确认,它们未必是简单加总。
§5 工具层:三条取数路与它们的代价
这一层回答的是「怎么把它搬进自己的系统」,因此关心的是路径、参数、体积与失败模式,而不是指标含义。
§5.1 三条路的选择
HFA-DB 的取数路径有三条,彼此的数据源相同,适合的任务不同。
第一条是一次性全库导出,官方在数据集页提供「Download dataset」按钮,得到的是一个压缩包,内含六个分片的 CSV 与一个元数据工作簿。适合一次要做全库分析、或者需要离线存档的场景。代价是体积大、下载慢(本次取数时 12.1 MB 耗时接近九分钟)。
第二条是单指标导出,每个指标页有「Export to」按钮,可以选 CSV 或 XLSX,接口在后台生成一个临时下载链接。适合只关心一两个指标的场景。代价是每个指标要单独走一趟。
第三条是Data Warehouse 接口,直接按指标代码取 JSON 或 CSV。适合写进自动化管线。代价是接口的参数校验很严格,写错一个参数就返回 400。
§5.2 接口形态:不是 OData
这一点必须说清楚:WHO 欧洲区的接口是自建的 REST 接口,路径形如 /api/v5/CONTROLLER[/CODE],响应是 JSON 或 CSV,不是 OData。它没有 $filter、$select、$top 这些 OData 参数,也没有 OData 的元数据文档。
把全球层面的 OData 用法套过来会直接失败。正确的做法是记住三个端点:
| 端点 | 作用 | 返回 |
|---|---|---|
/api/v5/measures |
列出全部指标(跨数据集) | 2,668 条 |
/api/v5/measures/HFA_80 |
单个指标的完整内容 | 元数据 + 全部观测 |
/api/v5/categories/A01 |
某个分类下的指标与子类 | 指标清单 |
/api/v5/data_sets/HFA |
HFA 数据集本身 | 数据集元信息 |
/api/v5/export/HFA_80?lang=EN&format=csv |
单指标导出 | 临时下载链接 |
接口文档页写的是「超过 8,000 个指标」,那是整个数据仓库跨全部数据集的总数,不是 HFA-DB 的指标数。两者差了一个数量级,引用时要分清。
§5.3 全库导出的两种切法
一次性导出包里有两套 CSV,内容相同、形态不同,读懂它们的差别比读懂字段更重要。
表格式(HFA Data (table))是标准长表:每一行一次观测,七列,适合直接导入数据库或做透视前的原料。三个分片合计 133 万行。
透视式(HFA Data (pivoted))把年份摊成了列:每一行是「指标-性别-国家」,后面从 1949 到 2050 一年一列,共一百多列。适合直接看趋势或画图。
| 对比项 | 表格式 | 透视式 |
|---|---|---|
| 行数 | 约 133 万 | 约 4 万 |
| 年份表达 | 一行一年 | 一列一年 |
| 缺失表达 | 无行 | 空单元格 |
| 适合 | 入库、统计、面板回归 | 目视、画图、快速核对 |
| 风险 | 分片边界可能切断同一指标 | 列数极多,部分工具读不全 |
透视式有一个隐藏的好处:它把缺失显式化了。长表里「没有这一行」与透视式里「这一格是空的」含义不完全相同,对照两份文件就能定位到哪些是真正的缺行、哪些是空值。
§5.4 元数据工作簿里有什么
压缩包里的 HFA Metadata.xlsx 是一份常被丢掉的宝藏,十个工作表分别对应:
| 工作表 | 内容 | 行数 |
|---|---|---|
| README | 每个文件的说明 | 27 |
| Content files | 每个分片含哪些指标 | 230 |
| Measure list | 每个指标的单位、来源、数据集归属 | 618 |
| Labels | 指标的短名与别名 | 716 |
| Countries | 国家代码、ISO2、ISO3、WHO 代码 | 53 |
| Country groups | 18 个国家组的定义 | 18 |
| Country groups mapping | 国家与组的对应矩阵 | 54 |
| Classifications | 指标到分类的对应 | 618 |
| Measure notes | 指标定义 + 逐国注释 | 9,240 |
| Dataset notes | 数据集级说明 | 2 |
其中 Measure notes 的 9,240 行是全库最有信息量的部分。它把指标定义与国别注释放在同一张表里,用国家代码列区分:国家代码为空的行是指标定义,非空的行是国别注释,两者的数量比大约是「一条定义对十几条注释」。想批量筛出「有口径断点」的指标,从这张表入手最快。
Labels 表值得单独提一句:它的行数多于指标数,因为同一个指标在不同时期、不同前端语境下有一到多个别名。做关键词检索时用别名表比用官方短名更宽,命中的机会更多;做正式引用时则只能用短名,别名不可入文。
§5.5 一个最小可运行示例
下面这段代码用标准库从接口拉一个指标,按国家汇总覆盖年份,并检查是否有重复键。不需要任何第三方包。
#-- 从 DW 接口取单指标,检查覆盖与主键唯一性
import json, urllib.request
from collections import Counter, defaultdict
URL = "https://dw.euro.who.int/api/v5/measures/HFA_80"
with urllib.request.urlopen(URL, timeout=120) as r:
d = json.loads(r.read())
rows = d["data"]
key = lambda x: (x["dimensions"]["COUNTRY"], x["dimensions"]["COUNTRY_GRP"],
x["dimensions"]["SEX"], x["dimensions"]["YEAR"])
dup = [k for k, c in Counter(key(x) for x in rows).items() if c > 1]
print("观测行", len(rows), "重复键", len(dup))
span = defaultdict(list)
for x in rows:
dim = x["dimensions"]
if dim["COUNTRY"] and not dim["COUNTRY_GRP"]:
span[dim["COUNTRY"]].append(int(dim["YEAR"]))
print("有数据的国家", len(span))
print("年份跨度", min(min(v) for v in span.values()), max(max(v) for v in span.values()))
这段代码做三件事:算观测行数、验键唯一、看国家覆盖。第三项尤其值得跑,因为「指标覆盖 53 国」是能力声明,不是每一年的实际覆盖。
§5.6 常见返回码与处置
| 症状 | 原因 | 处置 |
|---|---|---|
| 301 且无 Location | 用了 http 访问,被网关重定向 | 改 https |
| 400 invalid parameter: format | format 参数加在了不该加的端点 |
只在 export 与 measures 列表端点用 |
| 400 invalid parameter: dataset_code | 该参数不存在 | 用 data_sets 端点代替 |
| 404 | 端点名拼错(如 datasets 而非 data_sets) |
按文档写 data_sets |
| 200 但 bytes=0 | api/v5 根路径本身不返回内容 |
必须指定控制器 |
| 下载中途超时 | 大文件不支持断点续传 | 允许更长超时,一次下完 |
§6 AI 就绪指南
§6.1 一条最短的取数管线
从零到可用,最短的路径是四步:定指标清单、取全库导出、按长表入库、挂注释。
#-- 第一步:列出全部指标,筛出 HFA 数据集成员
curl -sSL "https://dw.euro.who.int/api/v5/measures" -o measures.json
python3 -c "
import json
d = json.load(open('measures.json'))
hfa = [x for x in d if x['code'].startswith('HFA_') and x['data_mask'] is not None]
print(len(hfa))
"
#-- 第二步:向数据集导出端点申请一次性导出,下载链接写进 manifest.json
curl -sSL "https://dw.euro.who.int/api/v5/export_data_set/HFA" -o manifest.json
python3 -c "
import json; m = json.load(open('manifest.json')); print(m['download_url'], m['file_size_kb'], 'KB')
"
#-- 第三步:从 manifest 取链接下载并解压(大文件请给足超时)
python3 -c "
import json, urllib.request
url = json.load(open('manifest.json'))['download_url']
urllib.request.urlretrieve(url, 'hfa.zip')
"
unzip -o -q hfa.zip -d hfa/
#-- 第四步:按长表入库,先只留国家行
python3 -c "
import csv, glob
rows = []
for p in sorted(glob.glob('hfa/HFA Data (table) part *.csv')):
with open(p, encoding='utf-8-sig') as fh:
r = csv.reader(fh); next(r)
rows += [x for x in r if x[4] and x[4].isupper() and len(x[4]) == 3]
print('国家行', len(rows))
"
第二步给出的链接是临时地址,不能硬编码进脚本,必须在运行时取。
§6.2 把指标元数据挂上去
单有数值没有单位,做不了任何跨指标的量纲对齐。元数据工作簿的 Measure list 表正好补这一块:它给出每个指标的单位码与数据类型。
正确的做法是在入库时把这两列一并载入,形成一张指标维表:
| 指标代码 | 单位码 | 数据类型 | 能否相加 |
|---|---|---|---|
HFA_1 |
NUM_PERS |
COUNT | 能 |
| HFA-080 | DTH_1000LBRTH |
RATIO | 不能 |
HFA_565 |
PCT_GDP |
RATIO | 不能 |
第三列「能否相加」不是官方字段,但是使用前的必要判断。按数据类型判断:COUNT 可加,RATIO 与 AVERAGE 不可加。这一条判断能挡掉大多数「把欧洲区死亡率加总」的错误。
§6.3 逐年缺失矩阵
在训练或做面板回归之前,先画一张缺失矩阵。它的做法很简单:行是指标 × 国家,列是年份,格子里填有无观测。以 §2.5 那条停在 2015 年的晚期新生儿死亡指标为例,它的矩阵只有左侧一半有格子,右边十几列全空——这条指标的可用区间就这么被框住了。
#-- 生成覆盖矩阵:每个指标-国家组合覆盖了哪些年份
import csv, glob
from collections import defaultdict
cover = defaultdict(set)
for p in sorted(glob.glob('hfa/HFA Data (table) part *.csv')):
with open(p, encoding='utf-8-sig') as fh:
r = csv.reader(fh); next(r)
for m, s, pr, yn, c, y, v in r:
if len(c) == 3 and c.isupper() and y:
cover[(m, c)].add(int(y))
years = range(1970, 2026)
for (m, c), ys in sorted(cover.items())[:5]:
print(m, c, sum(1 for y in years if y in ys), '/', len(years))
真实用途不是打印前五行,而是按年份求覆盖率:某一年整体覆盖骤降,几乎总能追溯到一次上报体系的重组。这类信息在正文注释里查不到,只能从矩阵里看出来。
§6.4 国家组与成员国的分流
训练数据里最不该出现的事故是把聚合行当成国家行。导出的长表把组代码写进了同名的 COUNTRY 列,靠长度区分不了(CIS 也是三个字符)。
可靠的判据是查名单,而不是猜字符串:
#-- 用 53 国名单判定哪些代码是真国家,其余一律按聚合或次国家处理
import csv
seats = set()
with open('countries.csv', encoding='utf-8-sig') as fh:
for row in csv.DictReader(fh):
seats.add(row['Code'])
print(len(seats))
def is_country(code):
return code in seats
countries.csv 是从元数据工作簿的 Countries 表另存出来的,53 行。判定只剩两条路:在名单里,或者不在。不在的一律不进国家层,否则均值与总数都会偏。
§6.5 坑点清单
以下是实际取数时踩到的,按先后顺序排列。
坑点 1:全库导出下载极慢。 症状是 curl 在 12 MB 上传了几个分钟仍未结束。原因是导出服务带宽有限且不支持断点续传(试过 -C -,返回「服务器不支持字节范围」)。解法是给足超时、一次下完,别指望挂了再续。
坑点 2:format=json 不是万能参数。 加在 /api/v5/measures 上会返回 400,加在 /api/v5/export/HFA_80 上才是对的。原因见 §5.6。解法是记住只有列表端点与导出端点接受它。
坑点 3:datasets 与 data_sets 差一个下划线。 前者 404,后者才通。这类拼写差异在文档里不明显,只能试。
坑点 4:能力列表比长表短。 接口 /api/v5/countries 返回 66 条,长表里有 71 个代码。差的是 18 个国家组里的 13 个没有进能力列表,以及几个历史代码。要完整名单,从长表扫,不要从能力接口取。
坑点 5:国别注释不是每条指标都有。 HFA_1 有几十条,HFA-080 一条都没有。默认为「有注释」会让口径核查落空。
坑点 6:透视式 CSV 的列数会撑爆某些工具。 一百多列年份,部分表格软件与轻量解析器会截断。解法是优先用表格式,透视式只作目视核对。
坑点 7:指标名里的缩写不是装饰。 把 FTE 当成实有人数会比较出一套错误的密度。解法是先读 §3.2 的四行表。
§6.6 一个容易被忽略的校验
入库之后,至少跑一次「同一指标在接口与导出包里的行数是否对得上」的校验。接口返回的是 JSON,导出包是 CSV,两者的分片与排序不同,但行数应当一致。
不一致的来源有三类:一是导出包在生成时刻的切片与接口实时查询之间有延迟;二是接口默认只返回部分维度组合;三是导出包把国别注释与数据行混编(个别指标会出现)。第一类只能靠记录时间点解决,第二类要显式指定维度,第三类需要按表头对齐而不是按行数对齐。
#-- 同一指标在两个来源里的行数核对
import csv, json, urllib.request
with urllib.request.urlopen("https://dw.euro.who.int/api/v5/measures/HFA_80", timeout=120) as r:
api_rows = len(json.loads(r.read())["data"])
csv_rows = 0
for p in ["hfa/HFA Data (table) part 1.csv"]:
with open(p, encoding='utf-8-sig') as fh:
r = csv.reader(fh); next(r)
csv_rows = sum(1 for row in r if row[0] == "HFA_80")
print(api_rows, csv_rows)
这段代码的用途不是抓出审计结论,而是确认自己面对的是哪个切片。以 HFA-080 为例,接口与导出包两边都是 1,726 行,说明两个来源在这个指标上一致;若哪天不相等,先别改文件,先确认导出包的生成时间。
§6.7 模型侧的三条建议
第一条,不要把 HFA-DB 当训练标签源。它的值是各国的实际上报,受口径与统计能力影响,不是「真实健康水平」的测量。用它做监督标签,模型学到的是各国的统计体系特征。
第二条,适合当协变量与背景变量。做欧洲地区的时序预测或政策评估时,HFA-DB 提供的人口结构、卫生资源、费用占比是很好的解释变量,而且时间深度优于多数同类来源。
第三条,跨库拼接时要标注来源。把 HFA-DB 的上报值与全球估计库的估计值拼成一条序列,是可做但必须显式标注的事——两者的系统偏差不是噪声,是结构性的。
§6.8 评估与对账
如果要用它评估别的数据源,对账的锚点建议选「粗死亡率」与「出生时预期寿命」这两个指标。理由有三:几乎所有国家都有、时间跨度最长、定义相对最稳定。
对账时要注意方向:HFA-DB 是上报值,全球层面的估计值通常会把它平滑掉一部分年际波动。如果两条序列的年际波动幅度差异很大,不一定是哪一方错了,而是估计方法在做平滑。
§7 质量、边界与已知问题
§7.1 阅读本节前需要知道的一件事
评价 HFA-DB 时最容易发生的错位,是拿「开放数据集」的标尺去量它——问它有没有版本号、有没有固定的下载链接、有没有数据字典、有没有单元测试。
它是一套行政统计汇编,不是数据产品。它的更新由成员国的上报节奏驱动,它的口径由各国的统计法决定,它的注释由区域办事处的技术人员手工维护。这些特征在数据产品的标尺下全是减分项,在行政统计的语境下却是正常形态。
所以本节不做「打分」,只列出使用时会真实撞上的边界。
§7.2 三条硬边界
第一条:口径不可跨国协调。 同一个指标名,各国报的内容可能不同。克罗地亚的人口基准换过一次,塞浦路斯的覆盖范围只算政府控制区,这类注释散落在元数据里,无法自动对齐。
第二条:时间不可假设同质。 一千多项指标里,约两成的数据停在 2016 年及以前。把这些指标与排到 2024 年的指标混在一个面板里,会把「停产」读成「最近没有变化」。
第三条:聚合层不可与明细层混算。 18 个国家组的值是官方算好的,与成员国行放在同一张表里。混用会重复计算。
§7.3 上报偏差的结构
上报数据的偏差不是随机的,它有明确的结构。
第一个结构是统计能力。生命登记完整的国家,死亡类指标几乎年年有;登记薄弱的国家,同一指标会缺好几年。缺报本身与健康水平相关,所以「对缺失做简单插补」会系统性地低估问题。
第二个结构是口径变更。东欧与中亚国家在 1990 年代前后经历了统计体系重建,编码版本、人口基准、行政区划都变过。HFA-DB 的国家注释记录了一部分,但不完整。§2.5 那条晚期新生儿死亡指标正好落在这个区间的尾部——它从 1970 排到 2015,中间跨越了这批国家的两次编码换版,而它一条国别注释都没有。这类指标要格外小心:序列看上去完整,断点在哪儿得自己去查各国当年的统计年鉴。
第三个结构是分母问题。多数率型指标的分母是年中人口,而年中人口本身在这一库里就是一条指标(HFA_1),它有自己的缺报与修订。分母换了,率就跟着变。
§7.4 泛化边界
用 HFA-DB 训练或评估的模型,泛化范围基本被两条线框住。
空间上,它只覆盖欧洲区 53 国,且其中小国(安道尔、摩纳哥、圣马力诺、卢森堡)的样本极少。把这套模型用到非洲或东南亚,指标名对得上,口径对不上。
时间上,1970 年之前的样本很薄,2050 年之后的值是人口预测不是观测。模型的可用区间大致是 1970 至 2024。
指标上,死亡类占了三分之一以上,发病与生活方式类稀疏。按指标分布训练的模型,天然偏向死亡率。
§7.5 伦理与公平
这个库不含任何个体数据,不存在重识别风险。但它在使用层面仍有公平问题。
一是小国被稀释。安道尔、摩纳哥这类国家的数据点很少,在按国家加权的统计里几乎不起作用,结论实际上只反映大国。
二是缺报国家被隐形排除。缺报多的国家在完整案例分析里被删掉,而这些国家往往正是卫生系统最需要被关注的那批。
三是指标选择本身带立场。以死亡率为核心的指标体系,会把资源向「死亡可测」的领域倾斜,而慢性病负担、心理健康、就医可及性这些难以量化的问题,在库里权重偏低。
§7.6 DAIMS 二十项检查
下面按 DAIMS 的关切维度逐项检查,结论用于判断它能否进入自动化管线。
| 维度 | 结论 | 依据 |
|---|---|---|
| 目的与范围 | 明确 | 官方页面写明用于 Health 2020 与 SDG 监测 |
| 数据来源 | 可追溯 | 指标层有来源标签,国家层有来源注释 |
| 采集方法 | 部分公开 | 汇总层说明,逐指标方法散在定义注释里 |
| 更新频率 | 年度 | 数据集页标注最近更新日期 |
| 版本标识 | 弱 | 无正式版本号,只有更新日期与数据戳 |
| 变更记录 | 弱 | 无变更日志,只有元数据时间戳 |
| 单位与量纲 | 强 | 每指标有单位码与数据类型 |
| 缺失标注 | 中 | 缺行与空值可区分,但无统一的缺失原因码 |
| 覆盖完整性 | 中 | 53 国全覆盖,但逐指标年份不齐 |
| 国家标识 | 强 | 提供 ISO2、ISO3 与 WHO 三套代码 |
| 聚合标识 | 中 | 组代码存在,但与国家混列 |
| 次国家标识 | 弱 | 仅比利时与英国有,且无统一层级 |
| 文档完备度 | 中高 | 元数据工作簿详尽,但无成册的方法手册随数据发布 |
| 接口稳定性 | 中 | v5 接口在用,历史版本未留档 |
| 批量获取 | 强 | 一次性导出与单指标导出并存 |
| 机器可读性 | 强 | 长表与 JSON 均为标准结构 |
| 许可清晰度 | 中 | 有版权声明与共享许可,但需查阅条款 |
| 引用规范 | 强 | 官方给出引用格式 |
| 可重复性 | 中 | 临时下载链接,需自行存档快照 |
| 互操作性 | 中高 | 代码体系与主流卫生统计可对接 |
二十项里最弱的是版本管理四项。这不是疏忽,而是行政统计库的通病:数据被就地覆盖,历史版本不公开留存。对使用的直接影响是,任何结论都必须连同取数日期一起记录。
§7.7 同一指标的不同来源差多少
不上审计,只给一个方向性结论:差距最大的是婴儿死亡率与预期寿命这一类,其次是卫生费用占比,最小的是粗死亡率与人口数。
这个排序有原因。粗死亡率与人口数依靠生命登记与人口登记,各国都有强制流程,差异主要来自分母;婴儿死亡率依赖围产期死亡的判定标准与登记完整度,各国差异极大;卫生费用则受统计边界(政府支出是否含社保)影响。
§7.8 外部验证的落点
如果有独立的对照来源,最值得核的四处是:
| 核对项 | 对照来源 | 预期差异 |
|---|---|---|
| 粗死亡率 | 欧洲死亡率数据库的逐日死亡汇总 | 应高度一致,差异反映分母口径 |
| 出生时预期寿命 | 各国官方生命表 | 应一致,差异反映修表时间 |
| 婴儿死亡率 | 全球层面的估计值 | 可能差两三倍,属正常 |
| 卫生费用占 GDP | OECD 卫生统计 | 老成员国应接近,新成员国差异较大 |
最后一行是重点。跨国卫生费用统计的口径分歧极大,HFA-DB 与 OECD 的差异往往不是错误,而是「政府卫生支出」是否含社保基金这类定义问题。
反过来看第三行:预期差异最大的婴儿死亡率类指标,恰恰是缺注释最普遍的那一批。§2.5 举的 HFA-080 就是一个例子——既没有国别注释,又正好是跨国差异最大的指标类型。这类指标跨库对账时,差三倍不必惊慌,先确认两边用的是不是同一个死亡判定标准。
§8 生态位置、版本史与可持续性
本节回答三个问题:这个库怎么活到今天的、它经历了几次形态变化、以及它现在的更新到底动的是哪一部分。
§8.1 它为何能持续
这个问题值得认真回答,因为这个库看起来「没什么技术含量」——就是一张张国家上报的表。
它持续的原因不在技术,在制度。官方页面把它的出身写得很清楚:自 1980 年代中期起,欧洲区成员国就开始向 Health for All 家族报送核心卫生统计。也就是说,这套上报机制先于任何一个网页存在,数据库只是把已有的行政流程数字化。
第二个原因是政策绑定。它承载的是欧洲区监测框架的指标集,框架换了一茬(Health 2020 接续为欧洲工作规划),指标会调整,但「需要一套区域内的统一监测数」这个需求没有变。
第三个原因是它与全球层面的库有分工。全球层面的库要照顾 194 国,必须以建模估计为主;区域层面的库可以只做 53 国,从而保留上报原貌。这个分工让 HFA-DB 有了不可替代的位置——它是「欧洲区自己认的那份数」。
§8.2 版本史的关键节点
| 时期 | 变化 | 影响 |
|---|---|---|
| 1980 年代中期 | 成员国开始报送 Health for All 核心统计 | 制度起点 |
| 1990 年代 | 逐国扩展指标,东欧国家加入 | 覆盖从西欧扩到全区域 |
| 2000 年代 | 网页化,出现可下载的扁平文件 | 从纸质汇编转向电子 |
| 2010 年代 | Health 2020 框架确立,指标扩充 | 加入健康预期寿命等新指标 |
| 2016 年 | European Health Information Gateway 上线 | 统一入口,双语 |
| 2020 年代 | 数据仓库重构为 v5 接口 | 旧接口停用,新接口路径变化 |
| 2026 年 | 数据集页标注 613 指标、按年更新 | 现状 |
版本史里最需要注意的是 2020 年代的接口重构。旧脚本里常见的 data.euro.who.int 域名已经不通,新域名是 dw.euro.who.int,路径也从旧版改为 /api/v5/。这个断点是很多旧代码跑不通的直接原因。
§8.3 与门户的关系
有一件事必须说清:HFA-DB 没有被并入某个新门户后消失,它现在是 European Health Information Gateway 下的一个数据集页面。
这个门户 2016 年上线,定位是「一站式的欧洲卫生信息商店」,把区域办事处维护的多个库放在同一入口下。HFA-DB 是其中最早、最大的一个。门户本身也提供 Indicators Explorer 可视化工具,底层走的就是同一个数据仓库。
所以「HFA-DB 还在不在」这个问题,答案是:在,而且用的是同一套后台。变化的是外壳,不是数据。
§8.4 与全球层面的库是什么关系
两者的指标有重叠,但不是同一份数据。
全球层面的指标库里,预期寿命、婴儿死亡率、结核发病率这些指标确实存在,且覆盖欧洲国家。但它们的来源多为国际机构的估计与建模,年份覆盖也按全球统一口径裁剪。
HFA-DB 的对应指标来自成员国上报,年份可以追到更早,且带国别注释说明断点。
所以关系不是「子集」或「超集」,而是「同一现象的两条独立测量」。这也回答了另一个常见问题:HFA-DB 的指标是否已全部并入全球库——没有,而且即使有同名指标,数值也不同。
§8.5 更新节奏与真实性核验
数据集页标注的更新时间是 2026 年 10 月 24 日,指标数是 613。接口里每个指标都带三个时间戳:数据更新、元数据更新、注释更新。
抽查结果表明这个库是活跃的:HFA_1 的数据戳是 2026 年 10 月 23 日,HFA-080 的元数据戳是 2026 年 10 月 22 日。注释更新更早,多在 2020 年前后——这符合预期,定义注释本来就很少改。
结论:它不是停更的旧库。但它也不是高频更新的库,年度节奏加批量入库,最新值通常滞后一到两年。
这一点用 §2.5 那条晚期新生儿死亡指标反证最清楚:它的数据戳同样在 2026 年 10 月,但序列在 2015 年就断了。也就是说,整库「活跃」不等于「每一项都在长」——更新的是入库动作,不是每一项的内容。判断某个指标还能不能用,得看它自己那条序列的末尾,而不是看数据集页的日期。
§9 使用指引与引用
§9.1 三种角色的最短路径
| 角色 | 第一步 | 第二步 | 第三步 |
|---|---|---|---|
| 政策研究者 | 打开数据集页看八个分类 | 取一次性导出,用表格式长表 | 读 Measure notes 里的国别注释 |
| 数据分析师 | 取 measures 列表定指标清单 | 用单指标接口按需取 | 挂上单位与数据类型做量纲对齐 |
| 建模工程师 | 取全库导出做离线快照 | 生成缺失矩阵定位掉档年份 | 按数据类型判断可否聚合 |
三种角色的共同点是都要先做一件事:确认自己用的是上报值还是估计值。这条判断在上游做对了,下游所有环节都省事。
§9.2 引用写法
官方给出的引用格式是「数据库名 + 机构 + 发布年月 + 访问日期」。落到实践中,建议写成四要素齐全的形式:
WHO Regional Office for Europe. European Health for All database (HFA-DB).
WHO Regional Office for Europe, Copenhagen, Denmark. Data updated 2026-10-24.
https://gateway.euro.who.int/en/datasets/european-health-for-all-database/, accessed 2026-10-29.
关键在于必须写明访问日期。因为这个库就地更新、不留历史版本,不写日期的话,别人复现会拿到不同的数。
如果引用的是单个指标,还要补上指标代码,例如 HFA-080。代码是唯一稳定的标识,指标名在不同时期改过。
§9.3 再分发的注意事项
这个库的单指标导出文件末尾写着 WHO 欧洲区办事处的版权年份,同时门户提供数据共享许可。两处声明并存,意味着不能简单当作署名即用的开放许可处理。
实际做法是:内部研究与教学使用基本不受限;对外发布衍生数据集或商业产品前,须先读官方数据共享许可条款,必要时联系区域办事处数据团队。区域内公开的图表与摘要,按官方引用格式署名通常足够。
§9.4 快照与复现
因为库里没有正式版本号,也没有历史版本留档,做可复现研究只剩一条路:自己留快照。
最小的快照方案是三项:导出包的完整副本、导出时返回的清单文件、一份写明取数日期与指标数的说明。清单文件里带生成时间与文件大小,正好补上库里缺失的版本标识。
| 快照内容 | 作用 | 体积 |
|---|---|---|
| 导出压缩包 | 保存当时全部数值 | 12 MB 量级 |
| 清单文件 | 记录生成时间与体积,充当版本号 | 不到 1 KB |
| 指标清单 | 记录当时有哪些指标、各叫什么 | 数百 KB |
| 取数说明 | 记录日期、接口路径与筛选条件 | 手写 |
如果只是复现一两个指标,单指标导出的 CSV 本身就是最好的快照——它把元数据、表头与数据打在一个文件里,三年后打开仍然能看懂。
§9.5 与其他库的组合方式
三个库的分工可以这样记:
| 库 | 管什么 | 什么时候用 |
|---|---|---|
| HFA-DB | 欧洲区成员国的上报值,纵向最长 | 欧洲内部历史趋势、口径断裂、政策监测 |
| 全球估计库 | 全球 194 国的建模估计,横向最全 | 跨区域比较、全球监测、缺报国填补 |
| 欧洲统计口径库 | 欧盟法规口径的协调值 | 欧盟内部法定报送、与 Eurostat 口径对齐 |
判断规则是一条线:纵向要深去上报库,横向要全去估计库,法规要对齐去统计口径库。
§10 AI 使用声明
| 项目 | 内容 |
|---|---|
| 性质 | 行政统计汇编,区域办事处的成员国上报数据库 |
| 主要用途 | 欧洲卫生趋势分析、政策监测、面板回归的协变量 |
| 不建议用途 | 作为个体级标签、作为全球比较的唯一来源、作为实时监测 |
| 训练数据适用性 | 适合做背景变量与协变量;不适合做健康结果标签 |
| 伦理提示 | 缺报与小国样本偏差需显式说明 |
| 引用要求 | 机构名 + 库名 + 更新日期 + 访问日期 + 指标代码 |
| 版本注意 | 无正式版本号,就地更新,须自行存档快照 |
| 状态 | published |
常见误读
| 常见说法 | 实际情况 | 证据 |
|---|---|---|
| 「HFA-DB 已经停止维护了」 | 仍在年度更新,数据集页 2026 年 10 月 24 日更新 | 数据集页标注 |
| 「数据从 1970 年起」 | 起点逐指标不同,最早 1949,最晚的起点在 2000 年以后 | 长表扫描 |
| 「53 国,一年一行」 | 53 国之外还有次国家单元与历史实体,多数指标还有性别拆分 | 长表国家代码与性别分布 |
| 「它已被全球层面的库取代」 | 指标有重叠但数值不同,来源不同 | 方法与来源标注 |
| 「数据接口是 OData」 | 自建 REST v5,无 OData 参数 | 接口文档 |
| 「600 多项指标」作为精确数 | 613 项有数据,接口里另有 5 条空壳 | 页面与接口差额 |
| 「可以按国家加总得到欧洲区」 | 有现成国家组,自己加会重复计算 | 国家组成员名单 |
| 「口径已经做过跨国协调」 | 部分指标有协调,多数仍保留各国定义 | 国别注释 |
| 「下载很快」 | 12 MB 导出耗时数分钟且不支持续传 | 取数记录 |
| 「可以拿去和全球估计值直接拼」 | 上报值与估计值是两条测量,不能无缝拼 | 两者来源差异 |
附录 A:指标目录分层
| 分类代码 | 名称 | 指标数 | 时间特征 |
|---|---|---|---|
| A00 | 人口与社会经济 | 68 | 1961 起为主,含 2050 预测 |
| A01 | 死亡类 | 213 | 1968–1970 起为主 |
| A02 | 发病、残疾与出院 | 124 | 1990 起为主 |
| A03 | 生活方式 | 22 | 1970–1990 起均有 |
| A04 | 环境 | 18 | 1990 起为主 |
| A05 | 卫生资源 | 64 | 1970 起为主 |
| A06 | 卫生利用与费用 | 50 | 1970 起为主 |
| A07 | 生殖、孕产与儿童健康 | 54 | 1970 起为主 |
附录 B:维度与主键
下表是入库时需要对齐的七个维度,任何一行观测都落在这张表里。
| 维度 | 是否必填 | 取值数 | 备注 |
|---|---|---|---|
| Measure code | 必填 | 618 | 五位数,不连续 |
| COUNTRY | 必填 | 71(含组) | 53 国 + 4 次国家 + 1 历史 + 13 组 |
| COUNTRY_GRP | 条件必填 | 18 | 仅组行为非空 |
| SEX | 通常必填 | 4 | 含空值 |
| YEAR | 必填 | 82 个不同值 | 1949–2050 |
| PLACE_RESIDENCE | 极少 | 4 | 城乡类指标 |
| YES_NO | 极少 | 3 | 政策类指标 |
附录 C:术语表
下表只收在读这个库的文档与注释时会卡住的词。像「发病率」「患病率」这类通用流行病学术语不在其中,它们在教科书里定义得更清楚。
| 术语 | 含义 |
|---|---|
| HFA-DB | European Health for All database,欧洲健康全民数据库 |
| Health for All 家族 | 区域办事处围绕同一套上报机制的一组库 |
| 上报值 | 成员国统计机构直接提供,未经国际机构调平 |
| 估计值 | 国际机构用模型补齐后的值 |
| 年龄标化死亡率 | 按标准人口结构加权后的死亡率 |
| 全时当量 | 把兼职折算为全职的人力计量口径 |
| 门户口径 | 卫生费用的统计边界定义,各国不同 |
| 国别注释 | 元数据里逐国说明来源与断点的短文本 |
| 国家组 | 官方预定义的聚合,如欧盟、独联体 |
| 数据掩码 | 接口里控制数值输出格式的字段 |
| 长表 | 一行一次观测的扁平结构 |
| 透视式 | 年份摊成列的结构 |
| 数据仓库 | 支撑门户的后台系统,接口路径中的 dw |
| 监测框架 | 政策目标对应的指标集 |
| 覆盖区 | 某些国家指标只覆盖部分领土,如塞浦路斯 |
| 地区编码 | ISO 三字母国家代码 |
| 历史实体 | 已解体的政区,数据保留但不可与现国相加 |
| 统计口径断裂 | 因定义或基准改变导致的序列不连续 |
| 年末修订 | 统计机构在次年对上年数据的回溯调整 |
附录 D:常见误读 FAQ
Q1:它和全球层面的卫生观察库是同一份数据吗?
不是。同名指标在两处的数值经常不同,因为一处是成员国上报,另一处是国际机构估计。
Q2:为什么有些指标停在 2015 年?
数据源不再提供或指标被新框架取代。停产不等于数据错误,只代表不再更新。
Q3:能不能用来做欧洲区的健康排名?
可以做,但要声明用的是上报值。口径差异会让排名在小国与转型国家上失真。
Q4:国家组的值是各国相加得到的吗?
由官方计算,算法随组而定,部分组用人口加权平均,部分用算术平均。自己加不等于官方值。
Q5:为什么接口里的指标比页面多五条?
接口把五条没有观测值的占位项也列了出来。写引用时用页面的 613。
Q6:下载链接可以写进脚本吗?
不行。导出链接是临时生成的,必须每次运行时申请。
Q7:国别注释看不懂怎么办?
它们是短句加来源网址,没有统一模板。遇到写「有断点」的,去查该国统计机构当年的报告。
Q8:能不能把它和欧洲统计局的数混用?
可以混用,但要标注来源。两者的口径差异在欧洲统计局有专门的对齐文件。
Q9:数据里的空值和缺行一样吗?
不一样。缺行是没报,空值是报了但不可得。做缺失分析时要分开统计。
Q10:这个库会一直存在吗?
目前活跃更新。但它是行政统计库,去向取决于区域办事处的政策,不宜当作永久依赖,建议自行存档快照。
附录 E:使用与再分发注意事项
| 事项 | 要求 |
|---|---|
| 署名 | WHO 欧洲区办事处 + 库名 |
| 更新日期 | 必须写明数据更新日期 |
| 访问日期 | 必须写明,因为就地更新 |
| 指标代码 | 引用单个指标时补代码 |
| 修改声明 | 做过加工须标明 |
| 商业使用 | 须先读数据共享许可,必要时联系数据团队 |
| 聚合口径 | 引用组值时说明用的是官方组还是自算 |
| 缺失处理 | 须说明缺行与空值如何处理 |
| 边界表述 | 引用国名与领土时沿用来源写法 |
| 全球拼接 | 与估计值拼接须显式标注来源 |
再分发的最小合规动作是四步:写清来源机构、写清更新与访问日期、标出改动、划分上报值与估计值的界限。前两步是署名,后两步是可复现性。
编辑说明
核验时间:2026 年 10 月 29 日。核验方式:直连 European Health Information Gateway 数据集页、数据中心接口与全库导出包;指标数、更新时间取自数据集页,国家组定义取自接口维度与元数据工作簿,长表行数、国家代码数与年份跨度取自导出包的分片文件。未覆盖内容:逐指标的定义细节、国别注释的逐条整理、各类卫生费用的口径细则、Health 2020 框架下指标映射的完整对应表。接口与页面的数字若在后续更新中变化,以官方最新标注为准。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- who-gho — 共享标签:公共卫生与流行病学 / 公共卫生统计 / 卫生服务研究 / 时序数据
- cvss-nvss — 共享标签:公共卫生与流行病学 / 公共卫生统计 / 死亡登记
- cdc-wonder — 共享标签:公共卫生统计 / 死亡登记
- enpd-2018 — 共享标签:公共卫生与流行病学 / 公共卫生统计 / 卫生服务研究
- esankhyiki — 共享标签:公共卫生与流行病学 / 公共卫生统计 / 卫生服务研究
- human-mortality-database — 共享标签:公共卫生与流行病学 / 公共卫生统计 / 死亡登记
- wpp — 共享标签:公共卫生与流行病学 / 公共卫生统计 / 时序数据
- usgs-comcat — 共享标签:公共卫生与流行病学 / 公共卫生统计 / 时序数据
- mswep-v3 — 共享标签:公共卫生与流行病学 / 公共卫生统计 / 时序数据
- hmd — 共享标签:公共卫生与流行病学 / 公共卫生统计 / 死亡登记
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

