基于python下载ERA5小时尺度和月尺度的数据

前言:由于ERA5网站的更新,原始的代码都无法使用,这里将会提供下载小时尺度和月尺度的代码。

一、前期的工作
需要重新在ERA5网站上注册新的账号(ERA5网站)。然后在User guide里,选择API,将代码复制到文本里,将文本的名字改为:.cdsapirc。然后将文本放在C盘用户的下面。此外需要下载IDMan.exe,CSDN上有很多教程。
在这里插入图片描述
二、下载小时尺度的代码

import cdsapi
import calendar
from subprocess import call
import time
from cdsapi import Client, api


def idmDownloader(task_url, folder_path, file_name):
    """ IDM下载器 """
    idm_engine = r"D:\\IDM\\Internet Download Manager\\IDMan.exe"
    call([idm_engine, '/d', task_url, '/p', folder_path, '/f', file_name, '/a'])
    call([idm_engine, '/s'])


if __name__ == '__main__':
    c = cdsapi.Client()
    dic = {
    "product_type": ["reanalysis-era5-land"],
    "variable": ["surface_solar_radiation_downwards"],
    # "variable": ["surface_solar_radiation_downwards", "surface_thermal_radiation_downwards", "surface_pressure",
    #                  "2m_temperature", "2m_dewpoint_temperature"],
    "year": [],
    "month": [],
    "day": [],
    "time": [ "17:00"],
    "data_format": "netcdf",
    "area": [41, -87, 39, -85],
    "download_format": "unarchived"
}


    for y in [2013]:
        for m in range(5, 9):
            day_num = calendar.monthrange(y, m)[1]
            for d in range(1, day_num + 1):
                dic['year'] = str(y)
                dic['month'] = str(m).zfill(2)
                dic['day'] = str(d).zfill(2)
                r=c.retrieve('reanalysis-era5-land', dic)
                url = r.location
                path = r'F:\PhD\urbanET_downscaled\ERA5\rsd_17'
                filename = str(y) + str(m).zfill(2) + str(d).zfill(2) + 'rsd17.nc'



                idmDownloader(url, path, filename)

三、下载月尺度的代码

import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
import cdsapi

import calendar
from subprocess import call


def idmDownloader(task_url, folder_path, file_name):
    """ IDM下载器 """
    idm_engine = r"D:\\IDM\\Internet Download Manager\\IDMan.exe"
    call([idm_engine, '/d', task_url, '/p', folder_path, '/f', file_name, '/a'])
    call([idm_engine, '/s'])


c = cdsapi.Client()

dic = {
    'product_type': 'monthly_averaged_reanalysis',
    'variable': 'total_precipitation',
    'year': [],
    'month': [],
    'time': '00:00',
    'area': [90, -180, -90,
                180,],
    'data_format': 'netcdf',
     'download_format': 'unarchived'
}

for y in range (2003,2020):
    for m in range (1,13):
        dic['year'] = str(y)
        dic['month'] = str(m).zfill(2)

        # name = str(y)+str(m).zfill(2)+'.nc'
        r=c.retrieve('reanalysis-era5-land-monthly-means',dic)
        url = r.location
        path = r'F:\PhD\Mult_year_ET\Pre\nc'
        # filename = 'F:\\PhD\\Mult_year_ET\\Pre\\nc\\' + str(y) + str(m).zfill(2) + '_pre.nc'
        filename = str(y) + str(m).zfill(2)  + '_pre.nc'
        idmDownloader(url, path, filename)
        print(filename)

以上代码可以满足小时尺度和月尺度对ERA5在分析资料数据的下载。
长路漫漫…
唯有坚持…

### 关于ERA5气象数据尺度方法与工具 #### 使用Python实现ERA5气象数据的降尺度 在处理ERA5气象数据时,可以通过多种方式对其进行降尺度操作。一种常见的方法是通过插值技术来提高空间分辨率。常用的插值算法包括双线性插值、最近邻插值以及样条插值等[^1]。 以下是基于`xarray`库`scipy.interpolate.griddata`函数的一个简单示例代码: ```python import xarray as xr from scipy.interpolate import griddata import numpy as np def downscale_era5(input_file, output_file, target_res=0.1): # 加载原始ERA5数据 ds = xr.open_dataset(input_file) # 获取经纬度范围 lats = ds['latitude'].values lons = ds['longitude'].values # 创建目标网格 (更高分辨率) new_lats = np.arange(lats.min(), lats.max() + target_res, target_res) new_lons = np.arange(lons.min(), lons.max() + target_res, target_res) # 插值到新网格 points = [(lat, lon) for lat in lats for lon in lons] values = ds['t2m'].values.flatten() xi = np.meshgrid(new_lons, new_lats[::-1]) interpolated_values = griddata(points, values, tuple(xi), method='linear') # 构建新的DataArray对象 da_new = xr.DataArray( data=np.reshape(interpolated_values, (len(new_lats), len(new_lons))), dims=["latitude", "longitude"], coords={ "latitude": new_lats, "longitude": new_lons } ) # 保存结果 da_new.to_netcdf(output_file) # 调用函数 downscale_era5('input.nc', 'output_downscaled.nc') ``` 此脚本展示了如何加载ERA5数据文件,并将其从较低的空间分辨率提升至更高的分辨率。这里采用了双线性插值法作为默认选项[^2]。 #### 利用GIS软件进行ERA5数据尺度 除了编程手段外,还可以借助专业的地理信息系统(GIS)软件完成ERA5数据的降尺度工作。ArcGIS Pro QGIS 是两个广泛使用的开源/商业平台,在其中可以应用各种空间分析功能来进行更复杂的降尺度过程。例如,QGIS中的GDAL插件支持执行重采样任务;而ArcGIS则提供了一系列强大的栅格运算器用于自定义降尺度逻辑。 #### 基于机器学习的高级降尺度方案 对于更加精确的结果需求,则可考虑采用统计学或者人工智能领域内的先进技术——比如随机森林(Random Forest),神经网络(Neural Networks)等等。这些模型能够捕捉输入变量之间的复杂关系从而预测高精度的小区域气候特征。具体来说,训练阶段会利用已知的历史观测资料(如地面测站记录)配合粗粒度的大气环流模拟输出共同构建映射规则;测试期间再依据实时获取的新一轮低分率预报成果推导对应位置上的精细化数值表现形式[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

低调的大耳朵图图

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值