ERA5-daily/逐日/每日/其他时间尺度数据下载方法(MacOS版,氮素不同环境的原理基本相同)

一、起因

由于本人比较蠢,我在csdn上查找到的文章看不懂,看了google里面的一些英文,也十分吃力,最后费老大劲下载之后也不知道对不对,就连现在也无法保证自己下载的到底是不是自己想要的daily数据;如果文章内容有误,还请大家批评指正。

现在是凌晨,心血来潮想着写一篇如何下载ERA5的daily(也不仅仅包含daily,也有monthly尺度的),希望能够让自己理清思路,顺便再添加一下如何读取下载的nc文件来检验自己下载的是否正确;

二、相关网站

下载和使用CDS API指导(链接里也有windows/linux等的相关内容):How to install and use CDS API on macOS - Copernicus Knowledge Base - ECMWF Confluence Wikiicon-default.png?t=N7T8https://confluence.ecmwf.int/display/CKB/How+to+install+and+use+CDS+API+on+macOS

查看自己的API的网址:How to use the CDS API | Copernicus Climate Data Storeicon-default.png?t=N7T8https://cds.climate.copernicus.eu/api-how-to提交下载指令的官方文件(包含参数设置、python代码指导等):https://datastore.copernicus-climate.eu/documents/app-c3s-daily-era5-statistics/C3S_Application-Documentation_ERA5-daily-statistics-v2.pdficon-default.png?t=N7T8https://datastore.copernicus-climate.eu/documents/app-c3s-daily-era5-statistics/C3S_Application-Documentation_ERA5-daily-statistics-v2.pdf

三、实际操作

(1)下载和使用CDS API,登陆账户查看密钥

1. 登录CDS(或登录ADS);

ADS俺不太清楚,本人一般用CDS,页面长这样:

2. 点击底部的三个页面的中间的那个栏目,就可以查看一段包含两行代码的内容,这段代码显示了一个URL和您的uid:API密钥信息,就是以下的这个截图的右边的两行代码:

官方说明如下:

  • 对于CDS用户,请访问以下页面,并在”Install the CDS API key”部分的黑色框中复制显示的两行代码(我一般是用酒红的上面的这样的页面,是CDS),链接如下:

How to use the CDS API | Copernicus Climate Data Storeicon-default.png?t=N7T8https://cds.climate.copernicus.eu/api-how-to

  • 对于ADS用户,请访问以下页面,并在”Install the CDS API key”部分的黑色框中复制显示的两行代码,链接如下:

How to use the CDS API | Copernicus Climate Data Storeicon-default.png?t=N7T8https://ads.atmosphere.copernicus.eu/api-how-to

3. 有了密钥,就可以在终端窗口中创建您的密钥文件了!您可以在本地环境或者(如果你python有自己的虚拟环境)自己的虚拟环境里创建密钥文件,命令如下:

nano ~/.cdsapirc

4. 这样就打开了一个密钥文件,这样您就可以将第2步中复制的两行代码粘贴到.cdsapirc密钥文件中,然后保存退出;

5. 接着使用pip安装CDS API客户端,在终端窗口中运行以下命令:

pip install cdsapi

6. 这样CDS API客户端就安装完成了!您可以使用它从CDS和ADS目录中列出的数据集中请求数据了。

(2)在本地/服务器上开始下载数据

创建一个python运行文件,然后python环境记得选择你下载密钥的环境,示例代码如下:

import cdsapi

c = cdsapi.Client()

MONTHS = [
    "01", "02", "03", "04", "05", "06",
    "07", "08", "09", "10", "11", "12"
]

for month in MONTHS:
    result = c.service(
        "tool.toolbox.orchestrator.workflow",
        params={
            "realm": "user-apps",
            "project": "app-c3s-daily-era5-statistics",
            "version": "master",
            "kwargs": {
                "dataset": "reanalysis-era5-single-levels",
                "product_type": "reanalysis",
                "variable": "2m_temperature",
                "statistic": "daily_mean",
                "year": "2020",
                "month": month,
                "time_zone": "UTC+00:00",
                "frequency": "1-hourly",
                "grid": "0.25/0.25",
                "area": [90, -180, -90, 180],  # Corrected area format (North, West, South, East)
            },
            "workflow_name": "application"
        }
    )
    c.download(result)

其中,"year","month"可以是单个string值或者是一个包含自己想要的年份、月份的string的列表;

更多详细的下载相关指南在这本人就不赘述了,详细指南请看以下文件!

https://datastore.copernicus-climate.eu/documents/app-c3s-daily-era5-statistics/C3S_Application-Documentation_ERA5-daily-statistics-v2.pdficon-default.png?t=N7T8https://datastore.copernicus-climate.eu/documents/app-c3s-daily-era5-statistics/C3S_Application-Documentation_ERA5-daily-statistics-v2.pdf

其实本来想着能不能在下载的时候改成自己想要的文件名,但是问了chat,它把c.download(result)改成了这个,运行试了一下,发现下载出来文件连.nc的后缀都没有了并且名字也不是本人想要的名字,如果大家有解决方法希望大家不吝赐教。

    filename = f"era5_daily_mean_2m_temperature_2020_{month}.nc"
    c.download(result, target=filename)

(3)读取nc文件查看自己下载的时间

根据文件名就可以开始读了!

import netCDF4 as nc
import numpy as np
import matplotlib.pyplot as plt

# 指定NetCDF文件的路径
nc_test = 'path_to_file.nc'

# 使用with语句打开NetCDF文件
with nc.Dataset(nc_test, mode='r') as dataset:
    # 读取时间、经度和纬度变量
    time = dataset.variables['time']
    times = dataset.variables['time'][:]
    lats = dataset.variables['lat'][:]
    lons = dataset.variables['lon'][:]
    t2m_data = dataset.variables['t2m'][:]

# print(time)可以查看时间的详细信息
print(time)

# 假设t2m数据的形状为(time, lat, lon),我们选择第一个时间步的数据进行绘图
t2m_at_first_time = t2m_data[0, :, :]

# 创建网格
lon_grid, lat_grid = np.meshgrid(lons, lats)
print(lons)
# 绘制t2m数据
plt.figure(figsize=(10, 6))
plt.contourf(t2m_at_first_time, cmap='coolwarm', origin='upper')
plt.colorbar(label='Temperature (K)')
plt.xlabel('Longitude')
plt.ylabel('Latitude')
plt.title('t2m at First Time Step')
plt.show()

本人画了一个2002-01-01的t2m的-180到179.75,-60到80的全球两米气温图,就是下面这样;

最后的最后,草草收尾了!睡觉!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值