资讯动态

WorldPop全球网格化人口栅格数据:从建模原理到实际应用解析

发布时间:2026/9/7 21:07:11 来源:尧图企业网站定制
做地理数据分析的人迟早都会遇到一个绕不开的需求估计某个区域内到底住着多少人。公共卫生要算发病率的分母灾害评估要问受淹范围里有多少人商业选址要判断客群规模基础设施规划则要分析服务覆盖了多少居民。人口普查数据能回答这个问题但它通常只给到行政区级别的汇总——一个市一个县一个总数至于人口在县域内怎么分布根本看不出来。WorldPop 这类全球网格化人口数据集做的就是另一件事把人口从“行政区汇总”拆到规则的格网上给出每一个像元上大概住了多少人。这套由英国南安普顿大学牵头、联合美国路易斯维尔大学、哥伦比亚大学 CIESIN 等机构维护的数据覆盖全球常规分辨率约 1km部分区域有 100m 的未缩放产品时间序列已经从 2015 年做到了 2030 年而且开放获取。无论你做健康地理、城市规划、灾害风险还是商业分析它都极有可能成为你最常用的一张底图。这篇文章我想从产品设计、建模原理、横向选型、下载实操和踩坑经验几个方面完整聊一聊这套数据。1. 这套数据到底是什么产品线、分辨率与时间序列1.1 从“一个数字”到“一张栅格”WorldPop 交付的是一张 GeoTIFF 栅格图不是一张 Excel 统计表。每个像元的值就是一个估计人口数一般叫 persons per pixel或者直接叫 population count。举个例子你下载 1km 版本每个像元对应地面上 1km × 1km 的一个格子像元值是 1200那含义就是“这个 1 平方公里的格子里大约住了 1200 人”。如果是 100m 版本每个像元对应 0.01 平方公里像元值往往就要小很多比如 12、28、76 这种量级。这里有一个非常常见的误用不少初学者把人家的“像元人口数”直接当“人口密度”来比较不同区域。其实 WorldPop 的官方产品中至少有 population count 和 population density 两种计算口径文件名里通常会有区分。你要是看到文件名叫pop或者ppp那一般是人口计数如果文件名里有dens那才是每平方公里人口数。自己做分析时如果拿着一张人口计数栅格去算密度一定要先用像元面积做除法。100m 格网的一个像元是 0.01 km²所以密度 像元值 ÷ 0.011km 版本则因为像元面积约等于 1km²人口计数基本就等于密度。WGS84 坐标下不同纬度的 1 弧秒、30 弧秒对应的地面距离并不一样国际数据集为了方便通常用 1km 或 100m 这种名义分辨率来描述但严格做面积统计时还是要按实际像元面积来算。1.2 时间序列从历史估算到未来预测WorldPop 最经典的全球人口栅格系列覆盖 2000 到 2020 年的逐年估计。这几年团队把新版本的时间线扩展到了 2030 年也就是标题里强调的“2015-2030”。这里需要区分一下2015 到 2020 附近的数据有较多的人口普查和住户调查做校准本质上是“估算”越往后尤其 2025 到 2030 年很大程度上是依赖过往趋势、城市化假设和国家预测做的“外推”。我在实际项目里看到不少人把 2030 年栅格当成已经发生的事实来引用这是需要警惕的——它更适合做规划参考不适合做现状判断。另一个容易被忽略的点是WorldPop 旧版2000-2020和新版2015-2030在重叠年份并不完全一致。两版数据在建模流程、协变量选择、基准人口上都有调整直接拿旧版 2010 年和新版 2020 年做差值可能会得到明显偏离实际的“人口激增”或“人口骤降”。做时间序列分析前先看你下载的文件来自哪一套发布体系尽量用同一版本、同一发布批次内的逐年数据否则你比较的可能不是人口变化而是版本之间的方法差异。1.3 同一片区域为什么会有好几张图层下载 WorldPop 数据时最常见的一个困惑是同一年份、同一个国家页面上常常挂着不止一个文件后缀有 1km、100m还有 constrained、unconstrained 之分。constrained 是“约束版本”unconstrained 是“非约束版本”或“未缩放版本”。非约束版本完全按照模型权重把人口分摊到每一个像元上就算那个像元是湖泊中央、高山裸岩也可能分到几个人的权重。约束版本会额外引入定居点掩膜、水域掩膜、坡度适宜性等先验信息把明显不适合居住的像元直接设成 0。我用这两个版本做过对比差别比想象中大。一块山区里的水库非约束版本在水面上能分出几十人约束版本对应区域基本全是 0。做受灾人口影响评估、流域分析、设施覆盖范围计算时建议优先使用 constrained 版本。只有在你想评估模型本身的不确定性、或者需要和某些只提供 unconstrained 版本的第三方模型对接时才去碰非约束版本。2. 核心方法论人口是如何被“分配”进每个格网的2.1 自上而下的框架先用随机森林算权重再按普查总数控制总量WorldPop 的主流生产框架是“自上而下”top-down 首先拿到一个行政级别例如县、区的人口普查总数作为该区域的人口总量控制值。然后用一个机器学习模型——通常是随机森林——去估计每个像元在全区域内应占多少人口权重。最后把官方普查人口总数按权重分摊到每个像元上。这个流程的关键在于随机森林并不是直接预测“这个像元住了多少人”因为全球绝大部分像元根本没有人居住的实测真值。模型学的是“在怎样的环境特征组合下人口更可能集中、更可能多”。输入特征包括夜间灯光、道路密度、建筑足迹、土地覆盖类型、地形坡度、气候变量等。模型给你的是一个相对权重分布然后通过行政区人口总量去校准保证这个行政区内所有像元的人口加起来刚好等于普查或统计部门发布的行政人口总数。这种“先权重后分摊”的思路好处是能同时兼顾空间细节和总量一致性。空间上人口会更多落在灯光亮、道路密、建筑集中的区域而不是均匀铺开总量上又不至于脱离官方统计。理解这一点你就明白了为什么 WorldPop 的栅格叠加到某个城市区域时市中心像元值明显偏高而农村像元普遍偏低——这不仅是遥感影像“看见”了城市更是整体人口控制下的空间再分配。2.2 随机森林依赖哪些“人口指纹”模型效果很大程度上取决于它看到了什么协变量。WorldPop 不同版本用的变量组合有差异但大致逃不出这几类夜间灯光反映人类活动强度和能源使用城市化地区信号很强道路密度和道路网络反映交通可达性人类聚落通常沿着路网展开建成区或者建筑足迹直接指示房屋位置是最强的人口空间指示器之一土地覆盖和地形数据比如排除水域、冰川、陡坡等不适宜居住区气候与生态变量用来捕捉不同地区的居住偏好。但每一类变量都有它的盲区这是我用过之后才深刻体会到的。夜间灯光在低收入的乡村地区、无电地区会严重低估人口因为那里晚上确实不亮道路密度在穿越沙漠或山区的公路沿线会造成“虚假人口走廊”建筑足迹在很多地区的非正规聚落、贫民窟上识别不全地形数据虽然能排除陡坡但不同文化背景下人们对“可接受坡度”的界定完全不同。WorldPop 采用多变量组合本质上是在用机器学习做“环境相似地区人口分布相似”的外推而不是对每一个像元都做了入户调查。正因为如此你在数据说明里常会看到不确定性图层或者在官方文档中看到他们反复强调“这是估计值不是普查值”。2.3 约束版本的意义从“纸上权重”到“可居住性筛选”前面提到的 unconstrained 版本为什么会在水面上分出人口因为模型学到的是统计规律环境特征上像“有人的地方”就给权重它不关心那里到底能不能住人。约束过程就是把“人类居住适宜性”作为先验知识硬性加进来——用水体掩膜把湖泊河流清空用定居点掩膜把无定居点区域压低用坡度数据把陡峭山地排除。实际使用中这个筛选意义非常大。举个例子我在算某流域的常住人口时如果用 unconstrained 版本和流域边界叠加会把水库和河道上理论上不存在的人口也算进去换成 constrained 版本结果逻辑上就通顺多了。你可以在下载页面看到同一个数据集同时提供两个版本这不是数据出错而是在给你选择如果你关心的是“模型可能会如何分配人口”用 unconstrained如果你关心的是“这片区域目前实际上更适合认为有多少人居住”用 constrained。2.4 方法假设WorldPop 描述的是“常住人口”不是“随时出现在那里的人”WorldPop 构建时训练和校准数据基本来自人口普查和住户调查回答的是“人们晚上住在哪里”这个问题。所以它真正描述的是常住人口分布。如果你要研究的是城市 CBD 白天通勤人流、旅游景区在旺季的瞬时人口或者跨城通勤带上的流动人口WorldPop 在概念上就不匹配——它会严重低估白天办公区的人口也会高估卧城白天的人口。这一点不是数据质量的问题而是数据口径的问题。选数据之前一定先问自己我关心的究竟是“谁住在这里”还是“谁此刻可能出现在这里”。3. 全球人口栅格怎么选与 LandScan、GPW、GHS-POP 的对比3.1 四个主流全球人口栅格数据集WorldPop 不是市面上唯一的全球网格化人口数据集。我经常被问到它和 LandScan、GPW、GHS-POP 有什么区别下面这张表是我自己整理的一个速查数据集开发机构典型分辨率人口口径许可与获取典型应用场景WorldPop南安普顿大学等1km部分区域 100m常住人口开放CC BY 4.0公共卫生、灾害、规划、科研LandScan美国橡树岭国家实验室 ORNL约 1km环境人口ambient population需申请有使用限制灾害应急、动态暴露评估GPWNASA SEDAC / CIESIN约 1km常住人口基于普查均匀分配开放总量概览、行政边界明显地区GHS-POP欧盟联合研究中心 JRC高分辨率版本常住人口依托建成区开放城市研究、建成区与人口耦合分析3.2 常住人口 vs 环境人口口径差异比分辨率更影响结论LandScan 经常被拿来和 WorldPop 对比但它俩的口径其实有明显差异。LandScan 强调的是“环境人口”也就是在一个典型 24 小时周期内、可能出现在某个地方的平均人数。它的模型不止考虑常住地还会纳入工作地、交通网络、商业区等因素。在典型的通勤型城市里WorldPop 的市中心夜间人口可能不高但 LandScan 的白天人口会把上班族算进去。这不代表谁更准只代表它们回答的不是同一个问题。做灾害评估时常有这样的讨论洪灾发生在白天大部分人在工作场所按常住人口算会低估实际暴露按环境人口算会更贴近当时情况。此时 LandScan 在概念上更合适。但 LandScan 获取流程繁琐有时需要机构授权对于大部分科研人员来说先用 WorldPop constrained 版本做初步估算再结合通勤系数做校正是成本更低的替代方案。3.3 落到你的场景怎么选我的建议很简单常规科研、教学、课程作业、开源项目希望快速获取且少受许可限制直接选 WorldPop可解释性好、引用体系完善、社区用户多数据要用于灾后应急、动态人口暴露评估并且团队有条件提交申请、等待审核再考虑 LandScan如果只需要宏观总量、担心栅格细节反而干扰判断GPW 够用它把普查人口均匀分配到行政区内平滑但边界清晰做成图更“稳重”如果你的研究重点是把人口和建成区扩张耦合起来分析GHS-POP 和 GHS-BUILT 的配套使用会更好因为它的人口分配逻辑直接依托建筑足迹。简单说没有哪个数据集在所有场景下都绝对更优。关键是先明确“人口”在你研究里的定义再选择匹配的产品。4. 从下载到区域统计一套完整的实操链路4.1 下载入口、文件格式与命名规律目前 WorldPop 的官方数据已经迁移到 HDX 等开放数据平台搜索 WorldPop按国家和地区筛选就能看到对应年份、版本、分辨率的文件。部分历史数据和 R 语言生态的扩展包还可以从 worldpop.org 官网找到入口。下载时留意文件格式常见的是 GeoTIFF也有部分历史版本提供 RData 文件。文件命名里一般会包含年份、区域、分辨率、约束状态等信息比如global_1km_population_2020_constrained.tif这种结构。但不同发布批次命名并不完全统一所以下载后第一件事不是急着打开而是先把文件名和源页面描述都看一遍确认这确实是你需要的版本。我在项目里曾经因为同一目录下有 constrained 和 unconstrained 两个文件没看名字直接拿了一个结果后期所有统计都偏大回头排查半天才发现是版本拿错了。4.2 Python 读取与按区域统计拿到 GeoTIFF 之后最常见的一个操作是算“某个行政区域或某个流域内总人口”。我推荐这套 Python 流程import geopandas as gpd import rasterio import numpy as np from rasterio.mask import mask # 读取区域边界并统一到栅格的坐标系WGS84 region gpd.read_file(your_region.shp).to_crs(EPSG:4326) with rasterio.open(worldpop_100m_2020_constrained.tif) as src: # 把区域边界内的像元裁剪出来 out_image, out_transform mask(src, [region.geometry.iloc[0]], cropTrue) nodata src.nodata population out_image[0] # 剔除无数据区域和异常负值 valid population[(population ! nodata) (population 0)] print(区域内总人口, valid.sum()) print(区域内像元个数, valid.size)这里有几个容易踩的坑矢量边界和栅格的坐标系必须一致。很多 shp 是 Web Mercator 或者地方坐标系直接裁剪前先用to_crs()转换到栅格坐标系否则裁剪结果会错位。mask(..., cropTrue)只会把边界范围外的像元挖掉范围内的 NoData 像元仍然存在所以统计时必须排除 NoData不然结果会变成一个巨大的负数。如果你只需要按每一个区县分别统计不用写循环直接用rasterstats库更省事from rasterstats import zonal_stats stats zonal_stats( districts.shp, worldpop_100m_2020_constrained.tif, stats[sum, mean, max], nodata-99999 ) print(stats)zonal_stats返回一个列表每个元素对应districts.shp里的一个区县里面的sum就是该区域总人口。注意shp和tif的坐标系也要一致不一致时同样先做转换。4.3 R 语言用户怎么处理老版本 RData如果你下载的是早期的 RData 文件在 R 里可以这样处理library(raster) load(xxx.RData) # 通常是一个 RasterLayer 或 RasterStack plot(x) # 区域统计 region - shapefile(your_region.shp) extract(x, region, fun sum, na.rm TRUE)RData 文件里面有时候是多个图层堆叠在一起比如按年龄、性别拆分的人口栅格提取时先看一眼图层名再用subset()选需要的层不要一上来就对整个 RasterStack 做统计。4.4 一个小技巧先验证再分析拿到数据后我习惯先做一个“总量校验”用当前最新版本的 WorldPop 栅格做整个国家或大区的总人口统计然后和官方统计公报或者数据库中的总数对比一下。通常误差在百分之几以内是正常的如果差出两位数百分比先检查版本、裁剪边界、NoData 处理这些环节再做正式分析。这个习惯替我提前拦下了很多低级失误。5. 使用前必须知道的边界与风险5.1 高分辨率不等于高精度WorldPop 提供 100m 分辨率产品视觉上确实很精细但一定要记住一个栅格看起来精细只代表它的像元尺寸小不代表每一个像元的值都是实测出来的。大部分像元都是模型预测值预测的不确定性在数据稀疏地区相当大。比如人口稀少的高原、荒漠、热带雨林区域训练样本少特征变量与人口的相关性也弱栅格值可能比真实情况差很多。所以做小范围精细分析时我强烈建议用本地更高精度的数据比如街区级普查、建筑级居住单元做交叉验证不要盲目相信 100m 栅格在“你家小区”附近给出的数字。5.2 时间序列里的版本断层比数据本身更隐蔽的坑这是我认为这套数据最需要警惕的地方。WorldPop 是持续迭代的产品不同年份发布的数据背后可能是两套不同的建模方案。2020 年前后的版本更新引入了新的协变量和新的校准流程这意味着 2010 年“当时的版本”和 2020 年“新版本”并不是同一条生产线上出来的。把两套不同版本的年份数据放在一起算增长趋势很可能得到与实际情况不符的结论。做跨年份分析时我会尽量把研究期内的所有年份都下载自同一次发布、同一版本体系并检查官方文档是否有命名规律。如果发现某一年数据只有 unconstrained 版本而其他年份都下载的是 constrained 版本那就得统一处理或者干脆换用全部 unconstrained 版本做相对变化分析因为相对变化受系统性偏移影响相对较小。5.3 预测年份的数据要谨慎引用2025 年、2030 年的栅格在大多数情况下是模型基于历史趋势和人口预测的外推结果。它对于“未来需要多少学校、医疗资源”这类规划问题很有价值但它不是一个已经发生的统计事实。对外报告或写论文时我建议明确区分“估计值”和“预测值”避免被读者误解成实际调查结果。5.4 许可、引用与可复现性WorldPop 的授权一般是 CC BY 4.0核心要求是注明出处。我通常会在论文或报告里写一句类似这样的话数据来源WorldPop (www.worldpop.org)南安普顿大学等全球高分辨率人口分母项目受比尔及梅琳达·盖茨基金会资助OPP1134076。引用细节以官方最新要求为准但一定要养成“引用数据来源”的习惯。网格化人口数据看起来只是一张图背后是大量的建模假设和原始投入不标注来源在学术和行业规范上都是站不住的。同时凡是做过裁剪、重投影、比例调整或版本拼接建议把处理脚本和命令行记录保留下来。人口数据只要经过一步处理中间逻辑就可能失真留档既是对自己负责也是让别人能复现你的结果。5.5 一个长期有效的方法在局部区域做验证和校正最后分享一个我每次接到新区域任务都会做的事把 WorldPop 的区县级汇总和该地区最近一次人口普查的经济数据做对比计算相对误差。如果某个区误差特别大比如超过 30%我会做一个简单的比例校正correction_factor official_population / worldpop_estimated_population corrected_raster original_raster * correction_factor这个做法本质上假设偏差是系统性的、在区域内均匀分布。它不一定完全消除误差但对于很多场景例如设施覆盖率、人均资源测算已经能明显改善结果。做校正时唯一要注意的是不要跨太大范围使用同一个系数每个区单独算别图省事一整个省用一个。WorldPop 这类网格化人口数据价值在于它把普查数据从“一个行政区一个数”变成了“一张可以在 GIS 里随意叠加计算的空间图层”。它不完美但胜在开放、稳定、覆盖面广是多数人起步时最好的选择。关键是别把它当成绝对真实而是当成一个需要在你的具体研究场景里不断验证和校正的工具。每次拿到新数据集先看文档、再验证、再分析这套流程走下来数据能给你省下大量时间而不是带来更多麻烦。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价