2004-2022年省级自然灾害损失面板数据:口径对齐与清洗实操
做区域经济、农业保险定价或者灾害经济学研究的朋友大概都有过这样的经历想算一下某个省的灾损强度翻遍年鉴只找到全国加总的那一行数字省份层面的受灾人口、农作物受灾面积、倒塌房屋、直接经济损失散落在不同年份、不同章节、不同口径的表格里。这套各省份自然灾害损失情况数据集2004-2022年解决的正是这件事——把31个省级行政区、19个年度的多维度灾害损失指标整理成一张可以直接进模型、可以直接画图的省级面板表。它最核心的价值不在于数据多而在于口径对齐同一列在2004年和2022年指的是同一件事这在灾害统计里其实是非常难做到的一件事。这套数据适合谁用如果你在做灾害风险的省际差异比较、农业受灾面积与粮食产量的关系、财政救灾支出的配置效率、又或者只是想给自己的可视化项目找一组有真实叙事感的数据它都能直接派上用场。数据本身是公开来源的二次整理成果门槛不高Excel 打开就能看懂但真想挖出点东西还是得先搞清楚每个字段背后的统计规则否则很容易在单位换算和灾种归类上栽跟头。下面我按自己整理和使用这套数据的顺序把该踩的坑、该算的账、该留的心眼一次说清楚。1. 这份数据集到底装了什么字段与口径先摸清拿到任何一份面板数据我的习惯都是先花半小时只看表头和字段说明不急着跑分析。这一步偷懒后面返工的成本会放大十倍。灾害损失数据尤其如此因为它的字段命名在不同来源里差异极大同一个意思可能有四五种叫法。1.1 三类核心指标人口、农业、房屋与经济从统计逻辑上讲一份完整的省级自然灾害损失记录通常由四组指标构成这也是本数据集的主干。第一组是人口受灾指标包括受灾人口、因灾死亡人口、因灾失踪人口、紧急转移安置人口、需紧急生活救助人口。这几个词看着像同义反复其实边界很清楚受灾人口指的是因灾害造成生产生活受到影响、需要救助的人口它是一个宽口径紧急转移安置人口是其中被实际转移到安全地带的那部分是窄口径。做分析时如果把它们混用会得出转移安置率超过100%这种荒谬结论。第二组是农业受灾指标核心是受灾面积、成灾面积、绝收面积三个连在一起的数。这里的判断标准是按减产幅度划分的减产一成以上计入受灾减产三成以上计入成灾减产八成以上或者完全绝收的计入绝收面积。三者在逻辑上是层层包含的关系所以绝收面积一定小于等于成灾面积成灾面积一定小于等于受灾面积。我见过有人拿绝收面积除以受灾面积算重灾比例这个指标本身没问题但如果某年出现绝收大于成灾的情况那基本可以确定是原始录入错了。第三组是房屋损失指标包括倒塌房屋数量和损坏房屋数量。这里有个特别容易忽略的坑这个间的口径在个别年份和个别省份被替换成户或平方米尤其是灾后重建任务重的年份基层上报时习惯用户来统计。不做单位归一就跨年比较结论会完全跑偏。第四组是经济损失指标主要就是直接经济损失单位一般为万元。部分年份还配套有农业直接经济损失、工矿企业损失等分项。需要提醒的是直接经济损失是估损值不是决算值它的统计时点通常在灾情稳定后的一到两个月内所以早期年份数据的修订痕迹会比较多。1.2 灾害类型维度怎么切除了指标维度灾种维度是这套数据的第二根骨架。常见的分类是洪涝、干旱、台风含热带气旋、风雹、低温冷冻和雪灾、地震、地质灾害加上一个其他兜底项。这个分类在2004到2022年间基本保持稳定但其他这一项的内容在不同年份差别很大有些年份里面装的是生物灾害有些年份装的是森林火灾所以做灾种细分研究时我一般建议把其他单列不参与结构性分析。灾种口径带来的最大麻烦是复合灾情。一场台风往往同时带来大风、暴雨和洪涝基层上报时可能整场归入台风也可能按致灾因子拆成两三条记录。这就导致不同省份之间台风类损失的可比性其实是有条件的。如果你要做严格的省际比较比较稳妥的做法是用总损失这一列把灾种当作辅助解释变量而不是把灾种拆开来做横向排名。另外2008年是个明显的异常高值年份地震类损失在当年占比极高。做时间序列分析时这一年往往会主导整个回归结果我通常会在稳健性检验里单独做一次剔除该年份的回归看看结论是否还站得住。这不是数据错误而是重尾分布的天然特征处理方式应该是识别和说明而不是悄悄删掉。1.3 单位与口径的统一对照下面这张表是我自己在整理时总结的常见字段别名与单位对应关系可以直接当字典用。很多看似对不上的数据其实只是叫法不同。标准字段名常见别名标准单位特别注意受灾人口受灾人数、受影响人口万人个别年份用人次因灾死亡人口死亡人数、死亡失踪人口人有时与失踪合并上报紧急转移安置人口转移安置人数、避险转移人数万人窄口径勿与受灾人口混用农作物受灾面积受灾面积、作物受灾面积千公顷三兄弟中最宽的口径农作物绝收面积绝收面积、成灾绝收面积千公顷必然小于等于成灾面积倒塌房屋倒塌房屋间数、倒房万间有年份混用户平方米直接经济损失灾害损失、经济损失万元估损值非决算值地区生产总值GDP、地区GDP万元用于计算损失强度这张表里最值得反复看的是最后一列。我在实际整理中最常遇到的两类错误一是把万人当成人直接代入计算导致结果差一万倍二是拿直接经济损失除以受灾人口时忘了两边单位都要换算其实万元除以万人刚好等于元每人是个难得的巧合直接用数值相除就对了。这个小心得帮我省过不少功夫。2. 数据从哪里来源选择与拼接口径的取舍公开数据的整理真正的功夫不在下载而在拼。全国口径的汇总数容易拿省级的分解数据才是难点而恰恰是这部分不同来源之间经常打架。2.1 官方年鉴与年度通报的分工这套数据的原始来源大致分四类各有用处也各有短板。第一类是国家层面的统计年鉴。它的优势是年份连续、字段规范、已经做过初步校验适合用来搭建主干框架。短板是部分年份只公布主要省份或者只公布全国合计细分指标不全。而且年鉴中灾害损失相关表格的位置在不同年份有过调整早期出现在民政相关章节后来挪到了资源环境相关章节如果不熟悉这个变化很容易以为某年数据缺失。第二类是年度自然灾害基本情况通报。这类通报的颗粒度更细往往按灾种分列还会说明当年灾情的主要特点。它的价值在于交叉验证——当你发现年鉴里的某个省份数据看起来异常通报里往往能找到解释比如当年该省发生了流域性大洪水或者区域性干旱。第三类是各省的统计年鉴和年度统计公报。省级数据最细但口径差异也最大。有的省份把省属农垦系统的灾情单独统计不并入全省总数有的省份在个别年份只统计了纳入救助范围的那部分受灾人口。做省际比较时这些差异会累积成系统性偏差。第四类是专业统计年鉴和数据库产品。这类来源的好处是已经做过一轮字段归一省事风险是二级转手可能出现录入错误而且不一定标注修订情况。我的习惯是把它当索引不当依据关键指标一定回原始来源核一遍。2.2 为什么以省级面板而不是全国汇总有人会问全国汇总数不是更权威、更省事吗问题在于全国合计只有19个观测值做不了任何有统计意义的分析连趋势线都画不出置信区间。省级面板把样本量扩展到31×19这个量级才能支撑固定效应、分组比较、异质性分析这些常规操作。更实际的一点是灾害损失的空间异质性极强。东部沿海的损失集中在台风和洪涝西北集中在干旱和低温冷冻西南则有明显的地质灾害特征。全国合计会把这些结构完全抹平你只能看到一个随年份缓慢波动的总数看不出任何机制。只有落到省份层面才能观察到同样是台风为什么不同省份的损失强度差了三四倍这类真正有意思的问题。代价则是可比性问题。为了把31个省份放进同一张表必须做口径统一而统一就意味着要在某些年份舍弃一些细节。我的取舍原则是绝不混合不同口径去填补缺失。宁可留空也不要造一个看起来完整实际错误的数。2.3 时间起点为什么卡在2004年2004年这个起点不是随手定的。往前推到2000年前后省级灾害损失的统计指标体系和灾种分类有过较明显的调整早期数据在受灾人口的定义上偏窄很多省份只统计纳入政府救助范围的对象与后期的宽口径不可直接比较。硬要往前接就会出现前五年数值系统性偏低、后面突然跳升的假象这种断点在计量上是致命的。另一个考虑是2004年之后与灾害损失配套使用的其他省级变量比如地区生产总值、常住人口、农作物播种面积、财政支出在统计口径上相对稳定配套起来做归一化指标才不至于引入额外噪声。数据集的价值从来不只在自身还在于它能不能跟别的表对齐——这一点在准备阶段就得想清楚。至于终点定在2022年主要受制于数据发布节奏。灾害损失的最终核定需要时间最新年份的数据往往还在修订过程中用它做分析等于用一个会变的靶子。截到2022年是新鲜度和稳定性之间一个比较务实的平衡点。3. 数据清洗实操从原始表格到能跑的panel前面讲的是看懂这一节讲动手。我把整个清洗流程拆成四步每一步都附上我实际用过的处理方式可以直接照搬。3.1 行政区划与省份名称对齐第一步永远是名称对齐。原始表里同一省份可能有内蒙古、内蒙古自治区、内蒙三种写法用代码直接 merge 会漏掉一大批。我的做法是先建一张标准名映射表所有来源统一映射到两个字段省级行政区标准全称和两位数字代码。有了数字代码后续所有合并都以代码为键彻底避开名称歧义。import pandas as pd # 省名归一映射实际整理时这张表存成独立的 csv 更好维护 alias_map { 内蒙古: 内蒙古自治区, 内蒙: 内蒙古自治区, 广西: 广西壮族自治区, 广西壮族: 广西壮族自治区, 新疆: 新疆维吾尔自治区, 宁夏: 宁夏回族自治区, 西藏: 西藏自治区, 北京: 北京市, 上海: 上海市, 天津: 天津市, 重庆: 重庆市, } def normalize_province(name: str) - str: if not isinstance(name, str): return name name name.strip().replace(省, ).replace(市, ).replace(自治区, ) return alias_map.get(name, name) df[province_std] df[province_raw].map(normalize_province) df df.merge(province_code_table, onprovince_std, howleft)这里有个容易被忽略的点新疆生产建设兵团在部分来源里是单列的如果你把兵团和新疆的数据直接相加会重复计算如果只取其中一个又会漏掉大片区域的灾情。比较稳妥的处理是保留两行在需要省级口径时只取自治区行需要研究兵团时单独看兵团行并在数据说明里写清楚这件事。3.2 缺失值三种情形三套处理灾害损失数据里的缺失绝对不能一刀切。我通常按性质分成三类区别对待。第一类是真实为零也就是某省某年确实没有达到统计标准的灾情。这类应当填0而不是留空。判断依据是看当年该省是否有灾情通报没有通报的基本可以确定是零。第二类是未单独统计比如某年该省数据被并入邻近区域或者只在某些指标上有值。这类应当留空并在旁边加一个标记列说明原因。用插值法填补这类缺失等于凭空造数据是分析中最忌讳的操作。第三类是指标本身不存在比如早期年份没有分项经济损失。这类缺失是结构性的处理方式只能是限制分析范围或者把分析窗口调整到该指标存在的年份。我习惯在看板上加一个missing_flag列用简短的代码标记缺失类型。看起来多余但等到答辩或者评审阶段被问到这些空白是什么能立刻答上来专业度完全不一样。3.3 单位换算与异常值识别单位换算是纯体力活但有一步值得单独讲就是异常值的识别规则。我一般用下面这段逻辑做初筛。import numpy as np # 1. 逻辑一致性检查面积三兄弟必须保持包含关系 mask_area (df[affected_area] df[destroyed_area]) | \ (df[destroyed_area] df[no_harvest_area]) print(面积逻辑异常行数, mask_area.sum()) # 2. 分省分指标的 IQR 异常检测避免用全局阈值误伤大省 def flag_outlier(group, col, k3.0): q1, q3 group[col].quantile([0.25, 0.75]) iqr q3 - q1 low, high q1 - k * iqr, q3 k * iqr return (group[col] low) | (group[col] high) df[outlier_loss] df.groupby(province_std, group_keysFalse).apply( lambda g: flag_outlier(g, direct_loss_wan) )两个细节值得说。第一异常检测一定要分省做因为各省的量级差太多用全局阈值会把所有大省都判成异常。第二IQR 的倍数我用 3 而不是常用的 1.5原因是灾害损失本身是重尾分布1.5 会把大量真实的极端灾年误标为异常。标出来之后不要急着改先去看那一年的灾情通报绝大多数异常其实都是真实发生过的大灾。3.4 生成标准化指标把绝对量变成可比量原始数据都是绝对量直接做省际比较会立刻退化成大省永远更严重。必须构造强度指标这一步是整套数据能不能出成果的关键。强度指标计算公式单位适用场景人均直接经济损失直接经济损失 / 常住人口元/人省际灾害强度比较损失强度率直接经济损失 / 地区生产总值%灾害对经济的冲击受灾人口占比受灾人口 / 常住人口%人口暴露度农田受灾率受灾面积 / 农作物播种面积%农业脆弱性倒房率倒塌房屋 / 房屋总量%居住暴露度这里有个特别实用的小技巧万元除以万人结果恰好是元每人。也就是说直接用两个数值相除不需要做任何单位换算得到的数字就是人均损失元/人。我第一次发现这个巧合时还挺开心因为它省掉了一整行容易出错的换算代码。但如果两边单位不统一比如一边是亿元一边是万人那必须先把亿元换成万元再除否则结果差一万倍。另外提醒一句计算损失强度率时分母用的应该是当年现价地区生产总值因为损失也是按当年价格估算的两边价格基准一致才有意义。用不变价GDP做分母会引入价格因素干扰属于典型的隐性错误。4. 常见问题与排查实录这一节是我踩过坑之后攒下来的笔记都是常规文档里不会写、但实际操作中一定会遇到的东西。4.1 典型问题速查表现象可能原因处理方式绝收面积大于成灾面积录入颠倒或口径混用回原表核对颠倒则改正混用则留空各省加总与全国数对不上含兵团单列、未含港澳台逐项核减在说明中标注差异原因某省连续多年数据完全一致复制填充未更新高度可疑回源核对后留空某年全省受灾人口骤降口径由窄变宽或反之查该年通报标注断点分析时段避开人均损失超过年人均收入单位错误万元当元检查单位常见差一万倍房屋倒塌数出现小数单位是万间保留小数勿强行取整这张表里我认为最值得警惕的是第三行。连续多年数值完全一致直觉上会觉得这个省灾情稳定但在灾害统计里这几乎不可能发生。我遇到过一整列被复制粘贴的情况如果没做连续性检查这个错误会一路带到结论里。4.2 交叉验证的三个土办法正规的数据校验流程当然要做但下面三个土办法在实操中帮我找出过绝大多数问题。第一是总量校验。把31个省份的某一列加总跟全国口径的数字比。差异在合理范围内比如1%以内就基本可信差异超过5%就必须找到原因。常见原因有三个兵团单列、个别省份数据缺失被跳过、以及少数年份的其他地区项。第二是比率校验。算一下成灾面积除以受灾面积的比值如果某个省份某年这个比值超过0.9要么是那一年确实发生了极端灾害要么是口径出错。正常年份这个比值一般在0.4到0.6之间。类似的还有绝收面积除以成灾面积正常在0.2到0.35之间。这两个比值是我用得最多的体检指标。第三是时间序列平滑性检查。灾害损失年际波动大是正常的但一个省份在没有任何灾情通报记录的年份出现高值或者在大灾年份出现低值就需要单独核实。我一般会画一张省级的小倍数折线图用眼睛扫一遍异常点往往一眼就能看出来比任何算法都直观。4.3 我踩过的几个坑第一个坑是灾种归类的想当然。早期我默认洪涝和暴雨是一回事直到发现某省把台风带来的暴雨单独记为洪涝导致该省台风损失明显偏低。后来我调整了策略做灾种分析时只使用明确的灾种字段不做跨灾种合并宁可牺牲一部分样本量。第二个坑是人口基数用错年份。计算受灾人口占比时我一度用了最近一次普查的人口数做分母结果2004年前后的比值明显偏高。常住人口是逐年变化的一定要用当年数据而且要注意部分省份在个别年份只公布了户籍人口这两种口径不能混用。第三个坑是忽视数据的修订。灾害损失的最终核定往往滞后早期公布的数字和后来年鉴里的数字可能不一致。我的处理原则是统一采用较晚发布的版本因为它是修订后的结果同时保留一条说明记录版本差异。这样即便有人拿早期版本比对也能说清楚差异来源。还有一个小提醒做面板回归时直接经济损失这类变量往往需要取对数但如果某年某省的损失为零取对数会变成负无穷。稳妥的做法是统一加一个很小的常数再取对数或者改用反正弦平方根变换。这类细节不处理模型跑出来的系数会非常难看。5. 拿到数据之后能做什么几类典型分析场景数据整理的终点是分析。这套数据的适用面其实比想象中宽下面是我自己试过或者见过效果不错的三类场景。5.1 省际差异与时间趋势的刻画最基础的用法就是看结构。把19年的省级数据按省份分组画人均直接经济损失的箱线图你会看到非常清晰的分层沿海省份的分布又宽又长说明年际波动大主要受台风和洪涝驱动西北内陆省份的箱体整体偏低但也会出现高位离群点对应的是干旱年份。这种分布形态上的差异比单看均值有意思得多因为它同时包含了暴露度和抗灾能力的双重信息。趋势分析上我建议不要只看总量而是同时看受灾面积和损失强度两条线。有些省份的损失金额在上升主要原因是经济总量增长带来的暴露资产增加而不是灾害本身变严重了如果受灾面积基本平稳甚至下降那说明变化来自暴露度而非致灾强度这个区分对政策讨论非常关键。5.2 损失与经济增长关系分析中的注意事项把灾害损失和经济增长放在一起做回归是这类数据最常被使用的方向但也是最容易得出错误结论的方向。核心问题是内生性经济越发达的省份暴露的资产价值越高同样的灾害造成的损失金额就越大所以损失和收入之间天然存在正向关联这个关联里混着暴露效应和抗灾能力效应方向相反。我自己的处理经验有三条。第一优先使用强度指标人均损失、损失强度率而不是绝对金额能在很大程度上剥离暴露效应。第二一定要加省份固定效应和年份固定效应前者吸收不随时间变化的地理和制度差异后者吸收全国性的价格和统计口径变化。第三如果做因果推断需要找外生的灾害冲击度量比如用气象数据构造的致灾强度指标而不是用损失金额本身——损失是结果不是冲击。另外提醒一句面板回归中的标准误要按省份聚类否则显著性水平会被高估。灾害损失在省内的年度之间相关性很强这不是独立观测。这个操作在很多入门教程里被省略但审稿人一定会问。5.3 可视化与展示的几个实用建议这套数据的可视化潜力很大几个我自己用下来效果不错的做法。地图类展示建议用分级设色而不是连续色带因为灾害损失的分布极度不均连续色带会被少数极端省份拉伸其他省份全挤在一个颜色里看不出差异。分成五到七级用分位数断点效果会好很多。时间序列展示建议用小倍数图而不是把所有省份画在一张图上。31条线叠在一起必然变成一团乱麻拆成按地理分区的几张小图每个小图里放几个省份可读性会提升一个量级。如果要做灾种构成分析堆叠面积图比饼图更合适因为你要展示的是构成随时间的演化饼图只能表达一个时点。用百分比堆叠还能顺带看出结构变化——比如某些年份之后洪涝占比是否上升冷静期是否变长。还有一个小技巧给重大灾害年份加一条竖向参考线并标注当年该省份的灾情概况。这会让图表从数据展示变成叙事读者一眼就能理解那些突刺背后的原因。图表标注这件事看起来是细节但它决定了别人是看三秒还是看三分钟。最后说说我对这套数据的一点个人体会。整理灾害数据的这几年我最大的感受是数据的难点从来不在获取而在于判断哪一部分是真实信号、哪一部分是统计口径的产物。同样是受灾面积下降可能是防灾能力真的提升了也可能只是统计标准变严了同样是损失金额上升可能是灾害变多了也可能只是资产变贵了。每一次下结论之前多问一句这个变化会不会来自口径比多跑十个模型都有用。这套2004-2022年的省级面板数据最大的价值恰恰在于它给了一个足够长的时间窗让你有机会把口径变化和真实变化分开看——19年够看出趋势也够看清噪音。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →