1960 – 2021 年全国气象数据分享


本文所介绍的数据集发布于 科学数据银行 ,由希腊帕特拉斯大学物理系大气物理实验室和中国科学院大气物理研究所东亚区域气候-环境重点实验室合作完成,基于多重分析系列同化(MASH)和 CLIMATOL 方法,对 1960-2021 年间中国 366 个气象站点的日平均温度、最高温度、最低温度及降水数据进行了不一致性检测、估计与调整,进而构建出同化后的日温度和降水数据集。

1 数据介绍

在网站中提供了 RAR 格式的完整数据压缩包,数据文件夹中包含由 366 个中国气象站编号、经纬度的 Excel 文件,以及 RR、TG、TN 和 TX 四个文件夹。每个文件夹中都有 daily 和 monthly 两个子文件夹,分别代表逐日、逐月降水量、平均温度、最低温度及最高温度。每个子文件夹中都有 366 个以站号命名的 csv 文件,各 csv 文件均包含日期及对应数据记录。

  • 数据网站 DOI:10.57760/sciencedb.01731
  • 对应论文 DOI:10.1007/s00376-022-2246-4

数据文献引用格式详见官方网站。

2 数据整理

2.1 气象站信息表

原始气象站信息 Excel 表中不包含各气象站对应名称信息,在中国气象数据网中提供的 中国地面气象站基本气象要素观测资料台站表 的基础上,使用道客巴巴网站中的 全国各气象台站区站号及经纬度 文档进行补充,生成包含各气象站对应名称及所在省级行政区的表格文件,命名为 Station Information.xlsx。

各气象站位置如下图所示:

2.2 逐年气象数据

在逐月气象数据的基础上,通过 Python 代码程序对数据进行统计,得到逐年气象数据,并使用与源数据类似的 csv 数据存储格式将结果数据保存至对应的数据文件夹中。逐年数据文件夹命名为 annually。

以降水量为例,Python 代码如下:

import os
import pandas as pd

# 源数据文件夹路径,根据源数据保存位置自行调整
data_folder = "RR/monthly"

# 创建一个空的字典来存储每个气象站的逐年降水量数据
station_data = dict()

# 遍历文件夹中的所有文件
for filename in os.listdir(data_folder):
    # 检查文件是否为 csv 文件
    if filename.endswith(".csv"):
        # 提取气象站编码,即源数据文件名的前五个字符
        station_code = filename[:5]

        # 读取 csv 文件
        file_path = os.path.join(data_folder, filename)
        df = pd.read_csv(file_path)

        # 确保日期格式正确
        df["Date"] = pd.to_datetime(df["Date"], format="%Y-%m-%d")

        # 将降水量数据按年份汇总
        df["Year"] = df["Date"].dt.year
        # 在 csv 数据表中,降水量数据列名为对应气象站编码
        # 按年份对数据进行分组,计算逐年降水量
        # 如需计算逐年气温则将 sum() 改为 mean() 即可
        annually = df.groupby("Year")[station_code].sum().reset_index()

        # 如果该气象站的数据已经在字典中,则追加新的数据
        if station_code in station_data:
            station_data[station_code] = pd.concat(
                [station_data[station_code], annually], ignore_index=True
            )
        else:
            station_data[station_code] = annually

# 将每个气象站的逐年降水量数据写入单独的 csv 文件
for station_code, data in station_data.items():
    # 数据输出文件夹,可根据需要自行调整
    # 如果文件夹不存在,则自动创建该文件夹
    if not os.path.exists("RR/annually"):
        os.makedirs("RR/annually")
    csv_path = f"RR/annually/{station_code}.csv"
    data.to_csv(csv_path, index=False)
    print(f"{station_code}.csv 数据导出完成!")

print("逐年降水量数据已全部导出至 csv 文件……")

3 数据分享

百度网盘:1960-2021年全国气象数据.zip

4 参考资料

  1. Homogenized monthly and daily temperature and precipitation time series in China during 1960-2021
  2. 中国地面气象站基本气象要素观测资料台站表
  3. 全国各气象台站区站号及经纬度
  4. Fitten Code (Visual Studio Code 辅助编程插件)