Py学习  »  Python

Python批量下载ECMWF欧洲中心数据

happy科研 • 2 年前 • 295 次点击  
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/v2key: 60789:10695ca8-b4c6-49ca-b37a-xxxxxxxxxxxxxx

3 数据网页选取数据

3.1 点击Show API request

import cdsapic = 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可视化绘图

# 导入Python库import numpy as npimport matplotlib.pyplot as pltimport matplotlib.ticker as mtickerimport xarray as xrimport cartopy.crs as ccrsimport cartopy.feature as cfeaturefrom cartopy.io.shapereader import Readerfrom cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatterimport maskoutfrom matplotlib import rcParamsconfig = {"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.15print(temp2)print(temp2.shape)# plotfig=plt.figure(dpi=600,figsize=(12,6))proj=ccrs.PlateCarree()ax = plt.axes(projection = proj)ax.set_extent(region, crs = proj)#ax.coastlines(scale, linewidth = 0.5)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())# Add ocean, land, rivers and lakes#ax.add_feature(cfeature.COASTLINE,lw=0.3) 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)   #aspect控制bar宽度,fraction控制大小比例,pad控制与图的距离cbar.set_ticks(np.arange(-20,20,5))            #设置colorbar范围和刻度标记间隔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)# ax.set_title('2006-12 Month Mean Air Temperature (Level 2m)',{'family':'Times New Roman','size':14,'color':'k'}) 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 pythonfrom ecmwfapi import ECMWFDataServerserver = 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数据集教程



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/118518
 
295 次点击