使用R语言处理netCDF格式的数据(一)

使用R语言处理netCDF格式的数据(一)

应一个知识星球的小伙伴的要求,最近将会推出几个使用 R 语言处理 netCDF 格式数据的教程,这是第一个,本教程主要是带领大家了解 netCDF 格式数据的结构、属性提取等操作。

视频讲解

netCDF

NetCDF(network Common Data Form) 网络通用数据格式是由美国大学大气研究协会(University Corporation for Atmospheric Research,UCAR)的 Unidata 项目科学家针对科学数据的特点开发的,是一种面向数组型并适于网络共享的数据的描述和编码标准。目前,NetCDF 广泛应用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。用户可以借助多种方式方便地管理和操作 NetCDF 数据集。(摘抄自百度百科)

也就是它很有用。本教程使用的数据下载自 NASA:https://disc.gsfc.nasa.gov/datasets/M2I6NPANA_5.12.4/summary 。这个链接可以下载到全球的气温等数据:日度数据、每天四个时点、42 个高度层(使用气压做单位)。不过把他们都下载下来数据量太大了,所以我只选择了大致涵盖中国范围的(西经 60 ~ 150,北纬 0 ~ 60)、四个时点(因为这个卫星一天绕地球四圈,所以每天有四个数据)、42 个高度层、气温数据(其他的我都不是很关心,所以就没有选择)。对了还有时间范围,我选择了 2020 年 3 月 25 日到 3 月 31 日,一共七天,这是为了示例如何处理所有天的数据。

今天我们就先探索下 netCDF 格式的数据的结构。

将 netCDF 格式的数据读入 R

使用 ncdf4 包可以处理 netCDF 格式的数据,需要注意的是 netCDF 格式的数据是 .nc 为后缀的数据。

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

打印处理很多信息,这些信息非常重要,是我们下面进行属性提取的操作指南。

一个很关键的信息就是,这个数据有四个维度:lon, lat, lev, time

获取经度和纬度:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

获取时间向量:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

这个时间是怎么回事呢?我们可以看一下它的单位:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

就是 3 月 25 号 0 点开始的分钟数,也就是说四个时间点分别是 6 点、12 点、18 点和 24 点。

获取高度层向量:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

上面获取的都是维度向量,下面就是最重要的,获取温度值(也就是说这个温度其实是个四维数据,空间的三维+时间变化)

我们再梳理下这四个维度:

  1. 经度范围为 60 —— 150(从左到右),间隔为 0.625 度;(145 个点)
  2. 维度范围为 0——60(从下到上),间隔为 0.5 度;(121 个点)
  3. 时间点也是四个: 6, 12, 18, 24 点
  4. 高度:42 个高度层,使用气压作为单位。

获取四维的温度数据:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

查看 tmp_array 的温度:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

如果大家认真阅读了开头的那个我说很重要的信息,就会发现这个数据里面是有缺失值的,缺失值是多少呢:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

这样我们就得到了 tmp_array,一个存储着温度数据的四维数据。下面我们做几个简单的处理。

我们通常方便处理的是 二维数据,所以我我们先处理下二维的试试,例如第一个高度层和第一个时刻的数据就是二维的了:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

注意这里的 temp 和 tmp 都是温度的意思,不是常有的“临时”之意。

我们把这个数据绘制出了看下,为此我们再读入一个中国省级数据(边界):

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

这里有很多缺失值,其实原因非常简单,第一层的气压是 1000.0hPa,也就是 110m,上图中缺失的地方都是海拔高于 110m 的,对它们来说,第一层还在地下,自然就没有数据了。

这就涉及到海拔和气压的转换了,我编写了一个函数用于气压到海拔的转换:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

我们还可以观测下海拔高度和气温的关系,为此我们选择一个海拔较低的地方,例如上海,可以使用 cn 数据集里面的上海市数据计算上海的质心:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

上海的这个质心坐标大致对应哪个格点呢?

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

也就是经度维度的第 99 个格点和纬度维度的第 64 个格点,我们下面选取第一个时点的数据:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

可以看到并非海拔越高温度越低,存在逆温层。

知识星球链接:https://t.zsxq.com/B2baAmI

#

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×