收藏本站 劰载中...网站公告 | 吾爱海洋论坛交流QQ群:835383472

[Python] python下载ERA5步骤及其绘制

[复制链接]

ERA5是海洋最常用的一个再分析产品,是ECMWF对全球气候的第五代大气再分析。目前ECMWF的数值预报结果公认的世界领先,很大程度是因为其先进的资料同化系统。再分析资料是使用资料同化的方法,将模型数据与来自世界各地的观测数据与结合起来,形成一个全球完整的、一致的数据集。
4 s0 X) |  m6 |' ^& Q; Y

海洋领域的很多研究,都需要用到ERA5再分析数据,那么ERA5如何获取呢,虽然官网已经有英文教程了(www.52ocean.cn),但还是会遇到各种各样的问题,真的让人心态爆炸。虽然数据集是公开的,但是长时间大规模的资料下载还是不容易的,资料量大,下载时间长,下载的过程也经常中断。今天说一下我获取的过程,希望能对各位有所帮助。

下载ERA5主要分为三步:

1. 官网注册,获取CDS API key。

2. 安装python相关的库。

3. 复制粘贴代码,下载数据。

具体步骤及一些遇到的问题如下:

1.获取cds key

1.1 先登录网站(www.52ocean.cn),注册完成后点击上方。就会有一个黑色的方框,url:,key等等,如下图,复制一下。

$ x1 _9 T. {) K+ A4 X! U, B/ X# x" E

ad33201d24367f151771f48cc298371b.png


# U# X9 J8 e1 j- A( k$ g. D

1.2 在c盘/用户/用户名 这个目录下创建一个 创建一个.cdsapirc文件。注意不是创建一个txt,然后改为.cdsapirc。关于.文件的创建方式可参考:www.52ocean.cn

/ y7 d5 G- L7 J4 x

5f9d9e9c37d39fc340834e52cc45b1b6.png

: ~! Y3 F6 J# r+ `* W

1.3 文件创建成功后使用记事本编辑内容如下(把刚刚复制的key等内容替换一下,verify必须为0,表示同意下载协议):


( j6 i0 s2 K0 F/ L( m1 E8 ?

[Python] 纯文本查看 复制代码
url: [url=https://cds.climate.copernicus.eu/api/v2]https://cds.climate.copernicus.eu/api/v2[/url]

key: uid:api key


verify: 0

3 [$ q4 s' Q( L$ n5 K

2.安装pythoncdsapi

2.1 官网下载python3.7,安装,然后按win+r键,然后输入:pip install cdsapi .正常情况下会安装完毕,可以跳到步骤3了。


4 k( E7 _. P" w, }  s4 o2.2 但我的就出错了。然后我下载原安装包,然后解压,运行cmd,然后进入解压目录输入:pythonsetup.py install ,安装,各种方法都不行。报错SSLError(SSLCertVerificationError(1,'[SSL: CERTIFICATE_VERIFY_FAILED]…”。
9 G4 ~# u' @, U/ O2 c$ h

解决:win+r键, 然后输入:

3 t0 S7 E9 h7 g2 H& M0 O$ J7 L

[Python] 纯文本查看 复制代码
python -mpip install cdsapi --trusted-host pypi.org --trusted-host

+ F5 H/ v5 r8 K

3 选择下载数据

进入刚刚的网站,(1.1中网址),点击:Get ERA5 from the Climate DataStore。注意选择自己需要的对应产品,由于产品丰富ECMEWF网站也比较复杂,尤其是针对新人,可以点击上面的搜索栏搜索关键词。

* O! Z, P5 F, d3 ?

dfb0bb5e9de344cc2c07d3a3cbcbc800.png

2 u; l, r; h, R9 @3 q9 B

如下图,进入需要的产品后,选择自己需要的年月时间,以及数据格式(支持grib和nc)。点击Show API request,复制代码。


$ v+ B1 ~. ^' ?) D

52127b814392cc9fb3ac2be5dc0c3834.png


" t( e* k5 |8 Z. A" U) E! ^% _' e$ Z* S

用python的idle运行,几十kb/s,用spyder运行就很快,几十到几百kb/s。有时在合适的时间段下载也非常主要,在晚上或者早上可能会快一些。下载文件位置位于你运行脚本同目录下。


! {4 j3 G% T) D7 G) L( b; X

7bfe13f473ac814cd89c3af47dc6b368.png

6 g1 n0 p9 c) H" g3 P0 Q

有时或许我们并不需要下载数据,只是为了查看数据,官网还提供直接的画图工具:ToolboxEditor。直接网页上运行,官网提供案例,简单易学,使用非常方便。但缺点就算运行速度不是那么快。但有时在检验我们自己的画图代码或者数据是否正确时非常有用。


1 K8 C- F! s7 M- K1 t0 y7 G

4cde9e8d95dbfc62f557b6cb2868d507.png

/ t  L& s; f( N9 M  M9 `

最后简单绘图检查一下下载的文件,全球陆地2m高气温,以下为运行的代码:


/ P. v/ v! j4 u) V

2a40fd116875ae1236e65b29b092d5d6.png


3 c( _1 F9 y5 Q4 S* w* k5 z3 T3 o8 p6 K! U$ U1 w4 t8 B, }9 `# D

6 y9 D, l- u) @* \
[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()
6 a3 h2 p+ {% b  s" X9 ?
​以下全文代码均已发布至和鲸社区,点击下面链接前往,可一键fork跑通:

游客,如果您要查看本帖隐藏内容请回复


6 k9 M' ?4 x, @/ t/ b7 T: J7 B3 @: u. g

0 J; I0 @- q+ A) \, Q! c
回复

举报 使用道具

相关帖子

全部回帖
暂无回帖,快来参与回复吧
懒得打字?点击右侧快捷回复 【吾爱海洋论坛发文有奖】
您需要登录后才可以回帖 登录 | 立即注册
南阳张小原
活跃在2024-11-16
快速回复 返回顶部 返回列表