1965-2022中国月度部门用水高分辨率网格数据集:构建与应用
做水循环和资源管理研究的朋友大概率都碰到过同一个尴尬想分析某条流域、某个灌区或者某个生态区过去几十年用水怎么变化手头只有省市级别的年鉴统计数字想做精细一点的空间模型常被“水量到底落在哪一公里”这个问题卡住。我们团队之前评估气候变化对区域农业用水的影响时就被这种数据缺口折腾了很久。后来围绕“中国月度部门用水量的高分辨率网格数据集(1965.1-2022.12)”做了一整套数据整理、空间化拆解和交叉验证才把这块拼图补上。这套数据集的核心价值是把水利统计系统里按行政区划和部门口径统计的用水数据通过一套可复现的降尺度方案落到覆盖全国陆域的规则网格上。时间上从1965年1月覆盖到2022年12月共696个月空间上按高分辨率网格逐月排列部门上至少区分农业、工业、生活、生态环境补水几大类。对研究水足迹、灌溉需水、干旱监测、水资源承载力或者做水文模型输入的朋友来说它是开箱即用的基础数据。这篇文章我会从需求来源、设计思路、构建流程、文件结构、应用案例和常见坑几个角度把这类月度部门用水网格数据集的前前后后讲透。刚入行的学生可以把它当一份入门地图已经在做模型的老手希望里面的参数处理思路和校验方法能帮你少返几轮工。1. 项目概述行政统计数字为什么不够用1.1 需求从哪里来我接触这类网格用水数据最初的动机是评估气候变化背景下的区域水资源压力。当时手上已经有全球尺度约0.5度的气候模式结果有土地利用数据也有社会经济统计数据唯独缺一套“既保留部门差异、又有空间细节”的用水量数据。传统统计数据的表达形式是“某省某年农业用水量XXX亿立方米”。这个数字写报告完全够用但落到模型里就特别别扭。一个流域可能跨越好几个省一条灌区只占某个县的一部分研究边界和行政边界对不齐统计数字就没办法直接参与计算。而网格化正好换了一种更灵活的表达方式水量的归属从“行政区”变成“地理坐标”后面想怎么切流域、切灌区、切生态分区都能对上。1.2 判断数据集好不好的“四要素”拿到任何一套网格用水数据我习惯先核四样东西基本能判断它能不能用时间分辨率是月尺度还是年尺度起止时间是否连续有没有缺月空间分辨率网格多大覆盖范围是否覆盖研究区海岸线、边境线怎么处理部门口径是否区分农业、工业、生活、生态口径和水利统计年鉴是否一致单位与量纲网格值是水量立方米或万立方米还是折算成水深毫米这决定了后续计算方式。这套月度部门用水数据集四样全占齐了月尺度、连续696期、覆盖全国陆域、分部门独立存储。实际使用时我可以直接从某个格点读出该位置某月的农业用水量也可以累加得到任意流域的逐月部门用水这对于水文模型和资源评估来说非常省事。2. 核心设计思路统计口径和网格之间怎么架桥2.1 部门口径农业、工业、生活、生态怎么分中国水资源统计中最常见的四分法是农业、工业、生活、生态环境补水。这里有几个容易忽略的细节。农业用水的口径最宽不只是农田灌溉还包括林、牧、渔、畜用水。其中农田灌溉又占了大头北方灌区尤其如此。工业用水则要区分火电冷却水和高耗水制造业这两类用水过程差异极大。生活用水通常再拆成城镇生活与农村生活人均定额不同空间分布逻辑也不同。生态补水是近几十年的概念早期统计里没有单独序列往往混在“其他用水”里处理起来最费劲。做网格化之前必须先把这些口径对齐。如果只拿“总用水量”一个数字做空间分配等于把农业的灌溉高峰和工业的稳定用水混在一起出来的月度序列既不真实也难解释。所以部门层的拆分越干净后面的网格化越靠谱。2.2 空间化的本质不靠面积均摊靠代理变量分配高分辨率空间化到底难在哪核心矛盾是统计数据是行政单元上的“平均概念”但用水发生地点高度分散。农业灌溉用水集中在有灌溉设施的耕地附近工业用水集中在工业园区和城镇工矿点生活用水跟着人口密度走。如果只是把省级总量除以面积、再乘每个格子的面积出来的图不是“灯下黑”就是“全均匀”没有研究价值。行业内的通行做法是用与用水量强相关的高分辨率代理变量做空间分配。常用的代理变量包括灌溉耕地面积、降水量与蒸散发的差值、工业GDP、夜间灯光、人口密度等。这个过程本质上是一个“从总量约束下的最优化分配”既要满足省级总量闭合又要把水量撒到真正发生用水的位置上。举个直观例子同样是1亿立方米农业用水全铺开摊到全省和优先分配到有效灌溉面积大、作物需水高的格子上结果完全不同。后者才符合物理常识。2.3 时间轴上的难点57年序列如何保持口径一致1965年到2022年跨度57年统计制度本身经历了很多变化。早期没有完整的分省水资源公报很多指标是后续追算的后来水利统计又经历过部门口径调整。做长时间序列数据集最怕的不是某一个数不准而是序列在某个年份发生“系统性的台阶突变”让你误以为水资源量突然暴涨或暴跌。处理这个问题的常规思路是把“现状口径”作为基准向前倒推时做口径换算。比如某省级行政区划调整了就需要按新旧边界因子把老数据拆开重拼生态用水的统计口径变化了就要把早年“其他用水”里的一部分重新归入生态。这类工作繁琐但不复杂真正的问题在于透明——数据集文档里必须写清楚哪一年哪里做了调整否则使用方会把口径变化的虚假信号当成真实水文过程。3. 从统计值到网格构建流程与关键算法拆解3.1 五类基础数据源的准备与预处理这类数据集的构建不是拍脑袋把统计数字撒到网格上而是要准备一系列时空连续的输入数据。我把它归纳成五个篮子第一是统计口径数据包括各省水利统计年鉴、水资源公报、城建统计中的供用水数据。它们提供总量约束和部门拆分依据。第二是社会经济数据包括县级或更细的人口、GDP、耕地面积、工业产值用于做空间分配的底层权重。第三是地理空间数据包括灌区边界、河流水系、土地利用类型、行政区划边界。第四是遥感辅助数据包括夜间灯光、植被指数、地表覆盖。第五是气象驱动数据包括降水、温度、蒸散发等用来估计作物需水过程。预处理阶段最核心的工作是统一坐标系和网格对齐。统计数据的年份、部门口径、单位都要清洗成一致格式空间数据的投影要统一尤其是计算面积时必须使用等积投影否则高纬度格子的面积会被算错。3.2 分部门降尺度方案四种路径有本质区别农业、工业、生活、生态四类用水在空间上的“脾气”完全不同处理方案不能共用一套。部门统计基准指标主要空间代理变量空间化思路农业灌区总用水量、有效灌溉面积灌溉耕地分布、作物种植结构、降水盈亏、植被指数先按灌区或耕地格点分配再用作物需水过程加权工业工业用水量、工业增加值工业企业分布、夜间灯光、县域工业GDP、路网密度县级总量先到县再按园区位置和灯光亮度细化到格点生活城镇/农村生活用水量、人口人口密度、城镇化率、建成区范围区分城乡水源分别按人口格网分配再叠加人均定额差异生态河道外生态补水、环境用水河湖水面分布、湿地范围、水系距离主要沿河流、湖泊、湿地缓冲区分配远离水系则置零这里有个关键经验农业用水分配要考虑“有效灌溉面积”而不是“耕地面积”。很多地方耕地面积大但实际能浇上水的只有一部分直接用耕地面积会被旱地的面积稀释导致灌区格点上的单位用水量偏低。工业用水用夜间灯光做代理很常见但要注意阈值。灯光高度饱和的大城市核心区工业可能已经外迁反而要用城市周边工业园区的独立“亮斑”去分配而灯光微弱的农村乡镇可能有零星高耗水小厂会被整体低估。所以单一代理变量永远不够要结合县级总量约束去校正。3.3 从年总量到月序列两种路线怎么选网格化之后得到的是“年总量网格”但数据集需要的是月度值。月拆分有两条路线。路线A先做年总量空间化再用月度比例系数把每个格子的年值拆到12个月。这种方案的优点是总量控制严格简便快捷缺点是一个县内所有格点共用同一个月过程系数空间上的物候差异体现不出来。路线B逐月估计每个格子的需水过程再在月尺度上做总量约束。比如农业用水先算每个格子的逐月参考蒸散发、有效降雨和作物系数得到“作物需水过程线”再把这个过程线累加得到年需水最后用统计年总量去等比缩放到格点月值。这样同一个县内水浇地冬小麦区的3-5月高峰和水稻田的6-8月泡田高峰就能被区分开。我在实际项目中更推荐路线B虽然计算量更大但结果经得起后续水文模型检验。北方的冬小麦在返青拔节期需要大量供水南方早稻在4-6月需水明显如果所有格子都用全省统一的月系数空间上的“错峰”信息就丢失了。3.4 质量控制和交叉验证不能只盯一个总量质量控制我一般分层做。第一层是总量闭合检验把网格按省级行政区累加和年鉴数字对比相对误差要控制在很小范围一般在5%以内。这一层不过关就别谈后面的应用。第二层是时间一致性检验逐省计算逐月序列的一阶差分找出突变点再结合统计口径调整记录判断哪些突变是合理的哪些是空间化错误。第三层是空间合理性检验比如农业用水不应该大量出现在非耕地格点工业用水不应该落在自然保护区核心区生活用水不应出现在无人区。交叉验证方面最理想是拿县级实际供用水数据或灌区实测引水量作为对照。灌区引水口有实测记录的可以把灌区边界内的网格加总和实测值对比。没有任何实测资料的地区至少要保证网格总量与水资源公报的省级总量残差保持随机分布而不是出现明显的系统性偏差否则说明某个代理变量的选取本身就有问题。4. 数据文件组织与使用实操4.1 文件格式、网格定义与变量说明这类长时间序列网格数据集常见封装格式是NetCDF因为它适合存多维时空数组部分也会提供GeoTIFF分月切片。拿到文件第一步先看维度定义。通常包含四个维度时间time、纬度lat、经度lon或者行列号y/x。变量名可能是中文拼音缩写比如agri、ind、dom、eco单位多为万立方米/月。这里特别提醒一句网格值表示的是“该格点这个月的部门用水量”不是单位面积上的水深。如果你要做水量平衡需要先把它折算成毫米水深公式很简单水深mm 水量万立方米 / 格点面积km² / 100。如果不做折算直接用体积和降水量的毫米单位去比较量纲就错了这是我见过最多人掉进去的坑。4.2 Python快速读取与流域汇总示例用xarray读取NetCDF非常方便。假设文件名是water_use_monthly_1965_2022.nc里面维度是time、lat、lon代码大概这样import xarray as xr import numpy as np ds xr.open_dataset(water_use_monthly_1965_2022.nc) print(ds) # 提取2020年1月的农业用水 agri_202001 ds[agri].sel(time2020-01) # 某个格点的时间序列 series ds[agri].sel(lat36.5, lon115.0, methodnearest) # 流域汇总先准备一个与研究区匹配的0/1掩膜二维数组 basin_sum ds[agri].where(basin_mask 1).sum(dim[lat, lon]) # 乘时间步长得到多年累计值这里值已经是每月总量不用再乘 total basin_sum.sum(dimtime)这里有一个容易被忽视的问题如果网格是等经纬度坐标格点面积随纬度变化。但请注意只要变量存储的是“该格点内的总水量”累加求和就是合法的不需要额外乘面积。只有当你需要把体积换算成水深或者把逐月值折算成单位面积通量时才需要引入格点面积数组。算面积时使用等积投影如Albers会比在经纬度上直接近似更稳妥。4.3 坐标、单位、掩膜三个最容易踩的坑第一是坐标顺序。有的数据经度在前有的纬度在前还有的行列号数组不带经纬度坐标需要用栅格元数据里的transform手动生成坐标。不先打印维度结构就动手画图很容易把中国地图画横过来。第二是岸线和边界掩膜。陆域网格数据在海域格点通常填充为NaN但有些数据会用0表示无值有些用-9999。统计之前必须先确认填充值否则海域的0也会被算进流域总量虽然早期可能影响不大但做长序列趋势分析时这种“伪0”会被当成真实观测干扰非常大。第三是月份时间的解析。数据的时间轴不一定正好落在每月1日有的数据集用“1965-01-01”表示1月有的用“1965-01-15”表示月中还有的存成“1965.01”字符串。读取后先统一转换成pandas的PeriodIndex按月份切片才不会出错。5. 典型应用场景与实操案例5.1 区域用水格局演变分析这套数据最适合的一类分析是看几十年尺度上用水中心的迁移。我做过一个华北平原农业用水重心分析把逐年1月的农业用水网格做空间加权平均算出重心坐标再画成一条移动轨迹。结果很清楚农业用水重心随灌溉面积调整和水源条件变化在几十公里范围里逐年漂移而且冬小麦的返青期用水高峰区域和春季降水偏少地带高度重合。这种分析如果只用省级数据永远只能看到“省份之间的大块转移”看到不灌区尺度的细节。5.2 灌溉需水模拟与干旱评估另一个常见场景是把它接进灌溉需水模型。我们当时把农业用水网格作为“实际灌溉量”的下边界再结合气象数据计算理论需水量两者相减得到灌溉亏缺。某地如果连续几年实际灌溉量明显低于理论需水大概率说明该区域存在供水不足这是做干旱预警非常有效的指标。实际操作时建议先按流域把农业用水网格和耕地面积网格叠合计算出单位灌溉面积的月用水深度mm/月再去和遥感蒸散发产品对比。如果网格用水深度和同期蒸散发缺水量在季节过程上对不上就要回头检查前面说的月拆分方案是不是太粗糙。5.3 缺水风险评估与水资源承载力分析做区域缺水风险评估时这套数据能同时提供“需求侧”和“供给侧”的参考。需求侧是各月的部门用水网格供给侧可以使用降水量、径流量等自然水资源的网格数据。两者逐月相减再考虑生态基流约束就能得到逐格点的缺水月数和缺水强度。这类评估中最有价值的产出是把“生活用水优先级最高”这种规则直接落成空间规则。比如在城乡结合部生活用水网格和农业用水网格重叠的区域缺水月份通常对应地下水超采的高风险点。把这些点位叠加水源地保护范围就能给规划部门提供一张非常直观的风险图。6. 常见问题与排查技巧实录6.1 网格里出现零值和极值是数据错了还是真实情况排查这类问题我给自己定的原则是先做物理判断再做统计判断。北方的旱作农田在冬季没有灌溉需求农业用水为零是完全合理的城市核心区的工业用水不可能为零如果出现零值且周围建成区很密集那多半是分配权重出了问题。极值方面灌溉高峰月的农业用水可能达到全年总量的20%-30%单月数值偏高并不等于异常要结合该格点有效灌溉面积和作物类型来判断。比如水稻种植区的泡田期用水深度一次性达到几十毫米是正常的超出两三倍才需要警惕。6.2 网格加总结果和年鉴对不上问题出在哪当自己算的流域加总结果和某本统计年鉴上的数字对不上时先不要急着怀疑数据质量。绝大多数情况是口径不同年鉴计数可能只包含集中式供水人口网格数据里的生活用水却包含自备井取水年鉴农业用水可能只统计了灌区内的引水渠系网格数据却把零散的塘坝灌溉也纳入了。我的排查顺序是先比较行政边界完全一致的省级加总排除流域切分差异再检查是否使用了正确的部门变量最后检查统计年份的水利口径是否发生过调整。6.3 长序列趋势里出现“台阶”怎么判断真假处理方法分三步。第一步把突变年份和统计数据收集方式的变更记录对照很多台阶对得上统计口径调整并不是物理过程突变。第二步看突变是否同时出现在相邻省份或上下游流域如果是全省同时跳大概率是行政区统计问题如果只有某一个格子跳则可能是代理数据源切换比如某年份夜间灯光数据换了传感器。第三步做空间邻域检查把该格点与周围八个格点的时间序列做相关分析如果周围平稳而它单独跳多半是分配过程里的离群点。对于确认的假台阶我的处理原则是宁可把这一个时段的数值标为“参考值”也不要强行平滑因为任何平滑都会掩盖真实信号。6.4 实用避坑清单拿到数据第一件事永远是打印维度、变量、单位、填充值不要直接出图做流域统计前先统一投影涉及面积计算必须使用等积投影单位如果是万立方米除以10000换成立方米再除以格点面积换成毫米换算顺序不要搞错月序列做趋势分析前先做季节性分解把年周期和长期趋势分开看使用早期年份数据时一定查一下对应的用水统计口径别把“未统计”当成“零用水”遇到明显异常格点优先检查代理变量在当年的空间分布问题通常出在权重上而不是总量上。7. 最后说几句我的使用心得数据网格化这件事表面上看是技术活本质上是在跟“不确定性”打交道。用水量不像降水那样可以直接观测到每个格点它只能通过总量约束、代理变量和经验关系去估计所以任何一套这类数据集都不可能完美精确。我个人的体会是不要追求某一个格点、某一个月的数据绝对准确而要把重心放在“空间格局对不对”和“时间过程稳不稳”上。只要省级总量闭合、部门占比合理、年内过程符合物候规律这套数据就能支撑绝大多数区域尺度的分析。在使用过程中尽量把它和其他独立数据源做交叉验证比如灌溉面积数据、遥感蒸散发、地下水位观测你的结论会踏实很多。最后再分享一个小技巧如果你要把这套数据作为模型输入长期运行建议先单独导出一个子区域、一个较短时间段把整个读取、裁剪、汇总、转存格式的流程跑通再扩展到全序列。别小看这一步它能帮你提前踩掉大部分坐标系统、量纲转换和时间解析的坑省下来的时间足够你多做两轮敏感性分析。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →