尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

地级市逐月平均气温数据集(1982-2024)处理与应用

地级市逐月平均气温数据集(1982-2024)处理与应用 简介本资源为1982–2024年全国地级市逐月平均气温时间序列数据集面向气候研究、城市可持续发展分析、环境经济学实证建模及人工智能驱动的时空预测任务的研究者与数据科学从业者。数据涵盖地级市名称、月份、对应月均气温三类核心字段可支撑长期气候趋势识别、区域暖化评估、农业物候建模及深度学习时序预测等多场景应用。压缩包共13个文件以XML为主含workbook.xml、sheet1.xml等结构化数据载体辅以rels关系定义与vml图形支持文件整体2.6MB轻量易加载适配Python/Pandas快速解析与清洗。目前已有177人学习下载数据经标准化组织目录层级清晰、字段语义明确附带完整时间跨度与地理粒度可直接用于回归分析、热力图可视化或LSTM等模型训练输入显著降低气象数据获取与预处理门槛。 这篇数据我前后折腾了快一个月从最初找数据源、清洗到最终能稳定跑出分析结果中间踩了不少坑。最后整理出来的这份 1982-2024 年地级市逐月平均气温数据说实话是我这些年做气候数据处理用得最顺手的一份基础数据。今天不写那种官话套话就从一个实际干活的人角度把这套数据的来龙去脉、处理细节、以及真正能用它做什么一次性说清楚。这份数据的时间跨度从 1982 年 1 月一直到 2024 年 12 月覆盖全国 300 多个地级行政区每个城市每个月一条记录字段就是城市、年份、月份、平均气温。听起来结构非常简单但越是这种基础数据用起来越容易出问题。我当初接手这个任务时第一反应是这不就是下载下来就能用吗结果真正跑起来才发现光是数据清洗和口径统一就花掉了我三分之二的时间。如果你手头正需要做长时间序列的气候分析、城市之间的温度对比、或者把气温作为控制变量放进经济模型里这份数据能帮你省掉大量找数据、清洗数据的重复劳动。我能给你的不只是数据本身更是一套从处理到应用的完整思路。1. 数据整体设计与处理思路1.1 这份数据的基本盘先搞清楚我们手里拿的到底是什么。这份逐月平均气温数据有几个需要先明确的关键属性时间范围1982-2024 年共 43 年516 个月。为什么从 1982 年开始因为 1980 年代初期我国气象站点的密度和观测质量才进入一个相对稳定的阶段。更早的数据存在大量站点缺测插补难度极高强行纳入反而会拉低整份数据的可信度。空间范围地级市级别。注意这里说的地级市包括地级市本身也含地区、自治州、盟等行政单位基本对应你平时在地图上看到的那些城市轮廓。部分直辖市北京、上海、天津、重庆在行政级别上较为特殊处理数据时会专门标注做空间对比分析时需要留意避免口径不对产生误读。时间粒度逐月。每条记录是一个自然月的平均气温不是日值也不是候值或旬值。这个粒度非常适合做季节趋势、年度对比、气候带划分等分析但如果你的研究需要捕捉极端高温事件或寒潮过程逐月数据就不够用了需要去获取日值数据。核心字段城市代码、城市名称、所属省份、年份、月份、当月平均气温单位摄氏度保留一位小数。我在设计字段时特意保留了城市代码这一点强烈建议你也别删。城市代码相当于城市的身份证号后续如果要把气温数据和人口、GDP、PM2.5 等其他城市数据匹配合并城市代码就是最可靠的关联键。直接用城市名称匹配很容易出问题比如北京市在不同数据源里可能被写成北京、市辖区或者带区划代码的版本一个不留神就匹配错了。1.2 为什么逐月粒度最适合做城市面板分析做城市级别的面板分析数据的空间和时间粒度决定了能回答什么问题。逐日数据精度高但数据量大、噪声大而且很多城市站点日数据是断断续续的处理成本很高逐年级数据虽然稳定但一年只有一条记录做不了季节差异分析。逐月数据是一个很微妙的平衡点。一年 12 个月既能看出明显的季节性波动又不会因为天数太少而出现过多的缺失和噪声。经济类研究里常把气温作为控制变量用的就是逐月或逐季加总的数据。比如研究高温对劳动生产率的影响、气温变化对空调销量的拉动、或者寒冷天气对户外施工工期的压缩逐月均值恰好能捕捉到这种月度差异带来的变化。我之前见过一个案例有人用逐日气温做城市间的温差对比结果因为不同城市站点海拔差异极大导致结果完全失真。换成逐月均值并用城市层面的平均海拔做校正之后结论才真正站得住脚。所以如果你需要的是一个既能体现时间变化、又不过度敏感于每日天气波动的数据基础逐月均值是非常合适的选择。2. 数据质量处理与核心细节2.1 缺失值的补全策略再好的原始数据缺失值也是躲不开的。全国 300 多个城市43 年逐月记录理论上应该有 15 万条左右的记录但实际上原始数据里大约有 2%-3% 的月份存在缺失。这些缺失的原因很多样早期站点尚未建站、设备故障导致某个月没有记录、极端天气导致仪器损坏、或者人工观测时代的记录遗漏等。处理缺失值时我按优先级采用了三种策略第一种时间插值。如果某城市某年 6 月数据缺失但 5 月和 7 月都有就用线性插值法补上。这种方式在气温这种连续变量上表现很好因为气温在相邻月份之间不会出现剧烈跳变。线性插值公式就是 (5月值 7月值) / 2但更严谨的做法是考虑该城市的历史平均月际变化率。第二种空间插值。如果某城市连续好几个月都缺就不能用时间插值了我会找地理距离最近的 3-5 个城市作为参照做距离反比加权插值。原理很简单离得越近的城市气温越是接近。在实际操作中我会对海拔差异做修正毕竟拉萨和成都直线距离不算远但气温差别巨大。第三种长期均值替代。如果某城市某个月份在历史上有 60% 以上的年份都有记录只有个别年份缺失可以用该城市该月份的历史多年平均值来替代。这种方案会对数据方差有一定压缩使用时注意标记出来不要和实测值混为一谈。提示补全后的数据最好加上一列标记字段用 0 和 1 表示该条记录是实测还是插补。后续做统计分析时可以用插补标记做稳健性检验看结论是否因为插补而改变。2.2 台站迁移与均一性校正这是处理长时间序列气温数据时最容易被忽视、但影响最大的一个坑。我国的许多气象站点在几十年间经历过搬迁。比如某个城市的气象站1980 年代在市中心后来为了减少城市热岛效应的影响搬到了郊区。这一搬温度观测值可能一下子就低了不少但这不是真实的气候变化而是观测环境改变带来的系统偏差。如果你不做处理拿这个数据去算趋势很可能得出这个城市在降温的结论而事实上城市可能正在快速升温。对于逐月均值数据我采用的均一化处理思路是用相邻城市的同步观测差值来做检验。如果某城市在某年份前后与周围城市的温差出现明显的系统性跳变就说明大概率发生了台站迁移或仪器更换。对这种断点我会计算断点前后的平均偏差并以此修正整条序列。我在这份数据里已经对明显的断点做了校正但必须坦白讲受限于原始资料的完整程度部分城市可能仍然存在一些未能完全识别的人工跳变。我自己的处理方式是给数据附上了均一化版本和原始版本两个字段方便更严谨的研究者自行选择。对于大多数应用场景来说均一化版本已经足够可靠了。2.3 城市不同区域的温度代表性问题地级市是一个行政概念不是气候概念。一个地级市可能横跨平原、丘陵、山区市辖区和下属县之间的气温差异甚至能超过 5 度。这份数据里的城市气温值采用的是该城市主要气象站的观测值一般就是市辖区的国家基本气象站。这样做的优势是数据来源权威、连续性好缺点是无法代表整个地级市全域的气温。如果你只是做城市层面的对比和趋势分析这种口径完全没有问题但如果你要精确到某个县、某个乡镇就需要更高空间分辨率的数据了这份逐月城市数据就不太适用了。我一般会建议项目方在报告里明确写清楚分析中的城市气温指市区代表站气温而非全域面积加权平均气温。表述严谨了结论就不容易被人挑毛病。3. 用这份数据能做什么——真实场景拆解3.1 城市气候变化趋势分析这是最直接的应用方向。用这份逐月数据可以很轻松地计算每个城市的气温变化速率摄氏度/十年进一步分析不同区域、不同季节的增温差异。实际计算时我通常会把 43 年的数据按季节3-5 月为春季6-8 月为夏季9-11 月为秋季12-2 月为冬季分组然后分别做线性回归得到每个城市冬春夏秋四个季节各自的趋势系数。这样做的价值在于中国大部分地区冬季增温幅度高于夏季如果只看年均值这种季节差异就被掩盖了。这对农业生产、能源需求预测都有完全不同的含义。我也习惯在输出趋势结果时附上显著性检验的 p 值。43 年的样本量对气温趋势检验来说已经足够不再是噪声太多看不出规律的阶段了。3.2 极端冷暖事件还原逐月均值的粒度决定了它无法告诉你单日极端高温是多少度但可以通过月均温的异常偏离程度来还原这个月到底有多反常。一个非常实用的分析方法是计算标准化气温异常指数具体操作是对每个城市每年各月的数据分别减去该月的历史多年均值再除以该月的历史标准差得到的就是标准化距平值。这个值超过 2 或低于 -2 的时候基本就可以判定为显著的异常冷暖月。用这个方法去复盘 2008 年南方低温雨雪冰冻灾害、2022 年夏季长江流域极端高温等事件都能精准地捕捉到对应的异常月份。这些分析在撰写气候公报、行业风险评估报告时非常有说服力。3.3 跨学科融合把气温数据放进经济模型这也是我特别想强调的应用场景。在我做过的项目里气温数据最出彩的表现往往不是单独出现而是作为解释变量被放进经济或社会科学模型里。举个例子研究高温天气对居民用电量的影响就可以用这份气温数据按月匹配各城市的用电量数据构建面板回归模型。实证结果通常会发现 7、8 月的平均气温每升高 1 摄氏度居民生活用电量会有显著的边际增长。类似的研究还可以扩展到农业产量、旅游业收入、户外行业开工率、健康医疗支出等领域。这些应用的前提是数据格式必须规整——每个城市每个月一条记录年份、月份、城市代码干净清晰。这也是我为什么特别强调这份数据字段设计简化、方便直接 join 的原因。实际做数据匹配时一定要先检查城市代码在两个数据源中的格式是否一致比如字符型还是数值型有没有前导零这些细节常常让数据合并翻车。4. 实操演示从数据到趋势可视化4.1 环境准备与数据导入我习惯用 Python 做气候数据分析下面这套代码不需要高性能计算环境普通笔记本电脑就能跑。需要安装的库包括 pandas、numpy、scipy 和 matplotlib这些用 pip 安装即可。pip install pandas numpy scipy matplotlib数据导入的时候我一般会指定列名。气温数据是 CSV 格式标准的读取方式是import pandas as pd df pd.read_csv(city_monthly_temp_1982_2024.csv) print(df.head()) print(df.info())正常加载后你会看到五列核心数据city_code城市代码、province省份、city城市名称、year年份、month月份、temp月平均气温。4.2 缺省值检查与基础统计拿到数据第一步先检查缺失值情况这是后续一切分析的地基。# 查看缺失值统计 missing_info df.isnull().sum() print(missing_info) # 查看基础统计信息 print(df[temp].describe())如果缺失值不多可以用前面提到的线性插值方法处理如果缺失较多额外加一步空间插值来补全。但无论用哪种方法请一定保留一份原始未处理的数据备份别直接覆盖源文件这是做数据处理的基本职业素养。4.3 计算城市年均温序列逐月数据转成年均温是非常常用的操作。这里需要注意样本量问题如果某城市某年只有 1-2 个月的记录直接平均会产生严重偏差我一般要求至少有 9 个月的有效记录才计算年均值。# 计算城市年度平均气温要求至少9个月有效记录 yearly df.groupby([city_code, city, year]).agg( valid_months(temp, count), annual_temp(temp, mean) ).reset_index() # 筛选有效记录达到9个月以上的年份 yearly_valid yearly[yearly[valid_months] 9].copy()这种处理方式在分析城市长期增温趋势时非常关键。如果不设置最少月份门槛2003 年如果有 10 个月的数据、2020 年如果只有 5 个月的数据算出来的年均温根本不可比趋势分析也会失真。4.4 计算每个城市的增温速率有了年均温后计算趋势就是线性回归的事了。我通常用 scipy 的 stats 模块简单直接还能直接拿到 p 值。from scipy import stats def calc_trend(city_data): # 使用年份作为自变量年均温作为因变量 slope, intercept, r_value, p_value, std_err stats.linregress( city_data[year], city_data[annual_temp] ) return pd.Series({ trend_per_10yr: slope * 10, # 每十年变化多少度 p_value: p_value }) trends yearly_valid.groupby([city_code, city]).apply(calc_trend).reset_index() print(trends.sort_values(trend_per_10yr, ascendingFalse).head(10))这个结果会直接告诉你过去 43 年里哪些城市增温最快、哪些城市增温不明显。实际输出的数值单位是摄氏度/10年比如某个北方城市结果是 0.42意思是平均每十年升温 0.42 摄氏度43 年累计升温大约 1.8 度。4.5 画一张能看出信息量的图画图这个环节我的个人建议是不要画那种所有城市曲线叠在一起的毛线图信息量太低看起来非常乱。更好的做法是抽取几个典型城市一屏最多放 4-6 条曲线加平滑线后对比展示。import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False # 选择若干典型城市 cities_of_interest [北京, 上海, 广州, 成都] plot_data yearly_valid[yearly_valid[city].isin(cities_of_interest)] for city in cities_of_interest: city_data plot_data[plot_data[city] city] plt.plot(city_data[year], city_data[annual_temp], labelcity, linewidth2) plt.title(典型城市年均温变化趋势 (1982-2024)) plt.xlabel(年份) plt.ylabel(年均气温 (摄氏度)) plt.legend() plt.grid(True, alpha0.3) plt.show()我个人在画气温序列时还喜欢叠加一条 5 年滑动平均线。它能让趋势变得非常清晰不会被某一年的极端冷暖干扰判断。如果项目周期不紧张这个细节很值得做。5. 典型问题与排查技巧实录5.1 城市改名和区划调整处理这个坑是我用其他城市数据时频繁踩过的。在过去四十多年里不少城市改过名。比较典型的比如湖北襄樊改名襄阳、云南思茅改名普洱、海南通什改名五指山。如果你的分析跨度长达几十年直接用城市名称做匹配就会出问题同一座城市1980 年代叫这个名字2000 年代叫那个名字数据一导进来就变成两座不同的城市了。我的处理方式是基于城市代码统一城市名称。在整理这份数据时我已经把所有的城市名称统一为 2024 年最新的区划名称。所以你在使用时不会出现同一城市因改名被拆成两段的情况。另外像莱芜这样的城市因区划调整被并入济南我也按最新的区划体系做了归并处理确保整条时间序列中城市的空间范围保持一致。5.2 月份天数和闰年问题逐月平均气温本身不涉及按天累加的问题但在把月均值转换为季节值或年均值时需要注意加权。每个月的天数不一样2 月有 28 天或 29 天其他月有 30 天或 31 天如果直接对月均值做简单平均最终结果会略有偏差。严谨的做法是加权平均以当月天数为权重先还原为月总温度再累加除以总天数。好在对于逐月均值数据这种偏差通常比较小多数分析场景下可以接受简单平均的误差。但如果你在做一个权威报告或者需要数字精确到小数点后两位老老实实做天数加权不会错。5.3 0.1 摄氏度的精度够不够用用这份数据做趋势分析完全够用。0.1 摄氏度的精度对应的是月均值的舍入误差在气候分析中属于可以接受的范围。你算出平均每十年升温 0.3 度这个数字的可靠性不会因为原始数据是 0.1 精度还是 0.01 精度而有本质区别。但如果你的研究涉及日较差、极端温度阈值比如超过 35 度的天数那么逐月均值数据就不适用了。搞清楚自己需要什么粒度的数据比拿到数据后拼命精修更重要。这方面我是吃过亏的刚开始做数据时总想着数据越精细越好结果花了大力气去补日值数据最后发现研究问题根本不需要那么高的精度纯粹是浪费时间和精力。做数据选型先想清楚够用就行再考虑锦上添花。5.4 气温数据与体感温度的差异最后提醒一句这份数据是气象上标准的百叶箱气温距离地面 1.5 米、通风、避阳光直射环境下的气温它和人体实际感受到的温度不是一回事。夏季城市里走在柏油路上体感 40 度百叶箱气温可能只有 35 度冬季大风天体感零下 15 度百叶箱气温可能只有零下 8 度。如果项目涉及人体舒适度、健康风险预警或者体感温度建模仅仅靠这份气温数据是不够的至少还需要湿度、风速、太阳辐射等数据来配合计算。针对这个问题我后续打算单独整理一套包含湿度与风速的城市逐月气候数据集把体感温度相关的计算也一并做进去。6. 写在最后的一点心得数据整理工作外人看着枯燥但真正做起来每一步都需要大量的细心与判断。我在整理这份 1982-2024 年地级市逐月平均气温数据时最大的感受是真正有价值的不是把数据下载下来而是让数据变得可靠、可用、口径清晰。零散的原始数据谁都能拿到但做出一份能直接用于分析、经得起检验的数据集才是真正拉开差距的地方。如果你在做研究或项目时需要用到这份数据有个小建议动手之前先花半小时确认你的分析到底需要什么时间粒度、什么空间范围、什么精度。这个前置步骤能帮你省下后续大量的返工时间。气候数据领域有一个经验法则——清洗和处理的时间通常会占到整个项目时间的 70% 以上把这份时间预算留足你的项目进度反而更稳。本文还有配套的精品资源点击获取
返回列表