A. 如何使用python访问ECMWF公共数据集
1.安装ECMWF KEY
如果您没有帐户,请通过https //apps.ecmwf.int/registration/ 进行自我注册,然后转到以下步骤。
登录https //apps.ecmwf.int/auth/login/
通过https //api.ecmwf.int/v1/key/ 获取密钥
请注意,该密钥在1年内到期。您将在到期日期前1个月收到注册电子邮件地址的电子邮件,并附上续订说明。要查看当前密钥登录的到期日期,请访问www.ecmwf.int
复制此页面中的信息,并将其粘贴到文件$ HOME / .ecmwfapirc(Unix / Linux)或%USERPROFILE% .ecmwfapirc(Windows;
如何创建前导点文件?
重命名
创建file.txt
重命名.file.,最后一个点将被删除,你就得到.file
这里我们需要 创建 .ecmwfapirc 文件 ,并将下面内容拷贝进去
上面的文件放在 %USERPROFILE%下,这里这个路径可以在用户变量中找到,本人电脑用户名为Cronous 路径为C:UsersCronous
所以将.ecmwfapirc 放在上面路径下面
$ HOME / .ecmwfapirc(Unix / Linux)或%USERPROFILE%。ecmwfapirc(Windows)的内容
{2.安装客户端库
该版本的库提供对Python 2.7.x和Python 3的支持。
您可以ecmwfapi通过在Unix / Linux上运行来安装python库:
sudopipinstallhttps://software.ecmwf.int/wiki/download/attachments/56664858/ecmwf-api-client-python.tgz或在Windows上:
pip installhttps://software.ecmwf.int/wiki/download/attachments/56664858/ecmwf-api-client-python.tgz如果您无法运行sudo或pip命令,只需下载ecmwf-api-client-python.tgz。提取其内容并将模块复制ecmwfapi到环境变量指向的目录中PYTHONPATH。
3.检查数据可用性
要查看ECMWF Public Datasets的可用性,请访问Web界面:
http://apps.ecmwf.int/datasets/
使用此界面,您可以发现我们存档中提供的所有ECMWF公用数据集。我们强烈建议您浏览我们的公共数据集以熟悉其可用性。您可以选择一个公共数据集,并开始浏览其内容。
请考虑有关内容的一些注意事项:
不同的ECMWF公共数据集包括不同的“参数”,“时间”和“步骤”
在每个ECMWF公共数据集中,并非所有“参数”都可以从所有“步骤”
在每个ECMWF公共数据集中,并非所有“时间”都提供所有“步骤”
上面的Web界面将帮助您检查和了解可用性。对于任何类型的选择,系统将以动态方式更新属性以反映当前的可用性。(即如果您更改步骤,一些参数将被添加或删除)。
小费
选择完成后,我们鼓励用户使用页面底部的“查看MARS请求”功能。使用这个MARS请求,你可以建立自己的Python脚本。
这里说一下查看MARS请求可以自动生成python脚本样例文件,我们可以对照着学习一下,如下面的我选择的数据源:
我的请求已经排队(或活动)了很长时间。我要杀了吗?
根据许多因素和限制,请求可能需要一些时间才能完成。
访问您的工作列表以查看请求的状态
您可能需要访问我们的疑难解答页面了解更多信息。
进一步
我可以要求“netcdf”格式的数据吗?
是的,你只需要添加你的请求“格式”:“netcdf”
我可以要求有限区域吗?
是
如果您已经在请求中设置了“grid”关键字,可以添加“area”:“coordinates”关键字。您可以设置预定义的区域,例如欧洲,或者使用北/西/南/东的坐标设置区域。
您还可以访问MARS区域关键字以获取更多信息:后处理关键字。
见下面的例子。
转至元数据结尾
由Cristian Simarro创建,最后修改于五月11,2015
转至元数据起始
TIGGE压力水平控制预测
TIGGE表面扰动预测
请参阅简要请求语法来了解每个关键字。
TIGGE压力水平控制预测
10m风组件,10m v风组件,来自NCEP。所有压力水平。
ECMWF公共数据集Web界面
#!/usr/bin/env =ECMWFDataServer()server.retrieve({'origin':"kwbc",'levelist':"200/250/300/500/700/850/925/1000",'levtype':"pl",'expver':"prod",'dataset':"tigge",'step':"0/6/12/18/24/30",'grid':"0.5/0.5",'param':"131/132",'time':"00/06/12/18",'date':"2014-10-01",'type':"cf",'class':"ti",'target':"tigge_2014-10-01_00061218.grib"})TIGGE表面扰动预测
2m温度。01 NOV 2014,来自ECMWF
ECMWF公共数据集Web界面
#!/usr/bin/env =ECMWFDataServer()server.retrieve({'origin':"ecmf",'levtype':"sfc",'number':"1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34/35/36/37/38/39/40/41/42/43/44/45/46/47/48/49/50",'expver':"prod",'dataset':"tigge",'step':"0/6/12/18",'grid':"0.5/0.5",'param':"167",'time':"00/12",'date':"2014-11-01",'type':"pf",'class':"ti",'target':"tigge_2014-11-01_0012.grib"})来自日本东京日本的rjtd
#!/usr/bin/env =ECMWFDataServer()server.retrieve({'origin':"rjtd",'levtype':"sfc",'number':"1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26",'expver':"prod",'dataset':"tigge",'step':"0/6/12/18",'grid':"0.5/0.5",'param':"167",'time':"00/12",'date':"2014-11-01",'type':"pf",'class':"ti",'target':"tigge_2014-11-01_0012.grib"})来自rksl,韩国:
#!/usr/bin/env =ECMWFDataServer()server.retrieve({'origin':"rksl",'levtype':"sfc",'number':"1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23",'expver':"prod",'dataset':"tigge",'step':"0/6/12/18",'grid':"0.5/0.5",'param':"167",'time':"00/12",'date':"2014-11-01",'type':"pf",'class':"ti",'target':"tigge_2014-11-01_0012.grib"})B. [Xarray] 1. 数据结构
参考 Xarray官方文档 , Python气象数据处理进阶之Xarray(1):Xarray的数据结构
在Xarray中,数据是由结构和标签的,分为以下几种:
1.DataArray:
带冲正有标注或命名维度的多维数组。DataArray将metadata(例如:维名称,坐标和属性)添加到基础的 未标记 的数据结构,例如numpy和Dask数组。
2.Datasets:
具有类似字典结构的尺寸对其的DataArray对象的 集合 。因此,可以在单个DataArray的维度上执行的大多数操作都可以在Dataset上执行。
Dataset是多个DataArray的集合
3.Variable:
类似于NetCDF的变量。由dimensions,data和attributes组成。variable和numpy数组之间的主要功能闹毁区别在于,对variable的数字运算可以通过 维名称 实现数组广播。
通俗的讲,variables < DataArray < Dataset (<指包含于)。这种解释不完全正确,但是初学者可以这样理解。
Xarray通过对维命名的操作实现数据筛选和处理,实现数据的标记和命名通过以下几个定液判备义实现:
* Dimension : 每一轴的维名称(e.g.,('x','y','z'))。
* Coordinate : 坐标或刻度。类似于字典的序列,将每个点标记。比如说dimension是纬度,那么对应的coordinate就是纬度坐标(90°N,89°N,88°N……89°S,90°S)。
* Index : 索引号,也可以说是位置标号。a[0]代表a数组的一个数,0就是index。
可以看到,该文件是一个Datasets,里面含有变量:Data Variables,数据集的维度有经度纬度和时间,各自有各自的坐标Coordinates,同样数据集还有一些属性来表明数据集信息。
我们可以通过:
来分别查看数据集中包含的变量,维,坐标。
再比如NCEP的位势高度资料:
基本同上。
需要说明的是,ncl数据中存在short格式,在读取时需要使用short2flt()函数,但是在Python中不存在short格式,默认均为float,无需考虑这一点。
有时我们通过其他手段读取了相关数据,但是数据是np.array格式的,我们需要将其转换为DataArray,亦或我们需要输出一个NC文件,需要将计算后的数组转为DataArray格式,这就用到了创建的方法。
1.Data: 数据,可以是numpy ndarray,series,DataFrame,pandas.panel等格式
2.coords: 坐标列表或字典
如果是列表,则应为元组列表。其中第一个元素为dimension name,第二个元素是对应的坐标array_like对象。
用字典格式比较好
3.dims: 维名称列表
如果省略,并且coords是元组列表,则维度名称取自coords。
4.attrs: 属性
5.names: 变量名
以上,除了data外,都不是必须的。
创建示例如下:
上面提到,除了data以外,其他都是不必要的
如果是从一个DataFrame数据转化为DataArray的话(这种操作通常是为了将Pandas和Xarray联合使用):
会自动识别行列的名称和序号。
官方文档还有更复杂的例子,需要的话再去官网查看。
在创建了数据之后,我们同样可以使用相关的操作获取DataArray的各种信息:
如果想对DataArray的值修改可以通过以下两种方法:
两种结果是等价的,但官方只给出了第一种方法。
*通过指令 foo.rename('temperature') 改名,比如通过hgt计算得到了一个新变量,需要改名,就可以用这个指令。
在得到一个DataArray后,用于画图时,比如我们需要获取它的经度和纬度(在这里,刚刚的例子是时间和高度),那么可以直接通过
这两种方式取出坐标信息。
要修改或者删除某坐标信息的话,原理和修改数据是一样的:
官网给出一个以气候数据为例的Dataset结构:
<center>
</center>
一个数据集,包含了数据主体(Temperature,Precipitation),维度坐标(latitude,longitude)。
根据官网的例子,一个Dataset是这样创建的,实际上与DataArray类似:
实际上这个例子与我们通常接触的不太一样,因为大部分数据的lat和lon都是一维的。
对Dataset的操作和DataArray基本一致,不再重复。