1970—2024年中国CO2排放数据集:省市区县乡镇全覆盖的面板与栅格
2026/9/9 18:54:23 网站建设 项目流程

做碳排放研究的人应该都体会过找数据的痛苦。论文要写省际对比,想画县级排放的空间分布图,结果手上翻来翻去只有一个全国总量,或者撑死了到省级,区县和乡镇一级基本是空白。这组“1970-2024年中国各省市区县、乡镇CO2排放量面板数据、栅格数据”在圈子里传开,不是没有原因的:它一次性把时间纵深和空间粒度都拉满了。时间从1970年一路排到2024年,跨度超过半个世纪;空间上从省、市、区县一直下沉到乡镇,同时提供面板数据和栅格数据两种格式。这意味着什么?做时间序列分析的有连续长序列,做空间计量和制图的有高精度栅格,做面板回归的有现成的统计表,三类需求一网打尽。这篇内容就围绕这套数据产品,把里面的门道拆开讲清楚:它到底是什么、原始数据大概从哪来、面板和栅格两个版本各自怎么用、在科研和实际项目里能解决什么问题,以及我自己处理这类数据时踩过的坑。不论你是正在写论文的研究生,还是给地方做规划的技术人员,或者在企业里做ESG数据支持,这篇文章应该都能帮你少走不少弯路。

1. 从标题拆解这套数据产品的核心价值

1.1 55年时间跨度:价值在于“长周期可比”

先拆时间。1970到2024,这个跨度不是随手定的。很多公开的全球排放数据集,像EDGAR,虽然时间序列也算长,但早期的空间分辨率并不理想。国内早期研究更多依赖能源统计表反推排放,口径在不同年代有调整。一套统一处理后从1970年覆盖到2024年的数据,最大好处是给研究者省掉了自我拼接多个数据源的麻烦。不用再从五六个数据源里各抽一段,再费心对齐口径。直接拉长序列就能看趋势,做突变检验、结构断点分析都方便。

这里需要多说一句时间跨度带来的现实问题:早年的CO2排放数据,很多是靠能源消费量乘排放因子估算出来的,统计基础本身就薄弱。尤其是乡镇一级,早期几乎没有直接的能源统计,很多数据是用夜间灯光、人口密度这类代理变量做空间降尺度推出来的。所以拿到1970年代末、1980年代初的数据,别指望它跟统计年鉴完全一致,把它理解成基于一致方法论的空间分布估算更合理。实际写论文的时候,这种长序列最适合做两段式分析,用早期数据看格局、用近期数据看趋势,各取所长。

1.2 空间尺度下沉到乡镇:粒度带来的研究红利

再拆空间。省、市、区县、乡镇四级,这是一条完整的行政层级链条。过去能免费拿到的公开数据,绝大多数只到省级,县级数据需要自己用人口、GDP加权重拆分,乡镇级基本想都不要想。这套数据把空间分辨率拉到了乡镇,研究视角就完全不一样了。省级数据只能看出大区域差异,区县数据能初步识别热点,乡镇数据则可以精细到小流域、产业园、单体城镇尺度,这对做点源排放特征分析、人口分布与排放耦合研究特别关键。

当然,空间粒度越细,数据的不确定性也越大。乡镇尺度上,很多地方的CO2排放主导因素可能是某个具体工业园或者大型火电厂,这类点源如果用人口或GDP权重去摊,误差会很大。所以看这套数据的时候,脑子里要有根弦:乡镇数值更适合看相对高低和空间格局,不适合拿来做非常严格的总量核算,总量分析还是用省市级更稳妥。换句话说,省市级数据回答“准不准”,乡镇级数据回答“在哪多在哪少”,两者定位不同,用错了场景容易得出偏颇的结论。

1.3 面板数据与栅格数据:同一个事实的两种表达

很多人一看到“面板数据和栅格数据”就发懵,其实这是个经典的双格式设计。面板数据是表格形式,一行代表一个行政单元在某个年份的记录,排放量、行政区代码、所属省份这些字段排成列。它方便做统计建模,写个线性回归、跑个空间计量模型都顺溜。栅格数据是连续的网格,每个像元有一个值,代表这个位置的排放强度。它方便做地图、做空间叠加,比如跟土地覆被数据叠在一起,看排放和土地利用之间的关系。

两个版本对照着用最值钱。面板数据帮你回答“谁多谁少、什么趋势”;栅格数据帮你回答“在哪儿、怎么分布”。举个例子,你想研究某个县的碳排放是不是和建筑密度强相关,用面板数据算出县的排放,再用栅格数据叠城市的夜间灯光或者建筑足迹图层,就能做更精细的空间相关性分析。两个格式本质是同一套底层数据的不同出口,放在一起用,能做的事情比单用任何一个都多。后面讲实操的时候,我会专门说怎么把它们接起来。

2. 理解数据源头:常用数据集与处理链路

2.1 圈子里常用的数据集盘点

先聊一下这个领域目前都能拿到什么。做碳排放研究,绕不开几个常用数据源。

CEADs(中国碳排放核算数据库),国内做碳排放研究用得最多的平台,提供省级、市级甚至部分县级排放清单,覆盖范围比较全,能源相关CO2排放是它最拿手的部分。EDGAR是欧盟联合研究中心做的全球排放数据库,空间分辨率和时间系列都很好,但中国区数据精度放到省市来看有时候会跟国内统计对不上。ODIAC偏向于全球范围的CO2空间分布,基于能源排放和夜间灯光做的降尺度,粗看全球格局很好用。还有中国高分辨率排放网格数据库CHRED,这类产品专门针对中国设计,网格分辨率高,是很多做城市尺度排放研究的人的选择。

这套标题里的数据,本质上就是把类似的原始清单、能源统计、空间代变量整合之后,再统一成一个面板产品和一个栅格产品。所以它比你自己从三四个平台各下载一份再对齐要省事得多。拿到数据的第一件事,我建议不是直接跑模型,而是先搞明白这份数据的“血缘”,追溯它的源头数据和估算口径。很多后续问题的答案都在源头里,比如为什么某年某省的数据跟统计年鉴差了一截、为什么某个沿海县的排放会有明显跳跃,这些往往不是数据错了,而是口径换了。

2.2 从原始清单到高精度栅格:核心处理思路

我更想说的是处理思路。这类数据产品一般会走一条固定的技术路线。

第一步,收集基础活动数据。能源平衡表、分行业能源消费统计是排放核算的大头,加上水泥生产、土地利用变化这些非能源源项。第二步,把分省的能源统计数据分配到更小的空间单元。常用代理变量包括人口密度、夜间灯光强度、道路网络、工业企业点位。这一步是误差的主要来源,不同代理变量分配出来的空间格局差异很大。第三步,用排放因子法或者物料衡算法,把活动数据乘上排放因子,换算成CO2排放量。排放因子的选择直接决定总量大小,这也是不同数据集结果对不上的核心原因。

这套数据产品能做到乡镇尺度,基本摆脱不了这套逻辑。看懂了这个链路,你拿到数据以后就知道该怎么验证了,比如拿省级合计跟CEADs的省级数据去对比,看偏差是否在合理范围内。如果偏差控制得住,说明空间降尺度的过程没有破坏总量信息,后续分析就有了底气。

3. 数据使用实操指南

3.1 面板数据关键字段与清洗要点

拿到的面板数据通常包含这些字段:年份、省编码、市编码、县编码、乡镇编码、行政区名称、CO2排放总量,可能还有分行业的排放量,以及人口、GDP、能源消耗量这类辅助指标。开始建模之前,有几步清洗很重要。

一是检查行政编码的历年一致性。中国的行政区划一直在调整,撤县设区、乡镇合并很常见。同一块地在2000年和2020年可能归属不同代码,做面板数据第一步就是把行政区划代码统一到同一版标准上,否则同一个ID在不同年份代表的区域可能完全变样。二是确认缺失值和零值。乡镇级别的数据每年全覆盖很难,某个乡镇某一年缺失很常见。处理方式要根据分析目的来:如果做趋势分析,宁可删掉个别缺失年份,也别用插值硬填,结果会失真;如果做面板回归,可以用线性插值,但要在论文或报告里明确交代处理方式。

我有个习惯,每次拿到面板数据会先用数据透视表做一次“省份年份双维检查”,看看是否有整块缺失或异常跳变。这个操作不复杂,但能在分析开始前把明显的问题暴露出来,省得后面建模跑出来一堆异常结果再去反向排查。

3.2 栅格数据读取、投影与时间序列提取

栅格产品给的一般是NetCDF或者GeoTIFF格式。NetCDF好处是一个文件能装多年数据,时间维度上节省存储也方便提取序列。GeoTIFF则是一个年份一个文件,做单期地图很方便。

读取和提取在Python里很好实现。比如读取GeoTIFF,可以借助rasterio,几行代码就能把某个像元值读出来。最常用的操作是面元统计,就是拿着行政边界去切割栅格,求一个区域内的平均排放强度或总排放。这个操作我提醒一句,一定要先统一坐标系。栅格数据通常是WGS84或者Albers投影,行政边界可能是CGCS2000,如果不做重投影直接裁剪,结果会有偏移,面积越小偏差越明显。乡镇级别的小面元特别容易出现这种问题。

import rasterio import geopandas as gpd import numpy as np # 读取栅格数据 src = rasterio.open('co2_2020.tif') # 读取乡镇边界 towns = gpd.read_file('towns.shp') # 统一坐标系到栅格坐标系 towns = towns.to_crs(src.crs) # 遍历每个乡镇,计算平均排放强度 from rasterio.mask import mask for idx, row in towns.iterrows(): geom = [row.geometry] out_image, out_transform = mask(src, geom, crop=True) print(row['name'], out_image[0][out_image[0] > 0].mean())

这个思路可以扩展到分年度循环,提取几十年的乡镇序列。写脚本跑的时候,建议把结果直接存成CSV,再把它和面板数据接起来做联合分析,效率高不少。

3.3 面板和栅格如何配合使用

前面说了面板和栅格是两种表达,实操中最好的方案是把它们接起来用。我做过一个比较典型的处理:先用栅格数据做热点识别,找出排放强度显著高的连片乡镇;再回到面板数据里,把这些热点乡镇的时间序列单独提出来,做趋势和驱动因素分析。这样空间发现和统计验证就闭环了,论文里既有空间格局图,又有定量回归表,说服力比单一分析强得多。

另外,栅格数据还可以用来补面板的缺口。某个乡镇某年数据缺失,如果它有完整的历史栅格,直接把对应年的栅格面元统计值当作参考值,比纯插值可靠得多,因为它至少保留了空间分布信息,不是拍脑袋填的数。这个技巧在数据时间序列不完整的时候特别好用,强烈建议试试。

4. 应用场景与落地价值

4.1 科研论文:省级对比与乡镇热点分析

对科研党来说,这套数据最直接的价值是支撑论文里的两个常见模块。

一个是省级或市级的碳排放趋势对比。用一套统一口径的55年长时间序列,做区域差异分解、环境库兹涅茨曲线检验、空间杜宾模型,这些选题在当下研究里都很吃香。数据现成,只要把方法和故事讲好,产出的结果就能落到一篇不错的实证文章上。我自己带学生的时候就发现,很多学生不是不会跑模型,而是卡在数据口径上,如今有了统一长序列,这一步省下了大量时间。

另一个是乡镇尺度的排放热点识别。这在以前有很高的数据门槛,现在有了乡镇精度的数据,可以直接识别出排放强度最高的乡镇集群,再跟工业园区分布、人口流动数据做耦合分析。这里面比较讨巧的做法是结合夜间灯光和污染监测站点数据做交叉验证,论文说服力会强很多。比如你可以画出某个省排放排名前50的乡镇,再叠上它们的产业结构,看排放热点是不是集中在重工业集聚区,这种结论是有明显政策含义的。

4.2 政策评估与规划编制场景

我在帮一些地方做碳达峰路径研究时,最缺的就是分区域、分年度的排放底数。一个市要摸清下辖区县和重点乡镇的排放家底,用这套数据能快速出底图,再结合产业结构做情景分析,工作量和报告质量完全是两个档次。如果没有这类数据,很多报告只能算到全市均值,落到街道和园区时就缺乏依据,可操作性差很多。

另外一个常用场景是碳汇和排放的空间匹配研究。做县域范围的碳中和评估,既要算排放也要算碳汇,排放端用这套数据的栅格版,碳汇端用土地利用和森林资源数据,两边叠在一起,就能算出县域尺度的净排放空间格局。这种分析对做生态补偿、低碳发展规划都特别有参考价值,能让“双碳”从口号落到具体的空间地块上。

4.3 企业ESG与商业咨询场景

可能有人觉得这是研究机构的专属,其实企业端用得越来越多。我在做ESG数据支持的时候发现,很多上市公司需要披露运营地所在区域的碳排放背景数据,用来做碳排放强度对比或者选址评估。工厂选址在哪个县、哪个乡镇,周边区域的碳排放本底是多少,用这套数据能快速给出一个量化的环境背景值。虽然它不是企业自身的直接排放,但作为区域环境风险评价的一部分,已经越来越是刚需了。

此外,一些做绿色供应链的咨询公司也会用到这类数据,帮客户评估供应商所在区域的碳排放压力,判断供应链上的气候风险分布。以前这类数据很难获得,现在有了连续多年、覆盖乡镇的产品,咨询报告里能把区域碳排放画像做得很细。

5. 常见问题与排查技巧实录

5.1 省级合计对不上怎么办

拿到数据第一个习惯性操作,应该是把面板数据的省级合计跟官方口径核对一下。如果差异在10%到20%以内,基本属于不同核算边界和排放因子导致的正常偏差。要是差异超过30%,就得仔细看口径了。最常见的原因是能源排放因子取值不同、非化石能源占比处理方式不同,或者是否包含了非能源活动排放。遇到这种情况,我一般建议在报告里直接引用数据产品本身的技术文档,别自己去改数,一改就破坏了数据的一致性。

还有一种情况是面板数据里某省某年的数值和全省年鉴对不上,这时候先别急着怀疑数据有问题,回头检查一下当年的行政区划,看看是不是有新设地级市把能耗重新切分了。行政区划调整导致的“数值突变”,在长面板数据里很常见,处理得当是可以合理解释的。

5.2 栅格与行政边界不匹配

这是空间分析里最容易出问题的地方。我之前做乡镇面元统计,发现边界的乡镇数值明显偏高,检查了半天才发现是投影没统一。另外一个常见问题是格网分辨率跟分析尺度不匹配。比如栅格分辨率是1km的,而你要分析的是不足几平方公里的小镇,这时候很多镇可能只有一两个像元,统计出来的数值噪声会很大。解决办法要么换更高分辨率的数据,要么在结论表述上多用“趋势性判断”而不是精确数值。

还有一点经验:如果你的研究区在西南山区或者沿海岛屿,乡镇边界特别碎,切割出来的像元面积很小,这时候用像元均值会比总值更稳定,因为均值对面积误差不敏感。这个细节虽然小,但能帮你避免很多分析结果的解释尴尬。

5.3 时间序列断点怎么处理

长期序列里出现断点几乎是必然的。行政区划调整会造成范围变化,统计口径也会变。我常用一个笨办法但很有效:把断点前后三年的数据都拉出来,看趋势是否平滑。如果前后趋势自然衔接,说明断点只是命名或编码更换,不影响分析;如果出现跳跃式回落或翻倍,就要怀疑口径变化了,这时候把分析窗口放在断点之前或之后,或者加一个虚拟变量做回归控制,都比不理它硬跑要好。

处理断点的另一个思路是做对数差分或增长率序列。一阶差分能消除大部分水平值层面的口径影响,让断点问题变得不那么严重。这个方法在产出物是“增长率”或者“弹性系数”的时候尤其好用。

6. 数据版本选择与使用前的准备工作

6.1 面板版和栅格版怎么选

如果做统计分析为主,比如面板回归、行业驱动因素分解,选面板数据就够,处理效率高,数据量小。以空间可视化、制图、空间计量为目的,选栅格数据。两者都有精力做联合分析当然最好,但考虑到学习成本和电脑性能,我更建议从核心需求出发先选一种,不要为了齐全而全收。我见过不少入门者兴致勃勃地下载了全套数据,结果光是处理NetCDF文件就花了两周,项目进度反而被拖累。

如果你主要用的是ArcGIS或者QGIS做图,那栅格版是首选;如果你习惯于用Stata或者Python的pandas做计量回归,那面板版够用了。先想清楚输出是什么,再决定下载哪种格式,能省很多不必要的折腾。

6.2 使用前准备:软件环境与目录规划

拿到数据以后,建议先建立规范的项目目录。用R或者Python都可以,保证可复现。举个例子,我在本地一般会建四个文件夹:data_raw放原始数据、data_processed放清洗后的中间文件、code放处理脚本、output放图表和结果表。这样无论是自己回看还是跟合作者交接,都非常清晰。

另外注意大文件读取压力。覆盖全中国多年份的NetCDF文件有时候有数GB,内存不够容易崩。建议先用裁剪工具把研究区切出来,再对子集做运算,速度和稳定性都会好很多。做时间序列提取时也是一样,别一次性加载全部年份,用循环每年读、每年提,内存占用能降一个数量级。

这篇内容到这里,核心的东西就都讲得差不多了。最后再分享一个经验。做这类数据产品的研究或者业务分析,建立自己的校验流程特别重要。我每次拿到一套新的碳排放数据,都会先做四步检查:行政区编码是否一致、时间是否连续、省市级合计大概对得上、栅格和面板是否互相印证。四步走完没有问题,这套数据基本可以放心用于后续分析。这个习惯看起来简单,但在实际项目中帮我排掉了好多雷,建议你也建立一套自己的流程,不用额外写复杂脚本,Excel加几个透视表就能完成大半。

另外,如果你决定拿这套数据发文章,我建议在方法部分尽量写清楚数据来源和估算口径,审稿人对数据部分通常盯得很紧。要是能在附件里附上自己编写的清洗和校验脚本,审稿体验会好很多,也显得工作扎实。数据本身是死的,怎么把它用得稳、用得透,才是真正见功夫的地方。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询