ERA5数据是由欧洲中期天气预报中心(ECMWF)建立的一套再分析数据,整套数据的前身为ERA-interim,二者略有差别。本文仅介绍1979年之后的ERA5数据下载方法,ERA5 1950-1978的数据由于受到强热带气旋的影响较大,因此暂时只有初始版本,并且不能使用本文提供的方法下载。操作步骤如下:
1 注册ECMWF账号
1.1 账号注册
https://apps.ecmwf.int/registration/
1.2 查看API KEY
https://accounts.ecmwf.int/auth/realms/ecmwf/protocol/openid-connect/auth?nonce=opYKRRfsaXmBvu94J5GopYQRUqrXe2YME1qEWyiOZTDztl6AkAiaL1VE2ze39A5P&state=6YUANsBaIbsqYRWucwrjnx091qJZI6uY&redirect_uri=https://api.ecmwf.int/sso/complete/openid-connect/&response_type=code&client_id=apps&scope=openid+profile+email
2 申请CDSkey
2.1 ECMWF数据官网
https://cds.climate.copernicus.eu/cdsapp#!/search?type=dataset&text=ERA5
2.2 CDS申请官网
https://cds.climate.copernicus.eu/user/register?destination=%2F%23!%2Fhome
2.3 查看CDSkey
https://cds.climate.copernicus.eu/api-how-to
2.4 Notepad++软件中配置.cdsapirc.文件
注:记事本也可以打开,人为修改后缀即可
位置:C:/Users/电脑用户名
url: https://cds.climate.copernicus.eu/api/v2
key: 60789:10695ca8-b4c6-49ca-b37a-xxxxxxxxxxxxxx
3 数据网页选取数据
3.1 点击Show API request

import cdsapi
c = cdsapi.Client()
c.retrieve(
'reanalysis-era5-pressure-levels-monthly-means',
{
'format': 'netcdf',
'product_type': 'monthly_averaged_reanalysis',
'variable': 'temperature',
'pressure_level': '850',
'year': '2020',
'month': [
'01', '02', '03',
'04', '05', '06',
'07', '08', '09',
'10', '11', '12',
],
'time': '00:00',
},
'download.nc')
3.2 download.nc可视化绘图
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import xarray as xr
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from cartopy.io.shapereader import Reader
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
import maskout
from matplotlib import rcParams
config = {"font.family":'Times New Roman', "font.size": 12, "mathtext.fontset":'stix'}
rcParams.update(config)
region=[70, 140, 15, 55]
data=xr.open_dataset("F:/Rpython/lp36/download.nc")
print(data)
lat = data['latitude']
lon = data['longitude']
temp = data.variables['t'][:]
temp2=temp[1,:,:]-273.15
print(temp2)
print(temp2.shape)
fig=plt.figure(dpi=600,figsize=(12,6))
proj=ccrs.PlateCarree()
ax = plt.axes(projection = proj)
ax.set_extent(region, crs = proj)
ax.set_xticks(np.arange(region[0], region[1] + 1, 10), crs = proj)
ax.set_yticks(np.arange(region[-2], region[-1] + 1, 10), crs = proj)
ax.xaxis.set_major_formatter(LongitudeFormatter(zero_direction_label=False))
ax.yaxis.set_major_formatter(LatitudeFormatter())
ax.add_feature(cfeature.OCEAN.with_scale('50m'))
ax.add_feature(cfeature.LAND.with_scale('50m'))
ax.add_feature(cfeature.LAKES.with_scale('50m'))
ax.add_geometries(Reader(r'F:/Rpython/lp27/data/river1.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='b',linewidth=0.2)
ax.add_geometries(Reader(r'F:/Rpython/lp27/data/china1.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='k',linewidth=0.2)
ax.add_geometries(Reader(r'F:/Rpython/lp27/data/china2.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='k',linewidth=0.1)
ax.add_geometries(Reader(r'F:/Rpython/lp27/data/ne_10m_land.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='k',linewidth=0.2)
ax.add_geometries(Reader(r'F:/Rpython/lp27/data/ne_50m_lakes.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='k',linewidth=0.2)
c11=ax.contourf(lon,lat,temp2,np.arange(-20,20,5),extend='both',transform=ccrs.PlateCarree(),cmap='gist_rainbow')
clip=maskout.shp2clip(c11,ax,'F:/Rpython/lp27/data/china0')
cbar=plt.colorbar(c11,shrink=0.99,aspect=30,fraction=.03,pad=0.01)
cbar.set_ticks(np.arange(-20,20,5))
cbar.ax.tick_params(labelsize=12, direction='in', right=False)
font3={'family':'SimHei','size':12,'color':'k'}
ax.set_title('2020年2月中国区域ERA5气温分布图',fontdict=font3)
ax0 = plt.gca()
ax0.outline_patch.set_linewidth(0.5)
ax2 = fig.add_axes([0.7365, 0.11, 0.2, 0.2],projection=proj)
ax2.set_extent([105.8, 122,0,25])
ax2.add_feature(cfeature.OCEAN.with_scale('50m'))
ax2.add_feature(cfeature.LAND.with_scale('50m'))
ax2.add_feature(cfeature.LAKES.with_scale('50m'))
ax2.add_geometries(Reader(r'F:/Rpython/lp27/data/river1.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='b',linewidth=0.2)
ax2.add_geometries(Reader(r'F:/Rpython/lp27/data/china1.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='k',linewidth=0.2)
ax2.add_geometries(Reader(r'F:/Rpython/lp27/data/china2.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='k',linewidth=0.1)
ax2.add_geometries(Reader(r'F:/Rpython/lp27/data/ne_10m_land.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='k',linewidth=0.2)
ax2.add_geometries(Reader(r'F:/Rpython/lp27/data/ne_50m_lakes.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='k',linewidth=0.2)
c21=ax2.contourf(lon,lat,temp2,np.arange(-20,20,5
),extend='both',transform=ccrs.PlateCarree(),cmap='gist_rainbow')
clip=maskout.shp2clip(c21,ax2,'F:/Rpython/lp27/data/china0')
ax0 = plt.gca()
ax0.outline_patch.set_linewidth(0.5)
plt.savefig('F:/Rpython/lp36/plot90.png',dpi=800,bbox_inches='tight',pad_inches=0)
plt.show()

4 批量下载ERA的数据
4.0 安装 ecmwf-api-client
4.0.1 pip install ecmwf-api-client
4.0.2 https://pypi.org/project/ecmwf-api-client/
4.1 官网教程
https://confluence.ecmwf.int/display/WEBAPI/Access+ECMWF+Public+Datasets
4.2 附上获取API_key的地址:
https://api.ecmwf.int/v1/key/
4.3 Notepad++软件中配置.ecmwfapirc.文件
注:记事本也可以打开,人为修改后缀即可
位置:C:/Users/电脑用户名
{
"url" : "https://api.ecmwf.int/v1",
"key" : "8c6656f87a7df4c2295c2142xxxxxxxx",
"email" : "xxxxxxxxx@hotmail.com"
}
4.4 下载数据
https://www.ecmwf.int/en/forecasts/datasets/browse-reanalysis-datasets

#!/usr/bin/env python
from ecmwfapi import ECMWFDataServer
server = ECMWFDataServer()
polynya_boundary = "90/-180/80/180"
server.retrieve({
"class": "ei",
'area':polynya_boundary,
'format':"netcdf",
"dataset": "interim",
"date": "20190101/20190201/20190301/20190401/20190501/20190601/20190701/20190801",
"expver": "1",
"grid": "0.75/0.75",
"levtype": "sfc",
"param": "205.128",
"step": "0-12",
"stream": "mdfa",
"type": "fc",
"target": "F:/Rpython/lp36/ERAInterim813.nc",
})
5 批量下载(见下期)
6 IDM手动下载
操作请参考:

《使用IDM6.3.8免费破解版下载器批量下载CMIP6数据集教程》

