Python | 批量下载NCEP2再分析数据

文摘   2024-08-22 10:03   北京  

NCEP2

NCEP/NCAR再分析项目(NCEP-NCAR Reanalysis Project),简称R-1,是由美国国家环境预报中心(NCEP)和国家大气研究中心(NCAR)共同完成的一个重要气候数据集。该项目提供了自1948年至今的全球气候变量再分析数据,广泛应用于气候研究天气预报模型的验证、以及环境影响评估等多个领域。

R-1项目基于历史观测数据,通过复杂的预报模型、程序库、脚本和数据集,经过解码、重新格式化、质量控制、分析、预测、后处理等多个步骤生成。然而,R-1在处理过程中存在一些人为错误。为了解决这些问题,NCEP在1998年启动了NCEP-DOE AMIP-II再分析项目(简称R-2),旨在修复R-1中的错误并改进相关模型。

R2相比于R1的更新和改进

数据分辨率

  • 空间和时间分辨率与R-1相同,即T62、28层。

NCEP2再分析数据集(R-2)与NCEP1(R-1)的主要区别如下:

  1. 修复了R-1中的错误:NCEP2修正了NCEP1中的若干已知问题,如南半球的虚假数据问题、雪盖分析错误、湿度扩散问题(引发了“谱雪”问题)、海洋反照率问题等。这些修正使得NCEP2的数据在某些领域显著改进,尤其是在土壤湿度、雪深和地表温度的再分析中。

  2. 模型物理改进:NCEP2采用了改进的物理模型,包括新的短波辐射方案、修订的对流参数化方案、Hong-Pan行星边界层模型、以及更加合理的云顶冷却处理等。这些改进使得辐射通量、地表通量和降水模式更加接近观测值

  3. 新的系统组件:NCEP2引入了简单的降水同化机制,以改进土壤湿度的再分析。此外,还采用了平滑的地形处理和新的积雪处理方法,以提升模型在这些方面的表现。

  4. 资料改进:NCEP2采用了更新的沙漠反照率、海冰和海表温度场(基于AMIP-II的设定),以及改进的臭氧气候学数据等。这些改进进一步提高了再分析的精确性,尤其是在辐射通量的再现上,但在热带地区 outgoing longwave radiation (OLR) 和热带高层湿度方面可能不如R-1。

  5. 土壤湿度和水分循环的显著改进:NCEP2通过使用观测的五天平均降水来控制土壤湿度演变,显著提高了土壤湿度的年际变化和季节循环,尤其是在美国伊利诺伊州等地区的再分析中表现良好。

总结

R-2是对R-1的更新,非下一代再分析。虽然R-2在某些方面有显著改进,但下一代再分析将更注重精度、分辨率和长期趋势,可能会通过同化降雨量、卫星辐射等遥感观测数据,并使用改进的同化方法,如4D变分同化。

Pooch

本次介绍Pooch库,它可以通过从服务器下载文件,数据的下载采用其中的retrieve方法。

Pooch是一个常用于指代小狗的名字,这个词通常是昵称或爱称。

本次演示使用的是Pooch的1.7.0版本,可以使用pip轻松安装:

pip install pooch==1.7.0

pooch.retrieve

  • url (str): 要下载的文件的URL。理想情况下,URL应该以文件名结尾,如:https://downloads.psl.noaa.gov//Datasets/ncep.reanalysis2/Monthlies/surface/mslp.mon.mean.nc

  • known_hash: 文件的已知哈希。用于验证下载是否正确或检查下载的文件是否完整和需要更新现有的文件。默认情况下,使用SHA256哈希。

  • fname : 保存文件时使用的文件名。不包含完整路径,仅文件名。如果为None,将使用基于URL最后一部分(假设是文件名)和URL的MD5哈希的唯一文件名。例如:81whdo2d2e928yd1wi22-mslp.mon.mean.nc。这确保来自不同URL的文件即使名称相同也不会互相覆盖。

  • path : 缓存文件夹在磁盘上的位置。文件将被保存的地方。如果为None,将保存到操作系统默认缓存位置的pooch文件夹中,系统默认的缓存文件夹在下面有介绍。

  • progressbar: 如果为True,将显示下载进度条。需要安装tqdm。

我一般称tqdm为淘气大妈:

pip install tqdm

各操作系统的默认缓存位置

  • Mac: ~/Library/Caches/<AppName>

    • 在Mac系统中,缓存文件夹通常位于用户的Library目录下的Caches子文件夹中。
  • Unix: ~/.cache/<AppName> 或者如果定义了XDG_CACHE_HOME环境变量,则使用其值。

    • 在Unix系统中,缓存文件夹通常位于用户的主目录下的.cache子文件夹中,或者如果设置了XDG_CACHE_HOME环境变量,将使用该环境变量的值。
  • Windows: C:\Users\<user>\AppData\Local\<AppAuthor>\<AppName>\Cache

    • 在Windows系统中,缓存文件夹通常位于用户目录下的AppData\Local子文件夹中,然后是应用程序作者和应用程序名的子文件夹,最后是Cache文件夹。

注意

  • <AppName> 应替换为实际应用程序的名称。
  • <user> 应替换为当前用户的用户名。
  • <AppAuthor> 应替换为应用程序作者的名称,通常这会根据应用程序的实际作者进行设置。

Python批量下载

NCEP2提供了月平均数据以及日平均数据,批量下载主要是在日平均数据上比较麻烦,官网提供了一年一个nc数据下载,需要一个一个点击,会很麻烦。

首先我们先下载月平均数据,比如mslp,海平面气压。

import pooch
import os
import numpy as np
# 海平面气压
month_data_folder = r"NCEP2_Month_data"
pooch.retrieve(
    url='https://downloads.psl.noaa.gov//Datasets/ncep.reanalysis2/Monthlies/surface/mslp.mon.mean.nc',
    known_hash = None,
    progressbar = True,
    path = month_data_folder,
    fname='mslp.mon.mean.nc'
)
100%|#####################################| 8.78M/8.78M [00:00<00:00, 5.48GB/s]

数据量不是很大,不到9MB,可以手动下载。

对于月平均p坐标数据:

# Month
month_data_folder = r"NCEP2_Month_data"

for var in [
            'air'
            ]:
    file_name = f"{var}.mon.mean.nc"
    data_path = month_data_folder
    
    file_path = os.path.join(data_path, file_name)
    if os.path.exists(file_path):
        print(f"Skipping {file_path}, already exists.")
        continue
    pooch.retrieve(
        url=f'https://downloads.psl.noaa.gov//Datasets/ncep.reanalysis2/Monthlies/pressure/{file_name}',
        known_hash = None,
        progressbar = True,
        path = data_path,
        fname=f'{file_name}'
    )
100%|#######################################| 182M/182M [00:00<00:00, 60.3GB/s]

现在下载日平均的p坐标数据:

# Daily  
daily_data_folder = r"NCEP2_Daily_data"
for var in [
            'air'
            ]:
    for yr in np.arange(19792022 + 1):
        file_name = f"{var}.{yr}.nc"
        data_path = daily_data_folder
        
        file_path = os.path.join(data_path, file_name)
        if os.path.exists(file_path):
            print(f"Skipping {file_path}, already exists.")
            continue
        pooch.retrieve(
            url=f'https://downloads.psl.noaa.gov//Datasets/ncep.reanalysis2/Dailies/pressure/{file_name}',
            known_hash = None,
            progressbar = True,
            path = data_path,
            fname=f'{file_name}'
        )
  7%|##6                                   | 7.94M/116M [00:03<00:21, 5.13MB/s]

日平均数据我后面就没有继续下载了,我只是提供一个例子。

需要修改变量名的话可以在var循环的列表内进行修改,也可以添加你们感兴趣的变量。

日平均数据的下载年份可以修改for yr in np.arange(1979, 2022 + 1):中的数字。

完整代码

import pooch
import os
import numpy as np
# 海平面气压
month_data_folder = r"NCEP2_Month_data"
pooch.retrieve(
    url='https://downloads.psl.noaa.gov//Datasets/ncep.reanalysis2/Monthlies/surface/mslp.mon.mean.nc',
    known_hash = None,
    progressbar = True,
    path = month_data_folder,
    fname='mslp.mon.mean.nc'
)

# Month
month_data_folder = r"NCEP2_Month_data"

for var in [
            'air'
            ]:
    file_name = f"{var}.mon.mean.nc"
    data_path = month_data_folder
    
    file_path = os.path.join(data_path, file_name)
    if os.path.exists(file_path):
        print(f"Skipping {file_path}, already exists.")
        continue
    pooch.retrieve(
        url=f'https://downloads.psl.noaa.gov//Datasets/ncep.reanalysis2/Monthlies/pressure/{file_name}',
        known_hash = None,
        progressbar = True,
        path = data_path,
        fname=f'{file_name}'
    )
    
# Daily  
daily_data_folder = r"NCEP2_Daily_data"
for var in [
            'air'
            ]:
    for yr in np.arange(19792022 + 1):
        file_name = f"{var}.{yr}.nc"
        data_path = daily_data_folder
        
        file_path = os.path.join(data_path, file_name)
        if os.path.exists(file_path):
            print(f"Skipping {file_path}, already exists.")
            continue
        pooch.retrieve(
            url=f'https://downloads.psl.noaa.gov//Datasets/ncep.reanalysis2/Dailies/pressure/{file_name}',
            known_hash = None,
            progressbar = True,
            path = data_path,
            fname=f'{file_name}'
        )

References

  • Kanamitsu, M., Ebisuzaki, W., Woollen, J., Yang, S.-K., Hnilo, J. J., Fiorino, M., & Potter, G. L. (2002). NCEP–DOE AMIP-II Reanalysis (R-2). Bulletin of the American Meteorological Society
  • https://www.fatiando.org/pooch/latest/index.html

往期回顾

·投稿或转载请联系·
小编微信
长按可关注


气python风雨
主要发一些涉及大气科学的Python文章与个人学习备忘录
 最新文章