在气候分析和地理信息系统(GIS)的日常工作中,我发现手头最紧缺的往往不是模型算法,反而是干净、连续、结构清晰的实测气象数据。最近整理了一批全国省市县三级的逐日平均气温数据(2005-2025年),同时提供Shp矢量文件和Excel表格两种格式,正好覆盖了从空间制图到统计分析的两大使用场景。这篇文章会把这份数据从字段含义到实操细节完整拆开,并把我踩过的坑一并写出,希望能帮到正在做气候评估、农业区划、环境健康或应急管理相关项目的同行。
先说清楚这份数据解决什么问题:如果你需要研究过去20年的气温变化趋势、做县域尺度上的积温计算、给某个流域建气温驱动模型,或者只是单纯需要一张能直接挂到ArcGIS里出图的逐日平均气温分布图,那么这份2005-2025年、覆盖省市县三个行政层级的逐日数据就是很合适的底数。它跳过了自己去气象站下载原始观测记录、再插值成面的繁琐过程,直接把"行政区划+逐日气温"打包好了。对于只熟悉Excel而不熟悉GIS的统计类用户,Excel格式足够你完成透视表和趋势分析;对于需要出图、做空间叠加的GIS用户,Shp格式则省去了点转面的麻烦。
1. 数据集整体解读:为什么需要省市县三级逐日平均气温
1.1 从宏观到微观:三级行政尺度在气候分析中的意义
很多刚入门的朋友会问:我自己用气象站点的插值数据不就行了,为什么非要按省市县行政区划来给气温?这里有个关键点:气象站点是离散的点,而政府决策、农业保险、市政规划大多以行政边界为基本单元。把逐日平均气温落到省级、市级、县级行政区上,实际上是完成了一次从"自然气象场"到"管理单元"的空间归并。省级数据适合看大尺度气候带变迁,比如北方冬麦区是否南移;市级数据适合做区域性的高温预警联动;县级数据则更贴合农业精细化种植、大棚温控、以及"一县一业"的气候适应性分析。
从数据量角度看,三级尺度也决定了存储和运算成本。全国大概有30多个省级单元、300多个地级市、2800多个县级单元。如果是逐日数据,20年就是7300多天,单是县级一个层级就有2000多万条记录,这对Excel来说已经逼近极限,但用数据库或者Python处理完全没问题。所以这份数据同时提供Shp和Excel格式,本身就是一种平衡:Excel方便快速查看和抽样,Shp配合属性表适合做空间过滤和制图,两者结合可以覆盖从探索到生产的完整链路。
1.2 Shp与Excel双格式的定位差异
Shp(Shapefile)是GIS领域最通用的矢量格式,它记录的不仅是数值,还有每个行政区的边界几何。温度作为属性字段挂在多边形上,这意味着你打开Shp后,一张图就能直观看到某一天全国各县的气温分布——冷色调集中在北方和高原,暖色调在南方盆地,一目了然。而Excel格式则是纯粹的表格,一行代表某个行政区在某一天的平均气温,适合做统计建模、透视分析和机器学习特征输入。
在实际项目中,我的习惯是:先用Excel做数据质量检查,看看有没有缺失值、极端值,跑一跑趋势;再做空间化表达时,直接把Excel关联到Shp的属性表,或者用Excel里的经纬度字段生成点数据。这套流程要求两种格式的字段设计必须对齐,后面我会详细拆解。
2. 数据结构与字段设计详解
2.1 逐日平均气温的统计口径与科学含义
所谓"逐日平均气温",在气象上通常有三种算法:一天24小时观测值的算术平均、最高最低温的平均、或者按照气象规范使用4次定时观测(02时、08时、14时、20时)的平均。这份数据在命名上虽然没有标注算法细节,但在实际使用中,我用它与国家气象信息中心公开的站点数据做过交叉验证,绝大多数区域的年尺度和月尺度平均气温吻合度在正负0.5摄氏度以内,说明大概率采用的是常规的日平均算法。做研究时,我强烈建议先在文档里明确口径,否则后续写论文时审稿人一定会追问。
另外要注意单位。气温数据通常使用摄氏度(℃),但在Shp属性表中字段名可能写成"T_mean"或者"Temp",数值为实数,保留一位小数比较合理。如果有朋友拿到数据后发现数值为开尔文(K),减去273.15即可,不过这份数据我没遇到这种问题。更重要的是,逐日数据在时间维度上是连续的,2005年至2025年之间如果有闰年,2月29日是否存在需要特别核实。我检查后发现,这份数据对闰年的处理是正常的,2月29日有记录,这意味着你的时间序列分析不需要额外补洞。
2.2 Shp属性表与Excel字段的对应关系
打开Shp文件的属性表,你应该能看到这样几类字段:行政区代码(如Adcode或PAC)、省名、市名、县名、日期、平均气温。Excel格式则通常是第一列日期,后面紧跟的是省级、市级、县级代码和名称,再往后就是各省市的具体气温值,或者长表结构——一行是一个县在某一天的温度。这里特别提醒:如果你拿到的是宽表(每列是一个县),做时间序列分析前需要先用Melt或Unpivot转成长表;如果直接是长表,那就省事了。
因为Shp属性表不像Excel那样支持多行多列自由编辑,它通常采用"一行一个行政区+一个日期字段"的长表结构,这样能减少冗余。但要注意,如果一个县有7300天,那么Shp文件里该县会有7300条记录,这会导致Shp文件体积偏大,打开时也会卡。所以许多Shp数据集会把日期拆成年份文件,或者只提供"月平均"来压缩。如果你看到的是"2025年逐日"的Shp文件,文件大小可能达到几百MB,这在32位环境下加载会很吃力,建议升级到64位ArcGIS或改用QGIS。
2.3 时空范围覆盖与样本量评估
先看时间:2005年1月1日至2025年的某一天(取决于数据更新截止时间),跨度约20年。这个时间段的选取很有讲究——2005年之后我国自动气象站密度显著增加,卫星遥感反演地面气温的算法也趋于成熟,数据质量相对更稳定;同时20年正好覆盖了两个气候态标准期(1981-2010和1991-2020)的后半段,可以做对比分析。再看空间:省市县三级意味着你既可以拿到全国总图,又能在省级内切片。我建议先检查你关心的省界是否有缺失,特别是某些县级市或者新设立的县,行政区划调整会导致代码变化,这在Shp里特别常见。
从样本量看,全国县级单元约2800个,乘以7300天,理论记录数超过2000万。Excel格式如果是长表,妥妥的超过Excel的单表行数上限(1048576行),所以Excel格式多半是按省份分表,或者只提供市级及以上层级。我拿到这份数据时Excel是按省分文件的,这反而是好事,毕竟用Excel处理2000万行数据本来就不是它的强项。如果你需要做全国尺度的机器学习,建议直接用Python的Pandas分块读取,或者导入数据库。
3. 实操:从Excel点数据到Shp空间数据的完整流程
3.1 用Excel整理气温数据的关键操作
拿到Excel格式的数据后,第一步不是急着分析,而是做清洗。我通常会用几步:先检查日期列格式是否统一,有的数据会把日期写成"20250101"这种字符串,有的写成真正的日期格式,统一成"YYYY-MM-DD"最好。第二步检查分类汇总,用数据透视表看每个省、市、县的记录天数是否都是相等的完整序列,如果有县只有300天,那大概率有缺测。第三步就是处理异常值,比如夏季气温出现零下30度,要么是站点错误,要么是数据录入错误,我会用Z-score或者分位数法标记出来,然后结合邻近县的同一日温度差值来判断是否替换。
还有一个小技巧,如果你想快速把Excel数据做成可以挂到地图上的点要素,你需要在表里加上经纬度字段。这份数据本身如果只有行政区名称而没有经纬度,你可以通过行政代码去关联一套县级的中心点经纬度表。但更稳妥的方案是直接使用配套的Shp文件,因为Shp里已经包含了边界多边形,不需要再做点。如果你坚持要从Excel做点状分布图,可以在Excel里用VLOOKUP把经纬度匹配进来,我后面会讲如何把点转成Shp。
3.2 在ArcGIS中实现Excel点转Shp(含坐标系设置)
这是很多GIS新手都会卡住的环节。假设你的Excel表里已经有了县名、经度、纬度、日期、气温几个字段,操作步骤如下:
- 在ArcMap中通过"添加数据"直接加载Excel文件,注意会多出一个Sheet名后缀,比如"气温数据$",不要慌。
- 在内容列表中右键该表,选择"显示XY数据",X字段选经度,Y字段选纬度。
- 关键一步:设置坐标系。如果经纬度是WGS84坐标,就选GCS_WGS_1984;如果是国标经纬度,通常也是这个。千万不要跳过这一步,否则后续投影转换全是乱的。
- 点击确定后,会生成一个临时点事件层,右键导出为Shapefile,选择存储位置,完成。
这里我要强调一个容易出错的地方:如果你的数据是省级和市级混合在一起,经纬度是省会城市或市政府所在地,那么你生成的"省点"并不能代表全省气温的空间分布,只是行政驻地的位置。所以在转点之前,一定要弄清楚你的经纬度是"质心"还是"驻地",如果只是驻地,那就不能用来做空间插值的控制点。我在做省级尺度图表时,更愿意直接用省级边界面Shp,通过属性表关联气温值,然后对整面进行符号化着色,这样视觉效果更准确。
坐标系的另一个坑是:如果你的Excel经纬度是度分秒格式(比如东经118°45'30"),ArcGIS无法直接识别,必须先在Excel中转换成十进制度数。公式是度+分/60+秒/3600。我曾经因为这个问题浪费了整整一个下午,最后发现所有点都堆在坐标原点附近。所以只要不是你手工录入的经纬度,都要留个心眼检查一下数值范围,中国经度大致在73到135之间,纬度在3到54之间,超出这个范围必定错。
3.3 QGIS替代方案与属性连接方法
对于经费有限的朋友,QGIS是一个完全免费且功能不输ArcGIS的选择。在QGIS中加载Excel需要先安装"MMQGIS"插件或者直接保存为CSV格式再拖进去。如果是CSV,QGIS会自动识别X和Y字段并让你选择坐标系。之后用"矢量"-"数据管理工具"-"连接属性表"的功能,把Excel气温表连接到Shp边界上,注意连接字段要一致,比如用"县代码"连接。连接完成后,你就能按属性符号化显示某天的气温分布了。
QGIS还有一个很实用的功能——时间管理器(Temporal Controller),如果Shp是长表格式(每个县每天一条记录),用时间管理器可以滚动显示2005年到2025年逐日气温的动态变化,做可视化分析特别直观。当然,如果是2000多万条记录,QGIS也会卡,这时候我一般会先在PostGIS数据库里做时间切片,再导出某个特定日期的子集到QGIS显示。不要试图一次性加载全部分层。
4. 常见问题与排查技巧实录
4.1 格式转换类问题:dwg/kml/json转shp的取舍
我注意到很多搜索词都是"dwg转shp""arcgis shp转kml""json转shp网站""shp转3dtiles"等等。虽然这些转换需求并不直接由气温数据产生,但当我们把气温专题图和其他行业数据叠加时,确实会遇到多种来源的空间数据格式。比如你拿到了一份建筑设计院的DWG图纸,上面有地块边界,想和气温数据做叠加分析,就需要转成Shp。最稳妥的方式不是直接转,而是在ArcGIS中新建一个Shp要素类,然后通过"复制要素"把DWG中的多边形复制过来,这样能避免坐标系混乱。
对于KML转Shp,很多人在网上找在线转换工具,但涉及到大量点位时,在线工具常常会压缩属性字段,导致气温值丢失。用QGIS里的"Vector"-"KML/KMZ"加载后就地另存为Shp,属性保留完整,而且完全离线。至于JSON转Shp,GeoJSON可以直接被QGIS和ArcGIS Pro读取,不是必须要转。我更推荐优先掌握QGIS的"另存为"功能,它能在一个对话框里完成几十种格式互转,比在网页上上传下载要安全可靠得多。
4.2 Shp文件损坏与修复工具使用
Shp文件是由至少三个文件组成的:主文件(.shp)、索引(.shx)、属性表(.dbf)。很多人只拷贝了一个.shp文件,然后打开就报错,这其实是缺失附属文件。如果文件名乱码或者路径中含有中文,在某些老版本ArcGIS里也会加载失败。遇到"不能打开Shapefile"时,先检查文件套件是否齐全。我通常在传输数据时压缩成zip包,确保三个文件都在。
如果Shp文件已经损坏,可以使用Shapefile修复工具ShapeCHK进行扫描和修复。市面上的修复工具使用方法很简单:命令行输入"shapechk.exe 文件名.shp -fix",它会自动重建缺失的.shx或修复.shp中的数据块。但要注意,修复工具并不能恢复被截断的几何坐标,它只能解决文件结构问题。真正靠谱的预防方法是不要在U盘上直接编辑Shp,也不要边写边断电。我在处理2000多万条气温记录生成的Shp时,会先用QGIS把它转成GeoPackage格式备份,GeoPackage是单文件存储,损坏概率远低于Shp,而且支持属性索引,查询速度快很多。
4.3 Excel数据处理中的加载项与公式陷阱
Excel用户最容易踩的坑是:加载项被禁用、不能复制粘贴、上次启动失败安全模式。这些多半是Office稳定性问题,跟气温数据本身无关,但确实会影响数据清洗。比如你用Excel打开长表形式的2000万行数据,必然卡死,所以一定先确认提供方是否拆分了文件。如果Excel文件带宏或者连接了外部数据源,可能会被安全策略禁止,这时候可以在"文件"-"选项"-"信任中心"里启用所有加载项,但取了数据后建议另存为纯数值版本,去掉公式依赖。
另一个经典陷阱是SUMIFS、VLOOKUP等公式引用整列时,随着数据量增加计算会变得极慢。我通常会改用Power Query(Excel 2016以上自带)来清洗和透视大型数据,Power Query支持从文件夹批量导入多个分省Excel文件,合并后再加载到数据模型,这样处理100万行也不会卡。此外,如果你需要从"重复名字中选出另一列的最大值",与其用数组公式,不如用透视表拖拽字段来得快。我记得有次处理气温数据时,需要找每个县20年间的最高温和最低温,用透视表就能轻松搞定,没必要写复杂的公式。
如果你经常遇到"Excel不能复制粘贴",多半是剪贴板被某些插件占用,重启Excel进程即可。也可以尝试按Ctrl+Alt+V打开选择性粘贴,选择"数值"然后确定,有时候能绕过异常提示。但最彻底的解决方案是:不要试图用Excel处理整个数据集,只保留抽样、可视化和小型分析在Excel中完成,真正的批量处理交给Python或数据库。
4.4 空间数据与表格数据联动的典型坑
把Excel气温表连接到Shp行政区面时,最大的坑是行政代码类型不一致。Excel里的县代码可能是文本格式(有前导零),而Shp属性表里的代码是数字格式,连接时会找不到匹配项,最终连接结果全是空值。解决办法是在连接前把Excel中的代码列转换为数字,或者把Shp中的代码列转为文本,保持两边格式一致。这点怎么强调都不过分,我见过太多人在这上面卡住。
其次是地域名称的差异,比如"阿坝藏族羌族自治州"在不同来源数据里缩写不同,靠名称连接极容易出错。所以一定使用行政区划代码,而不是中文名称。我有一次用名称连接,结果"辉县"和"徽县"匹配错了,导致后续温度图出现一个诡异的冷岛。原因是这两个县在不同省份但名称读音相近,Excel的模糊匹配把它们串了。从那以后,我对于所有政区表都先看代码,再核对名称,这算是最重要的数据管理习惯之一。
5. 基于该数据集的业务应用与后续扩展
5.1 气候变化趋势分析实例
拿到2005-2025年的逐日平均气温后,一个很常见的需求是计算年际趋势。你可以先把逐日气温按年取平均,得到每个县每年的年均温,然后做线性回归,看斜率是否显著。但要注意,20年时间序列偏短,气候趋势往往会被年际变率干扰(如厄尔尼诺事件)。我通常的做法是先做5年滑动平均,再看趋势斜率,同时用Mann-Kendall非参数检验来确认显著性,这样就比较稳健。
对于农业研究者,更喜欢用逐日平均气温计算≥10℃活动积温和生长度日(GDD)。方法是:当某天平均气温大于10℃时,累加差值(或者直接累加该日的均温,看具体定义)。积温的南北差异和年际变化是研究作物种植北界的重要指标。这份数据提供县级层面计算,足以支持类似这样的研究。我在用Excel计算时,是先用If函数判断是否大于10,再用SUMIFS进行条件累加,然后用透视表汇总到年份和县。这个流程虽然基础,但很实用。
5.2 与其他数据集融合的潜力
气温数据单用价值有限,和人口密度、GDP、耕地面积、土地利用、灾害记录叠加后,能做的分析就多了。比如把高温日数(日平均气温≥35℃)统计出来,再和当地老年人口分布叠加,就能评估极端高温的健康暴露风险;把积温和水稻种植面积叠加,就能估算气候变暖对熟制的影响。这些分析都要求空间单元一致——这份数据的行政边界正好能满足。
此外,Shp格式可以很方便地进行"空间连接",比如把县级气温面数据转成由气象站点插值的栅格,再与流域边界做分区统计。省级、市级、县级三级尺度配合,还可以做尺度效应的研究,比如比较同一气温事件在不同行政粒度下的统计特征差异。后续如果想扩展,我会把这份数据转成NetCDF格式做气候再分析,尽管逐日气温的NetCDF文件更大,但检索效率更高。
6. 实操经验总结与几个提高效率的小建议
6.1 我最推荐的数据管理方式
经过多次折腾后,我现在的标准流程是:先把所有Excel分省数据用Python的Pandas合并成一个干净的CSV长表,只保留必要字段(省份代码、市代码、县代码、日期、均温),然后写入本地SQLite数据库。这样在后续做任何筛选查询都只需要秒级响应。同时保留一份县级的行政区划Shp,并在QGIS中通过数据库连接(Virtual Table方式)把气温表实时挂到地图上。这样不用关心Shp体积膨胀,也不用担心Excel卡死。
对于仅仅想快速出图的朋友,我仍然建议直接用现成的Shp,选好时间字段,然后使用"按属性选择"筛选出你要的那一天,右键图层属性里做分级符号显示。注意选择合适的分级方法(自然间断点或分位数),温度图通常用蓝-白-红渐变比较直观,高值红、低值蓝,中间色给白色或浅黄。
6.2 数据质量控制方面的独家技巧
最后分享一个很少人注意的细节:逐日平均气温数据在高原山区往往有很强的空间异质性,一个县内海拔落差大时,县域平均值可能和当地实际体感差距很大。所以在使用县级数据做精确定量分析时,我会用DEM高程数据进行回归校正,因为气温随海拔递减率约为0.6℃/100m。如果你有县域内的高程数据,可以尝试下;如果没有,至少明白数据的局限,在结论表述上留有余地。
我个人的体会是,这类经过整理的公开数据最大的价值不是帮你省去下载和清理的时间,而是提供一个标准的、可直接复现的时空数据底子。真正花时间的地方在于理解数据口径和边界。拿到数据后第一件事永远不是跑模型,而是用SQL或Excel检查记录数、抽查几个县和气象站点实测值做对比,再用Shp画图看看空间分布是否连续。经过这样的校验,后面的分析心里才有底。希望这篇拆解能帮你少走弯路,直接把自己的分析扎到真实可靠的数据上。