ERA5是海洋最常用的一个再分析产品,是ECMWF对全球气候的第五代大气再分析。目前ECMWF的数值预报结果公认的世界领先,很大程度是因为其先进的资料同化系统。再分析资料是使用资料同化的方法,将模型数据与来自世界各地的观测数据与结合起来,形成一个全球完整的、一致的数据集。
{+ w( t( L! a 海洋领域的很多研究,都需要用到ERA5再分析数据,那么ERA5如何获取呢,虽然官网已经有英文教程了(www.52ocean.cn),但还是会遇到各种各样的问题,真的让人心态爆炸。虽然数据集是公开的,但是长时间大规模的资料下载还是不容易的,资料量大,下载时间长,下载的过程也经常中断。今天说一下我获取的过程,希望能对各位有所帮助。 下载ERA5主要分为三步: 1. 官网注册,获取CDS API key。 2. 安装python相关的库。 3. 复制粘贴代码,下载数据。 具体步骤及一些遇到的问题如下: 1.获取cds key 1.1 先登录网站(www.52ocean.cn),注册完成后点击上方。就会有一个黑色的方框,url:,key等等,如下图,复制一下。
4 `) {7 W0 `! Z4 k
+ v: ?9 |+ O1 y7 z. h7 ^6 _1.2 在c盘/用户/用户名 这个目录下创建一个 创建一个.cdsapirc文件。注意不是创建一个txt,然后改为.cdsapirc。关于.文件的创建方式可参考:www.52ocean.cn
4 |- A, C" W& Y5 s; o0 V' Z- m
4 B/ e l3 t6 i# v" z' [1.3 文件创建成功后使用记事本编辑内容如下(把刚刚复制的key等内容替换一下,verify必须为0,表示同意下载协议): : R- V4 R) b6 r2 A+ y# \4 A
[Python] 纯文本查看 复制代码 url: [url=https://cds.climate.copernicus.eu/api/v2]https://cds.climate.copernicus.eu/api/v2[/url]
key: uid:api key
verify: 0
( v4 z1 }/ k0 `4 W
2.安装python的cdsapi库 2.1 官网下载python3.7,安装,然后按win+r键,然后输入:pip install cdsapi .正常情况下会安装完毕,可以跳到步骤3了。 1 X C: F: ?- u& L) H
2.2 但我的就出错了。然后我下载原安装包,然后解压,运行cmd,然后进入解压目录输入:pythonsetup.py install ,安装,各种方法都不行。报错:SSLError(SSLCertVerificationError(1,'[SSL: CERTIFICATE_VERIFY_FAILED]…”。
4 M& h1 e7 S6 N% x, ] n& a解决:win+r键, 然后输入:
( h0 H) y! h. Z. [ y0 _
[Python] 纯文本查看 复制代码 python -mpip install cdsapi --trusted-host pypi.org --trusted-host
# p. x- A( S9 d6 V6 w; i
3 选择下载数据 进入刚刚的网站,(1.1中网址),点击:Get ERA5 from the Climate DataStore。注意选择自己需要的对应产品,由于产品丰富ECMEWF网站也比较复杂,尤其是针对新人,可以点击上面的搜索栏搜索关键词。
7 P' G$ t7 M! m3 P# B* H
* J; R- d* t3 J* B+ t( C; L" F如下图,进入需要的产品后,选择自己需要的年月时间,以及数据格式(支持grib和nc)。点击Show API request,复制代码。 . f: {- ^( K/ D# j
+ F6 `- a$ c7 [0 f
用python的idle运行,几十kb/s,用spyder运行就很快,几十到几百kb/s。有时在合适的时间段下载也非常主要,在晚上或者早上可能会快一些。下载文件位置位于你运行脚本同目录下。 $ s* r; {, R9 v6 @6 e1 X2 ~
) e' b0 e9 W0 R) r2 H( R$ e
有时或许我们并不需要下载数据,只是为了查看数据,官网还提供直接的画图工具:ToolboxEditor。直接网页上运行,官网提供案例,简单易学,使用非常方便。但缺点就算运行速度不是那么快。但有时在检验我们自己的画图代码或者数据是否正确时非常有用。 , p0 L2 T0 b' U n6 O$ z- p
. ~8 O; L) f! v V! I" g2 n
最后简单绘图检查一下下载的文件,全球陆地2m高气温,以下为运行的代码:
8 T( D/ J9 e( ?5 E
7 @8 b* x5 l/ d$ }* ^" u9 r0 J
& g {0 N [7 H" J/ g
6 M. Y/ h3 y( `4 h- f
[Python] 纯文本查看 复制代码 # -*- coding: utf-8 -*-
def download_era5():
import cdsapi
c = cdsapi.Client()
c.retrieve(
'reanalysis-era5-land',
{
'format':'netcdf',
'variable':'2m_temperature',
'year':'2021',
'month':'01',
'day':'01',
'time': [
'00:00', '01:00', '02:00',
],
},
'download2.nc')
def plot():
from netCDF4 import Dataset as NetCDFFile
import numpy as np
import matplotlib.pyplot as plt
from cartopy.mpl.gridliner import \
LONGITUDE_FORMATTER, LATITUDE_FORMATTER
import matplotlib.pyplot as plt
fromc artopy.io.shapereader import Reader
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import pandas as pd
import numpy as np
mpl.rcParams['font.sans-serif'] = ['SimHei']
nc =NetCDFFile(r'C:/Users/island/Desktop/download2.nc')
print(nc.variables.keys())
temp =nc.variables['t2m'][:]
lat =nc.variables['latitude'][:]
lon =nc.variables['longitude'][:]+180
fig =plt.figure(figsize=(18,15))
ax =fig.add_subplot(111,projection=ccrs.PlateCarree())
leftlon, rightlon,lowerlat, upperlat = (-180,180,-90,90)
ax.set_extent([leftlon, rightlon, lowerlat, upperlat])#,crs=ccrs.PlateCarree())
lons, lats=meshgrid(lon,lat)
m=ax.contourf(lons,lats,temp[:][:][0])#,colors=cmap3)
ax.set_title('t2m',loc='left',fontsize=15)
cbar =fig.colorbar(m,shrink=0.5)
cbar.set_label('t2m(K)', fontsize=15)
plt.savefig('./t2m.png')
if __name__ == "__main__":
download_era5()
plot() * A- F1 F P! H7 @0 X$ X
以下全文代码均已发布至和鲸社区,点击下面链接前往,可一键fork跑通:
& l1 P- Y; C0 T. m- K$ Q( S( q
1 q& ~% q/ d; G, \6 c. E. b6 F1 K: \% T1 ^3 I) l- k' k
|