这套“1901-2024年我国省市县三级逐年平均气温数据Shp/Excel格式”我最近刚刚完整跑过一遍筛选、统计、出图的全流程顺手把经验整理出来。它本质是一套覆盖124个年份、精确到县域行政边界的逐年平均气温格点统计结果同时提供两种格式Shp为GIS专用矢量边界属性的组合包Excel则是给数据分析师用的轻量表格。适合GIS开发、城市规划、农业区划、气候风险和教学演示等场景不管是想画一张“某年某县多少度”的专题图还是想算“过去100多年哪些地方升温最快”这套数据都能直接上手。1. 数据资源拆解年份长、尺度细、格式双轨1.1 两种格式各解决什么问题很多人第一次拿到这套数据会懵同一个内容为什么又是Shp又是Excel我的理解很简单Shp是用来“看空间关系”的Excel是用来“算数值规律”的。Shp格式是矢量面数据每个行政单元省、市、县对应一个带边界的几何要素属性表里存着气象字段。你可以把它直接拖进ArcGIS、QGIS、GeoDa等软件按年份字段做分级配色或者把多个年份的字段做差值对比。它的优势是“看得见边界”一张县级温度图拉出来整个区域的冷暖分布一目了然。设计上通常会用一个面要素代表行政区的几何要么是“一个县一个面属性表里有多年的温度列”要么是“每一年一个面文件名单独标记年份”两种组织方式我都在处理中遇到过建议先打开属性表确认字段结构。Excel格式则是典型的表格型数据行是行政区列是年份或温度值适合用透视表、函数、图表做统计分析和画趋势线。如果你只会用Excel不碰GIS也能完成大部分省级、市级的汇总计算。最理想的工作流是Excel里做完清洗、筛选、汇总把结果再通过唯一代码连回到Shp上出图。1.2 这套长序列气温数据的“前世今生”数据时间跨度从1901到2024整整124年这对国内大部分城市站点观测记录来说已经远远超过其建站历史。为什么能做到这么长我理解这类产品多数是基于全球再分析资料或长时间序列插值生成的高分辨率栅格气温数据再通过“分区统计”的方式落到县级行政区得到每个县域的年平均气温。所谓“分区统计”就是把栅格像元的值按行政边界范围内做算术平均这样每个县最终只有一个有代表性的年均温数值。当年做类似项目的时候我有一段时间被“站点数据到底存不存在空间代表性”这个问题卡住。后来想通了站点是点行政区域是面面内可能会跨越山地、谷地、水体直接拿站点插值会造成偏差。而这套数据因为已经做了空间化处理使用起来反而更省心。需要注意的是它反映的是区域宏观气候背景不能替代某个县气象站的精确实测记录做趋势分析、相对排序、区域对比完全够用但如果你想要某一天、某一个点的精确极值那得另找原始站点数据。1.3 时间广度和行政尺度带来的想象空间时间连续性是这套数据最值钱的地方。124年意味着可以做年际变化趋势、滑动平均、突变检验、回归模型甚至可以切出30年气候标准期做对比。行政尺度上省、市、县三级足以支持“从宏观到微观”的递进分析。比如省级层面看全国升温格局市级层面看某个地区气候带的移动县级层面看具体县域农业热量资源的变化。我做过一个很直观的实验把2000年、2010年、2020年三个年份的县级年均温分别做成专题图按温度重分类然后叠加在一起看那条“暖线”往哪个方向移动。这种操作如果只用Excel表格很难产生视觉冲击而用Shp做分层设色地域变化一眼就能看出来。所以从价值取向上这套数据不是单纯的数据包而是一把打开“气候变化与地理空间”交叉分析的钥匙。2. Shp格式实操从加载到出图的完整路径2.1 Shp比栅格更好用的三个理由拿到Shp最常见的问题就是“为什么不直接给我TIF栅格”。因为对于“省市县三级”这种行政统计单元矢量面有不可替代的优势。第一行政边界精确。栅格是按规则网格划分的落在边界上的像元像素会“跨界”导致面积统计不准矢量面则严格贴合行政区划统计结果直接对应到县界。第二属性表天然支持外部连接。你可以把Excel数据根据县代码连接进Shp属性表不需要做任何栅格重采样。第三制图表达灵活。符号化时按分类字段设置颜色还能调整透明度、边框、标注这些栅格都做不到这么顺滑。2.2 在ArcGIS里五步画出一张县级年均温专题图我习惯用ArcGIS做这种矢量出图QGIS操作也类似但ArcGIS的制图布局更顺手。具体流程如下打开ArcMap或ArcGIS Pro把下载好的Shp包解压确保.shp、.shx、.dbf、.prj四个文件在同一个文件夹里不要只拖入.shp。在图层面板右键图层打开属性表先看字段结构确认是否存在某个年份字段比如“temp_2020”或者是否已经包含年份行。如果只有一个“平均气温”字段那通常一个年份就是一个单独的数据面。右键图层选择“符号系统”选择“数量分级色彩”字段选目标年份。分类方法建议先用“手动”设置为4到6类让图例清晰而不是自动分得很碎。在布局视图插入图例、比例尺、指北针再添加标题。出图之前一定要检查图层坐标系如果底图是WGS84或CGCS2000保持一致否则会出现边界漂移。如果要出多年份对比图可以通过“创建渔网”或者复制图层来分开符号化更规范的做法是用“按属性选择”或定义查询来控制显示年份。这个过程最花费时间的是“字段名对应的年份不直观”。有些产品年份字段会命名为Y1901、Y2020或者用短名T_2020我建议拿到数据后务必写一个字段对应表否则引用字段容易出错。我在某个项目中吃过没查字段的亏把一个“基准期”字段当成“当前期”做了图算出来的增量完全反了后来花了一下午才检查出来。2.3 批量出图时如何把Excel统计表“塞进”布局里这个需求其实很常见在GIS地图旁边放一个小的Excel统计表比如“各省升温幅度Top5”。很多人发现ArcGIS布局里无法直接嵌入活页面表只能截图或导出图片再放进来但这样更新数据后图片不会联动。我的处理办法有两种一种是利用ArcGIS的“报表”功能先根据需要生成统计报表再以对象的形式插入到布局中这样可以随数据源刷新缺点是需要花时间设置报表的边框和字体。另一种更常用导出Excel为高分辨率PNG用“布局”窗口里“插入图片”功能放置到图框旁边。为了保证图片透明背景制表时不要填充底色这样插入后和地图排版融合得更自然。如果追求更高级的效果可以做一个“数据框”嵌套在布局里再插入一个小数据框数据框显示长条图或者柱状图然后导入Excel对应数据。总之“批量出图”的规模越大越要把统计表、图例、标题做成模板一次设置后续自动套用。2.4 Shp格式转换从dwg、txt、3dtiles到GeoJSON热词中有人搜“dwg转shp”也有人搜“shp转3dtiles”。对于前者通常是CAD设计图里要带出行政区线或地块属性转Shp时最要紧的是坐标系匹配建议在ArcGIS中使用“CAD至地理数据库”工具避免直接拖拽DWG后坐标系混乱。对于后者如果想做三维可视化把二维Shp转成3D Tiles可用CesiumLab、ArcGIS Pro的“创建3D切片”或QGIS插件需要先根据“县面”做拉伸高度场再叠加温度属性。如果是简单的临时转换我会用QGIS“仅导出要素另存为”直接存GeoJSON或使用ogr2ogr命令行比如ogr2ogr -f GeoJSON output.json input.shp -t_srs EPSG:4326这种灵活度是ArcGIS菜单操作给不了的。不过我的原则是能用专用工具做完整工作的不要随便转格式。3D切片需要的LOD、属性索引很讲究一看上去“转换成功”不代表“渲染正确”建议转完以后在浏览器里检查瓦片层级和属性挂接。3. Excel格式实战清洗、统计、趋势一锅端3.1 拿到Excel表后的第一件事不要急着算平均大多数分享这套数据的Excel表列结构可能是“省、市、县、代码、1901、1902、……、2024”也有可能是“行政区、年份、平均气温”的长表模式。宽表适合人看长表适合机器算。我拿到后第一件事就是先分列、再统一格式。常见问题有三个一是“年份列”被识别成文本这是Excel自动处理中文表格的顽疾尤其是从CSV转过来的数据年份列左侧会有一个绿色三角用AVERAGEIF会直接出错需要选中列后点击“转换为数字”或分列直接转。二是气温值可能存在负值尤其是北方冬半年按区域选中以后在格式设置里不要简单设置成“0.0”就完事还得设置“-0.5”的负号显示。三是有缺失值。有些年份可能因为没有观测或插值失败在单元格里显示#N/A或空白。我用筛选功能把空值标记清楚再用插值补全或直接剔除千万不能让空值参与SUMIFS计算。3.2 三组Excel公式轻松做气候趋势分析如果你的需求只是“计算某省某市近30年的平均气温变化”通常不需要去写复杂代码Excel函数完全够用。AVERAGEIF用于按区域求均值。比如表格是宽表你想算河北省所有县域2020年的平均温度先建一个辅助列用省份字段作为条件区域再指定平均区域。注意条件写“河北”如果存在“河北省”这种带“省”字的后缀得用通配符*河北*。SUMIFS用于多条件求和比如要统计“东北地区2020年以后年均温大于10度”的县域累计值可以把地区、年份、数值三个条件同时放进去。这里必须保证年份字段是数字否则条件判断会失败。SUMPRODUCT用于更复杂的统计比如“两个条件下数量占比”。我用它做过一个“有多少县近20年年均温超过历史平均”的快速判断公式短且高效。热词里有人搜“同一列中统计含关键词对应数据求和”这个场景就是在区域内筛选后再汇总。我推荐用辅助列配合ISNUMBER(SEARCH(关键词,A2))生成0或1的布尔值然后再用SUMIF或SUMPRODUCT。比直接在一列上做嵌套判断要简单得多还能随时保留中间结果。3.3 用数据透视表快速汇总到省、市两级县域数据动辄几千条直接看原始表根本看不出格局。我会在额定好的字段基础上插入数据透视表行区域放“省”列区域放“年份”值区域放“平均气温均值”。这样一下就能生成一张“省×年”的透视矩阵。再配合折线图就能看到各省升温曲线的斜率差异。注意透视表默认汇总方式是“求和”在值字段设置里一定要改成“平均值”。另外宽表结构直接把“1901、1902……”都拖到列区域会产生极宽的透视结果不适合做图。我会用Power Query把宽表逆透视Unpivot成长表再做透视表。具体操作数据→获取数据→从表格/区域→选择所有年份列→逆透视列。这样生成的“属性”和“值”两列再做透视和画折线图都轻松很多。热词里的“excel处理框架”“excel做z-score标准化”本质也是先逆透视然后标准化。Z-score标准化在Excel里可以用公式(实际值-平均值)/标准差没有直接函数我习惯先拖一个透视表求基期均值和标准差再用公式引用。3.4 Python读写Excel给效率再加一个档如果你是经常处理成百上千个县域数据的人我强烈建议绕开鼠标操作用Python的pandas加openpyxl。比如import pandas as pd df pd.read_excel(气温数据.xlsx, sheet_name县域表) # 筛选河北省 hebei df[df[省].str.contains(河北)] # 按市分组求十年均值 result hebei.groupby(市)[[2011,2020]].mean() # 写回Excel result.to_excel(河北分市十年均值.xlsx)这套流程对“python写入excel”“python查找excel中字符串”“excel写uuid”这些关键词也很应景。查找字符串用df[df[列名].str.contains(某某)]写UUID直接用df[uuid] [str(uuid.uuid4()) for _ in range(len(df))]再to_excel保存。我一直觉得“处理框架”不是某个固定模板而是“先清洗、再聚合、最后可视化的顺序感”Python能让这种顺序感变成可复现的脚本这是传统Excel操作给不了的。4. 把Excel结果挂到Shp上关键一步和全套实操4.1 行政区划代码是这个流程的“身份证号”在Excel和Shp之间做连接最关键的不是县名而是县的行政区划代码。县名“张家口市”和“张家口市宣化区”在单纯字符串匹配上很容易出错一个带市、一个带区甚至同一名称在不同历史时期归属调整过。我的习惯是Excel里保留完整县级代码6位数字Shp的属性表里也必须有对应的代码字段。ArcGIS连接时用代码字段作为连接键不要用名称。如果发现两边代码类型不一致用Excel把代码列统一设置为文本或者在ArcGIS里用“添加字段”“字段计算器”补一个相同类型的新字段。这种事听起来简单实际做的时候经常遇到“一个开着一个没开”导致连接结果全为空。我的排查方式是在连接前先做两个字段的双向计数确保有交集。4.2 标准连接流程从Excel到临时图层再到永久图层以ArcGIS为例操作如下打开Shp图层的属性表确认好代码字段名如XZQ_DM。在菜单栏选择“连接和关联→连接”指定将要连接的Excel表“sheet$”。连接字段分别选Shp的XZQ_DM和Excel表里的县代码。确认连接后图层属性表会多出Excel中的所有字段这个时候先不要直接保存而是用“数据导出→导出要素”另存为新Shp这样Excel字段会永久写入新Shp的dbf属性表里。完成后检查几个抽样县的数值正确性。如果你用的是QGIS类似操作是右键图层“连接属性表”最终也要“导出另存为”来固化连接。不要直接在原Shp上保存连接因为连接关系只在当前工程内有效换台电脑或换份Excel就失效了。4.3 做一个“温差对比图”计算差值并分级着色假设你想比较“2010年代”和“2000年代”两个十年的平均温度差值。先Excel里算出每个县的差值新列再挂接到Shp之后做差值分级设色。我会选择“红蓝”色带负差值用蓝色正差值用红色每个级别设为0.5度这样能直观看到哪些区域变暖快。制做完以后加布局、出图。批量出图时我用“定义查询”为每个年份“复制一份相同图层再筛选”但更现代的选择是使用ArcGIS Pro的“对图层启用时间属性”支持时间滑块逐帧播放。这种方法比一帧帧导出PNG更生动做汇报演示效果极佳。4.4 如果只想快速出图不想学GIS有相当一部分人其实只需要“某年某省温度地图”做PPT插图不必在GIS里深度操作。我有两个偷懒方案一是在QGIS里加载底图和Shp后点击“布局管理器”创建单一布局把“WSI地图”和“图例”都拖进去导出PNG设置300DPI整个过程不到五分钟。二是直接使用在线平台比如DataV、地图慧上传带有“行政区、数值”的Excel平台自动匹配到地图。这类平台可以秒出图但需要注意上传的行政区名称必须与平台库的标准名称一致否则匹配失败。个人经验正式论文和报告我宁可用GIS因为在线平台的边界精度和配色可控性都有限。5. 常见问题与排查技巧实录5.1 Excel加载项被禁用、CtrlV失效先别砸电脑做气候分析时经常同时开着几个Excel工作簿外加Python脚本很容易出现“Excel加载项被禁用”或者“CtrlV粘贴无反应”。根据我踩过的坑优先级排查顺序如下“CtrlV”失效时先看键盘是否锁了粘贴板WinV调出系统剪贴板历史看里面有没有内容。如果有但粘贴仍是灰色通常意味着Excel在处理大型数组公式会暂时锁住剪贴板。进入“文件→选项→加载项”查看“COM加载项”重点检查Python插件、智译、慧办公等第三方加载项逐个禁用后重启Excel。见过一个用户的Excel被一个pdf转换插件弄得公式下拉全失效禁用后恢复。宏安全等级如果不是“禁用所有宏且不通知”也有概率导致粘贴操作被干扰把宏安全调整为“启用所有宏”再试但注意不要在联网环境乱开。表格环境稳定是数据处理的地基地基不稳后面所有公式、透视表的结果都不可信。所以我遇到“加载项被禁用”这种提示反而觉得是系统在提醒你别开那么多杂七杂八的功能。5.2 Shp属性表中文乱码和数据对不上在ArcMap打开一些老Shp属性表的“县名”会显示成乱码原因通常是dbf编码用的GBK而ArcMap默认按UTF-8解析。解决办法有几种在ArcMap旁边放一个.cpg文件文件内容写入GBK重新加载图层就能让软件按GBK解码。QGIS里加载时选择“图层编码”为GBK或UTF-8试到正常为止。还有一种救命稻草用DBase转换工具先把dbf导出为CSV再用记事本打开改编码最后另存为UTF-8导入。乱码和数据对不上往往同时发生。比如连接后很多县的数值变成了NULL先检查连接码是否匹配再检查编码是否正常。如果两个县代码前面有隐藏空格用Excel的TRIM函数清掉。5.3 行政区划边界变化导致的年份不可比性1901年至今政区边界调整频繁尤其是县级很多县的代码或名称都发生了改变。用同一套Shp去匹配不同年代的Excel数据必然会出现“某些年份没有这个县”或“某县位置不等于老县位置”的问题。我的处理原则是优先使用当前标准行政区划边界因为它最稳定也最容易获得“县域行政区划边界 shp”。对于历史上已合并或撤销的县按照行政变更表做归并保证每一年的统计口径一致。如果做时序分析务必记录“口径调整版本”在报告里说明“基于2020年标准县域边界”。否则明年你自己看自己的图都搞不清楚。这个坑很隐蔽也是最容易让结果被质疑的地方。所以我每次分析都会在数据备注里写明“边界基准年”。5.4 云盘下载的Shp打不开或缺失投影不少用户为了图方便从网盘下载别人分享的Shp压缩包结果解压后发现少了.prj文件画图时总提示“未知空间参考”。没有投影文件ArcGIS虽然能用但叠加到正确坐标系的地图上会跑偏。我的建议是用QGIS重新指定投影。右键图层“设置图层CRS”选择一个常用投影比如CGCS2000EPSG:4490或者WGS84EPSG:4326。如果不知道原始投影可以试着从相邻文件的prj复制或咨询数据来源方。还有一个细节Shapefile是多个文件成套存在的只拷贝.shp而不拷.dbf属性表就是空的只拷.shx连图形都可能打不开。所以网盘下载完第一件事先检查文件是否齐全。5.5 批量出图时想插入Excel表格但插不进去前面提到了嵌入统计图片的两种方式这里补充一个我踩过坑的细节如果直接在ArcGIS布局里插入Excel对象部分版本会出现“OLE对象无法创建”或“文件占用”的报错原因是Excel文件正被打开进程锁定了。要么先把Excel关掉再插入要么把Excel区域复制后用“选择性粘贴→图片”贴成PNG。图片方式虽然牺牲了动态联动但胜在不会崩。做几百张批量图时我都是把统计表格导出为固定尺寸PNG然后用一条Python脚本批量贴到模板图的指定坐标里速度很快。6. 数据还能这样玩从静态表格到决策辅助6.1 叠加人口密度看“高温影响人口”到底有多少县均温数据单看并不性感但它一旦和人口栅格、GDP数据叠加就会变成一张“脆弱性画像”。以前我做过一次实验从世界人口网格中按县域边界聚合出各县人口再把2020年气温按三分法分成低、中、高然后用交叉表统计“高气温高人口”县域数量。这种分析能帮你快速圈定哪些区域需要优先关注高温影响从数据到决策的逻辑一下就成立了。6.2 结合降水数据做“暖干化”区划如果你手头还有同源的降水数据可以计算“干燥度 年潜在蒸散 / 降水”再把温度数据拉进来构建二维聚类。比如县域可以分成“暖湿型、暖干型、冷湿型、冷干型”用Excel散点图加标签就能可视化。这种分类比单纯看温度趋势更实用因为农业、林业决策都需要同时考虑温度和水分两个驱动。此次“110年来年温差”的排序还能辅助识别那些“变暖但没变干”的县域它们往往是灌溉农业需要重点关注的地区。6.3 制作县域温度演变动态GIF用QGIS的“时间管理器”插件或ArcGIS Pro时间滑块把124年逐年温度加载进去按年播放每帧导出截图再用ImageMagick合成GIF。这个动图放在PPT里非常有说服力观众能看到暖色区域从零星点状扩展成连片面的过程。如果嫌导出麻烦也可以直接用matplotlib读取Excel后生成动画虽然少了地理边界但胜在高效。6.4 把Shp转成GeoJSON发布到Web地图最后补充一个轻量级发布技巧。完成县级逐年气温表后如果想做个网页版交互地图最省事的路径是用QGIS打开Shp右键导出另存为GeoJSON接着配合MapLibre或Leaflet就能加载。如果你对服务有更高要求可以用tippecanoe把县级GeoJSON直接切片成.mbtiles再通过服务软件发布性能远好于直接请求大体积GeoJSON。这里的数据字段建议只保留“县代码、县名、某年年均温”做前清一下字段能显著减小文件体积。说到底数据本身是一套工具工具的价值取决于使用者的思路。再强调一下我个人的习惯每次拿到新数据先花十分钟摸清结构、边界、代码再动手算数。这套“1901-2024年我国省市县三级逐年平均气温数据Shp/Excel格式”就是一个典型样本能让你体会一次“从Excel的格子到地图上的色块”的完整旅程。一旦这条路走通了以后再遇到任何带空间属性的统计表你都能敏锐地判断出这数据怎么整理、怎么挂接、怎么出图整条链路自然就顺了。