社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

happy科研 • 3 年前 • 447 次点击  
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
 
447 次点击