距离上次xarray的更新已经过去两个多星期了...,关于xarray插值方法的介绍官方文档已经给的比较详细了,也有公众号推送过相关文章 xarray指南:插值 基于xarray的气象场站点和格点插值,所以xarray的插值部分就不单独说了。
xarray 支持多种文件格式(从 pickle文件到 netCDF格式文件)的序列化和输入输出。
xarray 中的DataArray 和 Dataset 对象除了上节介绍过的直接手动创建之外,更多的情况下却是通过其他数据储存结构转换和存储在硬盘中的数据存储文件读取而来。
xgrads的主要功能是解析Grads文件为xarray对象,可以更好的利用xarray的高维数据分析和可视化功能,加速气象相关的数据处理、分析和可视化。以下是对此库的具体介绍。
使用过WRF的人都知道,它的模拟结果是按照我们指定的时间间隔和模拟时间段依次输出的。但在处理数据的时候呢,比如想画一个时间趋势图之类的时候,挨个读取数据非常繁琐。我们希望能够把所有的数据或者某个我们关心的变量单独提取出来,让其按照指定的维度,如时间维度来排序并整合成一个文件。下面我就分享一下我在日常科研中为了解决这个问题而写的代码,供大家参考使用(代码很简单, 大家只需要把文件名、路径改成自己的就可以用了)。
问题: 需要将 netCDF 文件的数据导出到 *.csv 文件,但希望在不使用循环的情况下完成。目前使用的代码存在性能和代码可读性问题,因为使用了三重循环。
今天直接给大家介绍一下我最近常用的空间绘图神器-Xarray,之所以给大家推荐这个工具包,是因为我最近在空间可视化课程中免费新增的部分内容,其就是使用Xarray工具绘制的。先给大家看一下新增的可视化预览图:
气象领域的数据存储格式大多都是netCDF、HDF、Grib格式,这些文件格式已经发展的比较成熟了,大家也都已经习惯了处理这些格式的文件。但随着数据量的增加以及云计算的发展,这些文件系统已经无法满足需求,针对云计算优化的文件系统应运而生。
上述步骤通常会产生很大的nc文件(>10G),尤其是在处理大量数据时。最近在处理卫星数据时,最终生成的文件甚至超过了50G,有些甚至超过了100G。而目前xarray对于nc格式的大文件存储让人头疼。在存储这些大文件时耗时很长,甚至可能会导致程序挂起。
首先我们先导入所需的数据,本次使用的是经扩展重构的海表面温度 v5 数据集(Extended Reconstructed Sea Surface Temperature, abbr. ERSST)。这个数据集可追溯到 1854 年的海表面温度,并被广泛使用。
近几年,python在气象领域的发展也越来越快,同时出现了很多用于处理气象数据的python包。比如和NCL中的 WRF_ARWUser库类似的 wrf-python模块。
首先看一下测试nc文件,总计7个文件,每个文件大约6.7G,是CNRM-CM6-1-HR模式按照25年的时间分开存储的。
xarray (之前的 xray) 是一个开源的python库。通过提供 pandas 的核心数据结构N维变形功能,从而将 pandas 的标签数据功能应用到物理科学领域。主要是想提供一个类似pandas并且能与pandas兼容的工具包来进行多维数组(而不是pandas 所擅长的表格数据)分析。采用的是地球科学领域广泛使用的自描述数据通用数据模型实现上述功能。
本篇文章将从数据下载、处理、神经网络训练、画图四个大步骤叙说笔者在复现 Deep learning for multi-year ENSO forecasts这篇文章的工作。所涉及Python库有 wget , matplotlib , numpy ,xarray , pytorch 等一系列在深度学习以及气象数据处理中经常使用的函数库,希望这篇文章能够对大家有所帮助。笔者也只是大学二年级的本科生,做这些东西也只是凭借个人兴趣,水平低下、错误频出也是常有的事情,请大家见谅。
xarray专题再次开讲,错过第一部分的可以先去补个课从xarray走向netCDF处理(一):数据结构及数据读取。 今天要介绍的就是xarray的索引功能,通过索引你可以对数据进行切片,从整体中提取你所关注的区域、高度或者时间。
作为曾经地球科学领域最炙手可热脚本语言之一的NCL已经进入维护模式,不再更新。NCAR将使用Python作为地球科学领域的主要数据处理和可视化工具。
数据科学中一种常见的可视化类型是地理数据。Matplotlib 用于此类可视化的主要工具是 Basemap 工具包,它是位于mpl_toolkits命名空间下的几个 Matplotlib 工具包之一。不可否认,Basemap 使用时有点笨拙,甚至简单的可视化渲染也要花费更长的时间,超出你的想象。
想如今气象数据netCDF(.nc)为盛,用者甚多,初学者见之仰天长啸,倘若再由Python经手,netCDF4-python,Iris,xarray,UV-CDAT选择众多,劳心伤神事小,逼出选择困难症事大。多番比对,选用xarray,解查安抚,化繁为简,最为称心。
•NetCDF格式 : netCDF4-python,h5py,h5netcdf,xarray等。 除了上述简单的数据处理库之外,python还提供了NCO和CDO工具的封装,pynco和cdo,提供了更多的便捷操作。•Grib格式:xarray,Iris,pygrib等,有些仅支持类Unix系统。 ECWMF提供了cfgrib工具可将grib格式转换为NetCDF格式,cfgrib库支持Mac,Linux和windows系统。•csv, xlsx等格式:pandas你值得拥有,无论是气象还是其他领域的类似格式数据,使用pandas可以解决你的常用操作。•HDF格式:pandas和h5py可以处理hdf5格式,PyHDF可以处理hdf4格式。•二进制:numpy可以处理二进制数据,同时借助python内置struct模块可以非常方便的处理二进制格式数据。
拖了很长时间的技巧总结,再不写的话我可能也要忘了。趁着这几天在处理数据,赶紧补上,全文共近2500字。
xarray.Dataset 是和 DataFrame 相同的多维数组。这是一个维度对齐的标签数组(DataArray)的类字典容器。它用来展示NetCDF文件格式的数据。
这部分包含的时 wrf-python 模块中的API,如果wrf-python提供的函数不能满足你的需求,你也可以根据已有的API重新编写一个处理函数或是其它的诊断函数。当然,大多数时候我们仅需要wrf-python已经提供的诊断函数和其它可调用函数,可能都不会使用到这些API。
提要中提到的这几种图形都是在气象上比较常用的,地形剖面主要研究地貌对降雨、气流的影响作用;纬度高度剖面图可以用来分析降雨的某些条件,如湿层深厚、上干下湿、风向风速等;时间纬度图研究某个固定经度上的值随时间的演变(这是和大气环流一般自西向东相匹配的,所以时间经度图比较少见)。
这次我们来简单了解下气象数据常用的格式以及处理的工具,常用的数据格式包括普通的二进制格式、文本数据、NetCDF、HDF4/5以及GRIB1/2数据。我们可以利用编程语言例如python、matlab以及c语言,根据数据的说明文档或者相应的数据api开发文档进行读取,此外我们也可以根据提供的command命令行进行高效提取数据。
有关如何用xarray处理NetCDF数据前面已经介绍过四期了。把一些处理NetCDF的基本方法都介绍了一下。
利用Python进行WRF模式后处理的应该都知道,wrf-python用来处理WRF模式结果比较方便,但又太笨重了,经常需要编写很多代码。xarray是目前地球科学领域使用非常多的库,集成度非常高,使用非常方便。
在推出两期数据分享之后,获取数据的小伙伴们也知道,数据格式都是NetCDF(nc) 格式网格数据,虽然我在推文分享中说明使用Python、R或者GIS类软件都是可以进行 处理和可视化绘制的,但是,还是有小伙伴咨询使用编程软件Python或者R处理nc数据,正好也想分享一期关于nc网格数据的可视化绘制过程,这里我们使用R包进行nc数据的处理(Python处理较为简单,将放在空间插值系列的资料中,该部分正在加快进程中哦~~),主要涉及的知识点如下:
在R中读取nc文件,我们首选ncdf4包,其使用参考网址如下:https://rdrr.io/cran/ncdf4/。这里简单介绍下主要的函数:
最近又开始关注数据可视化的内容了,尤其是高维可视化。个人感觉可视化真的是一门呈现信息的艺术。前期的数据处理从海量的数据中提取有效信息,然后以一种简洁美观的方式呈现出来。
Satpy is designed to provide easy access to common operations for processing meteorological remote sensing data.
By: Ali Ahmadalipour (LinkedIn, Twitter)
对于空间数据,我们感兴趣的往往是其中的某一部分,对于不需要的部分需要做一些掩膜(Mask)。 比如只关注海洋的数值变化,那么陆地上的数值对我其实是一种干扰,就要想办法掩盖掉。又比如我有全国的数据变量,但是只想研究其中某几个省份,那也需要对非相关省份进行掩盖。
Unidata在其GitHub站点发起了一个地球科学相关的Python在线培训课程,主要包括大量的绘图示例以及很多气象常用库的入门教程。
前面已经给大家介绍过如何用cdo配合shape文件提取CMIP6指定区域数据,这个思路首先需要用gdal将shape文件转为netCDF格式的文件,然后再用cdo ifthen进行裁剪,今天要给大家介绍的是如何用gepandas+salem库直接用shape文件对CMIP6文件进行掩码,无需把shape文件转换为netCDF格式文件,最后再调用cdo的selbox操作进行裁剪。
在这里,我们介绍一个开源的Python项目,它主要结合matplotlib的绘图实用程序和xarray包的数据管理,并将它们集成到一个可以通过命令行和GUI使用的软件中。
“Hello!大家好哇,欢迎关注“自学气象人”。在这个系列笔记正式开始前呢,我想和大家分享一下作为一个大气科学专业的学子,为什么会选择学习Python。”
最近在处理数据,需要筛选陆地、海洋还有特定区域的信息进行分析,主要还是利用shapefile文件创建mask文件,然后进行筛选。
平时用 xarray 库在处理 nc 格式的数据非常方便,但偶尔还是要用到一些站点数据来辅助分析,而站点数据一般都是用文本文件存储的,比如下图这种格式,从外到内的坐标依次是:年、月、站点、日
linestyle: 设置线型,常见取值有实线(’-’)、虚线(’–’)、点虚线(’-.’)、点线(’:’)
学习气象少不了与等值线 (contour line; isoline) 打交道。proplot 以 matplotlib、cartopy 包作为基础,可使用 matplotlib 中的方法来绘制等值线图。下面介绍一个简单的绘制气温的例子:
南海诸岛子图绘制cartopy比较简单,然而目前基本是用Basemap和geopandas做的。把cartopy加上南海诸岛子图基本上是与BUG斗争,遂放弃。于是直接使用偷懒做法,把南海诸岛加到图中。
cfgrib 是 ECMWF 开发的 GRIB Python 接口,支持 Unidata’s Common Data Model v4,符合 CF Conventions。高层 API 接口为 xarray 提供 GRIB 解码引擎。底层访问和解码由 ECMWF 的 ecCodes 库实现。
上一期,对Python绘制气象实用地图做了比较详细的介绍,尽管已经能够满足部分需求了,但是,在实际的应用需求中,可能还是别的需求,那么,今天就手把手教大家如何绘制几个省份的白化等值线contour地图。另外,也算是对上一期进行补充,谈谈一些小技巧。
领取专属 10元无门槛券
手把手带您无忧上云