ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

1980-2024年省市县逐日最低气温数据:Shp与Excel双格式实操指南

1980-2024年省市县逐日最低气温数据:Shp与Excel双格式实操指南 做气象或GIS相关工作的朋友大概都有过满世界找历史气温数据的经历。这次分享的这份1980-2024年我国省市县三级逐日最低气温数据直接把Shp和Excel两种格式都备好了省去了自己爬数据、清洗、匹配行政区划编码的一大堆麻烦。尤其对刚接触ArcGIS或者还在用Excel硬扛数据处理的朋友来说这份数据属于那种拿到手就能用的实惠资源——既有空间矢量边界可以直接出图又有表格数据方便做统计筛选。这篇文章我就从数据结构、格式选型、实操导入到避坑经验完整拆一遍这套数据的用法和背后的设计逻辑。1. 数据全景拆解一份四十五年逐日最低气温数据到底装了什么1.1 数据的时间跨度与观测逻辑很多朋友第一眼看到1980-2024这个时间范围第一反应是这不就是随便找个数值模式插值出来的吧。这里我得先打消这个疑虑。这类长序列逐日气象数据主要来自气象站点的实测值再通过空间插值算法比如ANUSPLIN、薄盘样条函数或者是基于高程的多元回归插值外推到整个行政区域面上。从1980年开始是有讲究的——这个时间点基本对应了我国气象观测站点标准化建设的时期站网密度和数据质量都有了一次明显的提升再往前的数据缺测率和插值不确定性都会显著增加。逐日最低气温和逐日平均气温、最高气温不同它反映的是一天内气温的下限这对霜冻灾害监测、作物生长季划分、建筑供暖设计需热负荷计算都特别关键。具体到数值上空间插值结果通常以0.1摄氏度为精度单位存储有些格点数据甚至会精确到0.01摄氏度。但落在Excel表格里我见过的一般是一行代表某个区县某一天列分别对应行政区划代码、省份、地市、区县名称、日期、最低气温数值这种长表结构long format而非宽表结构wide format是有讲究的。长表格式最直接的好处是方便筛选和透视。比如我想看某个县2023年全年最低气温低于零下5摄氏度的天数用Excel的筛选功能两秒钟就能拉出来但如果把日期横着摆成列那几万个日期字段能把任何电脑的Excel拖死。这种设计思路和做逐日面雨量、逐日PM2.5数据的团队基本一致——先保证可用性再追求直观。1.2 省市县三级嵌套结构与字段含义这套数据最直观的优势在于它不是一个只到省或市的粗粒度数据而是直接下钻到县级。以我国目前的行政区划来看县级行政单位含市辖区、县级市、县、自治县、旗等大概有2800多个。如果每行都是一条县级的逐日记录45年下来大约是2800个县乘以365天再乘以45年大约在4600万行的量级。这个行数在Excel里是打不开完整文件的所以正常的分享方式会按省份把Excel拆开或者提供全国Shp矢量加属性表由用户在GIS软件里自行筛选。字段设计一般逃不出这几类行政区划标识区县代码12位国标码、省、市、县名称时间标识年、月、日或单独的日期字段气象数值最低气温单位摄氏度一般为数值型辅助字段海拔、经度、纬度、数据来源标识我拿到数据后第一步永远是检查区县代码是不是标准的12位国标码。这个编码从左到右依次是省级两位、地市两位、区县两位、乡级三位、村级三位。如果是完整12位基本可以确定数据作者在行政区划匹配上下了功夫。有些年份会涉及行政区划调整比如撤县设区、新增县级市如果原数据里没有做新旧代码映射在做时间序列分析时就会出现同一地方前后期代码不一致的问题。这块我得提醒一句拿到数据先别急着出图先花十分钟用数据透视表看一眼各区县的记录条数是否一致能规避掉后续百分之八十的返工。1.3 为什么逐日最低气温比月均温更值钱同样的空间范围、同样的时间跨度逐日均值数据可以做月均、季均、年均的聚合但反过来月均数据永远无法还原回逐日。这就是细节数据不可替代的价值。比如做农业保险的霜冻理赔模型需要知道某个气象站点在某次寒潮过程中最低气温是否突破了临界值比如-3℃这种场景只有逐日数据能回答。城市热岛效应研究中如果用年均温对比城乡差异很容易被年平均掩盖掉极端时段的信息而逐日最低气温能捕捉到夜间城乡温差的最大值这才是热岛强度的真正体现。这套数据另一个隐性价值在于它能和遥感反演数据做交叉验证。MODIS的LST地表温度产品是逐日的但反演的是地表温度而不是气温两者之间需要通过NDVI、高程等因素建立回归关系。手头有一套长序列的实测插值气温格点数据正好可以作为真值去标定遥感反演模型。单就这个用途45年的数据量覆盖的样本空间就足够做一次很扎实的模型训练了。2. Shp与Excel两种格式的底层逻辑与选型思路2.1 Shp格式在GIS生态中的地位与限制Shapefile简称Shp是ESRI在20世纪90年代推出的矢量数据格式虽然已经快三十年历史但它依然是目前GIS数据交换的事实标准。一个完整的Shp文件并不是单个文件而是由至少三个文件组成存储几何信息的主文件.shp、存储属性表的dBASE表.dbf、以及存储坐标系信息的投影文件.prj。这三件套但凡少一个在ArcGIS或QGIS里打开都会出问题。很多人下载数据后发现只有.shp和.dbf没有.prj导致软件不知道坐标系是什么地图上位置对不上这就是典型的不完整Shp。这套温度数据的Shp版本通常把逐日最低气温的站点观测值或县级均值作为属性字段挂在县界多边形上。如果你打开属性表看到的是一整张二维表每一行是一个县的边界某一列是某一天的最低气温这就意味着一个Shp文件只有一张属性表想放45年逐日数据就得用上万多列这在Shp格式内部是极不现实的行列限制dBASE III最多支持255个字段。所以我判断这份Shp更可能是两种形态之一一是按年或按月拆分的多文件包每个文件里日期字段相对有限二是只保留一个基础行政区划边界和空间位置属性逐日气温数值主体仍在Excel里由用户自行关联。2.2 Excel格式的长表结构为何更适合统计分析Excel格式对非GIS专业的人来说门槛要低得多。逐日数据以长表形式存放配合数据透视表和数据筛选可以快速实现按月份、按站点、按年份的多维汇总。尤其是新增的超级表格功能CtrlT创建的表格能把范围自动扩展配合切片器实现交互式筛选体验相当顺畅。需要留意的是Excel单张工作表最多支持1048576行按2800多县算一个月的数据量就在84000行左右一年的量就能顶到100万行出头。因此按年度拆分或者按省级拆分是必选项。如果数据作者在Excel文档里直接放了45年全部县级数据要么是拆成了多个Sheet要么是使用了xlsx的PivotCache做压缩。我拿到这种大Excel时习惯先看文件体积一个空xlsx大约8-10KB包含100万行数值数据大概在40-80MB之间超过100MB就要考虑是不是在电脑上换用Power Query或者直接进数据库了。2.3 从Excel到Shp的桥梁关联与转换的多种路径不少朋友拿到数据后问得最多的就是Excel表格怎么导入ArcGIS。这里我把三条主要路径列清楚关联Join如果你的Shp属性表里有区县代码Excel表里也有同样的区县代码直接在ArcGIS里右键图层选择连接和关联→连接按字段关联不需要把Excel转成Shp就能看到属性。关联只是暂时挂接导出要素时可选择导出数据把关联结果固化下来。转换为点要素XY转点如果Excel表里有经纬度坐标可以用添加XY数据生成临时点要素再导出成Shp。这里注意X是经度LongitudeY是纬度Latitude坐标系绝不要选错国内数据一般用WGS84GCS_WGS_1984或CGCS2000。表转ShpTable To Shapefile在ArcToolbox里用转换工具直接把这个Excel表生成Shp点文件。这个方法适用于Excel里本身就带有经纬度字段的情况。此外Qgis用户可以直接通过右键图层→属性→连接完成关联不需要额外插件。如果要在QGIS里加载Excel建议先另存为.CSVUTF-8编码直接用拖拽方式放进图层列表往往比用添加矢量图层还要利索。3. 实操复盘从原始数据到专题地图的完整流程3.1 第一步检查数据质量与坐标系任何数据拿到手我都要先做三件事。第一步用Excel或Notepad打开部分文件确认列名含义和数值范围。最低气温的合理范围如果在中国境内一般在零下50摄氏度到零上35摄氏度之间如果跳出这个区间基本可以断定部分是异常值或插值伪影。第二步在ArcGIS里加载Shp的.prj文件确认坐标系是WGS84还是Albers等积投影。第三步在属性表里按区县代码排序看有没有重复值——同一区县代码出现两遍会导致关联后属性叠加错乱。对于逐日最低气温数据我还建议做一次独立性抽检。随机挑几个县的某一天去中国气象数据网或国家气象科学数据中心对比一下邻近站点的实测值误差如果在1-2摄氏度范围内是正常的毕竟插值有平滑效应如果偏差大到5摄氏度以上就要考虑这个数据是不是直接拿再分析资料如ERA5降尺度出来的这类数据的真实性通常远不如站点插值。3.2 第二步在ArcGIS中加载Shp并关联Excel属性如果是按年分文件存放的Shp数据打开ArcMap或ArcGIS Pro用添加数据定位到.shp文件即可。这时候地图上会显示县级行政边界属性表里是基础信息逐日气温还在Excel里。接下来按区县代码做关联右键图层打开连接和关联选择基于某个字段的连接在输入连接字段里选Shp属性表的区县代码在连接表里选Excel里的工作表再选Excel表里的区县代码字段。连接完成后可以在图层属性里调整符号化方式右键图层打开属性在符号系统里选择数量→分级色彩把值字段指定到气温字段就能直接按颜色区分温度高低。这里有个细节很多人会踩坑。Excel中的区县代码字段容易被识别成数值型双击后前面的零会被省略。比如110101北京市东城区会变成110101没毛病但110228这种可能变成双精度浮点导致与Shp里的文本型字段匹配不上。解决办法是在Excel里把区县代码列格式设为文本或者另存为CSV后用文本导入向导指定该列为文本。没有这个概念的人会反复连不上白白浪费时间。3.3 第三步用Excel完成按年、按月、按阈值统计如果不需要出图只想快速算极值、平均、频次Excel其实完全够用。把逐日最低气温表全选后插入数据透视表行字段放区县名称列字段放年月值字段放最低气温汇总方式选择最小值、最大值、平均值。这样一张表就能同时看出来每个县在某个年度内的最冷天、最热夜间均温和平均夜间温度。进一步如果要做霜冻日数最低气温低于0摄氏度的天数统计可以加一列辅助列用IF公式判断当日最低气温是否小于0结果为1或0。再用透视表求和霜冻日数直接出来。熟悉Excel公式的朋友可以用COUNTIFS函数一步搞定COUNTIFS(日期列,DATE(2023,1,1),日期列,DATE(2023,12,31),气温列,0)这让整个统计流程特别高效。如果嫌逐日数据太多、Excel打开卡顿我建议先用Power Query (Excel 2016以上版本自带)做数据清洗和汇总。Power Query不光能加载上百万行数据还能通过分组依据功能按县级代码聚合出年最低气温、年均最低气温等统计量。用Power Query最爽的是SQL里写的GROUP BY逻辑它能直接图形化实现后续改参数重新执行也只是点一下刷新不需要重跑整个脚本。3.4 第四步ArcGIS批量出图与Excel表套合出图阶段是另一个高频需求。很多人问ArcGIS怎么批量出图并插入Excel表格这其实是专题制图标准动作把统计表和地图拼到同一个版面里。ArcGIS Pro 2.x以后的版本重点是利用布局视图可以添加文本框、表格框来引用外部Excel数据。如果在Desktop的ArcMap里可以先在属性表里选中所需要的县右键创建图层把选择集单独导出为一个图层再来调整符号化和标注。批量出图更推荐ArcPy脚本用Python遍历每个县的地图范围设置数据框的缩放比例然后调用ExportToPDF输出。这比手动一个个调整范围要靠谱得多。为了不把Excel的表格信息丢在出图工序外我在制图前会把统计好的Excel数据通过关联挂回属性表选择导出数据生成一份新的Shp这样出图时直接调用图层的属性字段来显示统计结果即可。ArcGIS里字段计算器和要素转Excel工具是配套使用的前者做空间计算后者把统计结果导回Excel做报告两个方向都打通了。3.5 实测一个小例子提取某县最冷30天并导出坐标我实际跑过一遍这个流程把例子放到这里供复现。场景是提取四川省甘孜州理塘县2021年最冷30天的逐日最低气温和该县中心点坐标。第一步在Shp属性表里筛选县名称等于理塘县用要素转点工具生成县中心点属性表里有X、Y坐标。第二步在Excel里筛选出2021年理塘县全部记录按最低气温升序排序取前30行把这30天的日期和气温整理到一张新表。第三步在ArcGIS里添加XY点把新表加载进来用添加XY数据生成30个日期的点叠加到该县边界上一个最冷日时空分布图就出来了。整个过程熟练的话十五分钟能跑完关键是中间每一步的字段类型都不能搞错。4. 避坑指南这五类问题我几乎每次都被问到4.1 Excel加载项被禁用导致打不开或卡死有朋友反馈说拿到的Excel文件打开后一片空白或者提示加载项被禁用。原因多数是文件里的宏或外部链接触发了Excel的安全设置。最低气温数据本身用不到宏但如果作者在文件里加了数据验证下拉列表或条件格式被Excel的受保护的视图拦下来就会出现异常。解决办法是在文件上右键→属性→勾选解除锁定再重新打开。如果是Excel里CtrlV失效这类问题多半是剪贴板被占用但这不是数据文件本身的问题了。4.2 Shp文件缺.prj导致的坐标系错乱这是最高频的Shp坑拿到文件后三个必备文件只有一个.shp打开后图形和底图对不上。在ArcGIS里看到的要素位置跑到海里或者漂到非洲就是投影信息缺失软件只能调用默认坐标。解决办法是用定义投影工具给它指定一个坐标系。中国的标准做法是先确认数据边界位置如果是经纬度坐标的省级或县级数据指定WGS84或CGCS2000即可如果看到坐标数值是百万级别的平面坐标多半是Albers等积投影中央经线105E双标准纬线25N和47N需要用投影工具转换到WGS84后再做后续分析。多层判断的傻瓜方法是加载一个来自天地图或Esri的在线底图来对比要素位置是否吻合。4.3 大文件Excel打开缓慢或直接未响应逐日数据动辄几十MB用老版本Excel打开确实卡。我一般建议先做两步优化。第一步把所有用不到的空列删除Excel的行数一样但列数越少文件越小、打开越快。第二步用数据→从表格/区域进入Power Query只加载需要的行和列后关闭并上载到一个新工作表。Power Query会把数据压缩到内存里不直接灌入网格流畅度完全是另一个级别。如果数据总量超过200万行就别硬扛Excel了直接上SQLite或PostgreSQL加上PostGIS扩展这些开源数据库处理亿级行都没问题。4.4 新旧区划代码不一致合并分析时的隐藏炸弹行政区划调整是数据分析中绕不过的问题。比如原莱芜市2019年划归济南市管辖原长春县级公主岭市2020年改由长春市代管。如果你的逐日数据用的是旧代码而最新的Shp边界用的是新代码做关联时会出现大量NULL值。保守方案是做一次代码映射表新旧代码之间建立对应关系更稳妥的方案是始终用县名称做模糊匹配但要注意重名问题比如城关镇这种名称在全国有好多处一旦细分到县级别就要配合省、市字段做联合键匹配。我处理时会在Excel里新建一列省市县联合键用A2B2C2拼出唯一标识再拿这个字段去做关联基本能根治重名问题。4.5 属性表字段不多但属性挂接失败的排查思路如果关联完成后属性表里全是NULL不要急着怀疑数据错了先按这几步排查一是两边关联字段的数据类型是否一致文本对文本、数值对数值二是数值型字段有没有精度差异比如Shp里是短整型而Excel里是浮点型数值相同但存储格式不同一样能干扰关联三是关联前是否已经对Shp做过选择集筛选如果高亮了一部分要素ArcMap默认只对选中部分做关联显示其他都是空值。取消选择后再看属性表大概率就正常了。5. 数据应用场景串讲从科研到业务都能用在哪5.1 气候区划与农业决策农业上最典型的应用是积温计算。逐日最低气温数据配合逐日最高气温数据可以通过日均温公式近似算出某一区域的≥10℃活动积温从而判断适合种植哪些作物。暖温带和亚热带的分界线大致是秦岭淮河一线但精细的县级积温分布能把这个界限画到乡镇尺度上这对农业保险的费率分区、种植结构调整规划都有直接指导意义。逐日最低气温还能辅助判断倒春寒的时间窗口比如某县连续三天最低气温低于5摄氏度且前期有明显升温就能捕捉到一次倒春寒过程这类事件对果树花期影响非常大。5.2 能源负荷预测与建筑节能设计供暖行业有个指标叫供暖度日数HDD18计算方式是某一日平均温度低于18摄氏度的部分累计求和。有了逐日最低气温数据虽然不能直接代表日平均气温但可以用最低气温和最高气温的均值近似日均温再计算HDD18。这个值直接决定建筑围护结构的保温要求和供暖设备的装机容量。对一个省级能源公司来说在同样的天然气供应紧张背景下能提前几天预测到供暖负荷峰值就能决定调峰电站的启停节奏经济价值相当可观。5.3 极端气候事件统计与城市规划极端最低气温的复发周期分析是基础设施设计的必要输入。桥梁、输油管道、户外通讯基站都需要考虑温度引起的材料应力变化而极端低温的百年一遇值不能拍脑袋定要以逐日最低气温序列为基础做极值I型分布拟合。对规划部门来说这套数据也能给出城市通风廊道设计的温度背景——风道选线时需要考虑冷空气的来向和强度只有细致到逐日的温度变化才能确定一年中通风潜力最大的时段。5.4 教育场景与开源数据生态这个数据对高校地理信息系统或气象学课程来说也是很好的教学案例。学生可以通过一个现成的Shp文件快速上手专题地图制作再用Excel做统计分析整个过程不需要任何数据采集环节。从这个角度看高质量、易获取的历史气象数据本身就是一种教学基础设施。现在很多GIS下载站和公众号都在做这类数据分享但质量参差不齐我建议优先挑选字段说明完整、时间范围连续、行政区划版本交代清楚的数据这种数据便于验证和引用练习和科研都不至于掉坑。6. 写在最后的一点实操体会这套1980到2024年的省市县三级逐日最低气温数据格式上覆盖了Shp和Excel两种典型形态几乎照顾到了GIS用户和表格分析用户两条主要使用路径。从我实操的体会来讲拿到数据后先别急着做大分析先花半小时摸清字段结构、坐标系、区划代码和缺失值情况这半小时的投入能帮你在后续所有步骤里省下大把时间。另外一个实用的建议把Excel里的日期列改成yyyy-mm-dd的文本格式再把气温列保留一位小数后另存一份CSV作为后续所有操作的原始备份真出了问题还能随时退回。再分享一个小技巧如果后续要做多年逐日数据的快速筛选可以给Excel数据表套上超级表格CtrlT再把年份和月份用切片器挂上这样不管是切到哪一年、哪一月、哪个县图表都能联动刷新比每次手动筛选要顺手得多。这组数据能延伸的分析方向比我在这里写的要多得多从土地利用变化对局地气温的影响到城市化进程中的夜间增温效应可以说是一块非常扎实的原料后续扩展就看你自己的想象力了。
返回列表