介绍如何使用python批量下载EC数据以及使用wget批量下载NCEP/NCAR以及CMIP资料。
1、使用python批量下载ECMWF数据(以EI数据为例)
首先在EC官网注册账号并登录。
点击进入EC公共数据集获取流程,根据提示进行以下的操作。
1. 安装ECMWF key
(Recommended) Save your API key credentials into a file
将秘钥复制并保存为一个名为.ecmwfapirc的文件中。并将文件保存在根目录中。Linux的话直接输入
1 | cd |
进入。
windows的话位于C:\Users<USERNAME>\下。注意,文件是无格式文件,文件名为.ecmwfapirc!
秘钥内容参考:
1 | { |
(如果是linux,还可以通过声明环境变量的方式建立key。)
1 | export ECMWF_API_URL="https://api.ecmwf.int/v1" |
这个和建立.ecmwfapirc二选一即可(仅限linux)。
再或者将以下内容包含在py脚本内(我使用的是第一种方法,建立好以后都不用再去管了,比较方便,迁移电 脑只需要拷贝秘钥文件即可)
1 | server = ECMWFDataServer(url="https://api.ecmwf.int/v1",key="*******",email="******@****.com") |
2. 安装依赖库
1 | pip install ecmwf-api-client |
推荐第二种,使用conda统一管理最为方便,不会出现库混乱的情况。
尝试
1 | from ecmwfapi import ECMWFDataServer |
检查是否安装成功。
完成这两步后,就可以开始批量下载数据了。
3. 下载数据
回到数据集选择页面选择需要的数据集(这里以EI的daily资料为例),挑选变量和时间后选择
View data retrieval request
就进入一个新页面,包含有下载选取数据的py代码。在本地新建一个py脚本,复制这些代码到本地脚本。然 后进行一些编辑即可。
4. 脚本语法
脚本主要是以一个字典类型去设计的。初始提供了一些参数,还有一些其他的参数我们可以去额外添加,在这 里我补充完整以供参考。
1 | #!/usr/bin/env python |
我们进行逐条的分析“class”: “ei”,”dataset”: “interim”表明是EI资料集;“date”表明了资料日期;“grid”表明水平分辨率;“levelist”代表层数;“levtype”代表高度类型,pl代表pressure level,sfc则是地面层等等;“param”为变量代码,“stream”为场的类型,moda代表monthly means of daily means月平均;“type”中an代表再分析,地面层有一些数据则是预测量,是不同于an的;“area”代表资料的范围,上/左/下/右 的顺序。最后两个一个是下载文件格式,一个是文件路径+文件名,默认是脚本路径。
弄清楚了代码含义,就可以进行修改,自定义自己想下载的数据了。尤其是关于时间部分,比如想下载1979-2018年的全部数据,那么就在整个脚本外层套一个循环,把日期和输出部分格式化替换,或者就是利用pandas,timedate等库建立一个对应格式的时间字符串即可。
而关于日数据在时间设置上更为方便,直接修改为19790101/to/20181231即可,月数据不能使用的原因是他只识别year+month+01。
2、使用wget批量下载NCEP/NCAR等数据
Linux系统中的wget是一个下载文件的工具,它用在命令行下。Windows10用户想使用wget只需开启WSL功能即可。
NOAA提供了大量数据的下载,比如最常用的NCEP/NCAR Reanalysis 1数据集。
但是很多数据都被分为很多个文件(每年一个)来下载,一个一个点实在是麻烦,同时点很多又可能导致下载失败。仔细的话就会发现下载链接是有规律的。比如逐日位势高度资料
1 | ftp://ftp2.psl.noaa.gov/Datasets/ncep.reanalysis.dailyavgs/pressure/hgt.1948.nc |
所有的都一样,唯独hgt.1948.nc的年份部分发生了区别。
进入bash,只需要最简单wget命令即可下载该文件:
1 | wget ftp://ftp2.psl.noaa.gov/Datasets/ncep.reanalysis.dailyavgs/pressure/hgt.1948.nc |
这时,我们只需要设计一个循环,来使年份部分发生变化即可。
1 | for (( i = 1948; i < 2020; i++)) |
对于CMIP资料的下载也是同样的道理。前些日子被CMIP资料下载搞的有些崩溃,很多模式一个变量能分成几十上百个小文件,一个一个手点很不现实。最后就用类似的循环和索引实现了自动化的批量下载。