NetCDF数据格式在海洋断面调查数据存储中的应用

2016-08-31 07:22龙绍桥沈继平唐德富陆伟先

赵 强,龙绍桥,沈继平,唐德富,陆伟先

(国家海洋局宁波海洋环境监测中心站,浙江宁波 315040)

·研究简报·

NetCDF数据格式在海洋断面调查数据存储中的应用

赵强,龙绍桥,沈继平,唐德富,陆伟先

(国家海洋局宁波海洋环境监测中心站,浙江宁波315040)

摘要:通过制定合理的存储规范,将NetCDF数据格式应用于海洋断面调查数据的存储,使NetCDF文件中可以包括调查记录中的全部主要信息和数据,并使某一特定站位、层次、变量的数据在不同航次的NetCDF文件中位于相同的阵元位置,相对于Excel或文本格式更便于高效的通过MATLAB等程序语言进行数据的批量读写操作。本文也介绍了NetCDF在MATLAB中的读写操作。

关键词:NetCDF;存储规则;MATLAB

国家海洋局宁波海洋环境监测中心站承担着东海断面海洋环境调查任务,调查计划每季度进行一次,时间分别在2、5、8、11月份;自北向南分布有3个断面,分别位于长江口至济州岛连线、30°N和27°N,设计站位34个;采样深度为依照水深不同而不同,采样深度见表1;调查内容包括温度、盐度、营养盐、溶解氧、pH、碱度等。这些数据以Excel表格的形式存储为电子文档,供业务和科研人员使用。在使用时,当需要获取特定数据时,通常需要手动打开Excel文件,找到相应站位、深度对应的数据。如果所需的数据量较大,人工查找的方式费时费力,我们期望能够通过编程的方式自动获取对应的数据,但是由于每次调查的

站位数、站位实际坐标、采样深度、调查站位顺序会因季节和海况有所差异,导致每次调查获得的数据量都不用,因此数据在Excel表格中所处的位置也都会不同。如果采用编程方法直接对这些Excel文件读取需多次对关键词进行搜索,效率低下且较难实现;如果先按照某一规则先对调查数据进行标准化处理,使特定数据在文件中的位置固定,在批量获取数据时直接调取对应位置的数据,则可提高效率。

表1 东海断面调查站点采样深度

NetCDF(Network Common Data Form,网络通用数据格式)是一种面向数组型的数据描述方法和编码标准,是由美国大学大气研究协会(University Corporation for Atmospheric Research,UCAR)的Unidata项目科学家针对科学数据的特点开发的[1-2]。NetCDF以数组的形式保存数据,同时包含了数据或数据集的信息,可以对数据进行高效地存储、管理、获取和分发,因此被广泛应用于大气科学、海洋学等诸多领域,也被主流程序语言所支持(如C、C++、Python、Fortran、MATLAB等)[3-4]。

贾俊涛等[4]将海底地形数据作为实验数据,比较了NetCDF格式、文本格式和二进制格式在文件的存储大小、存储时间、读取时间和检索时间四项指标上的优劣,结果显示NetCDF格式在前三项上的效率略优于其它两种格式,而在第四项检索时间上的效率显著优于其它两种格式。通过对海洋断面调查数据进行整理,制定合理的存储规则,将调查数据存储为NetCDF格式,每个航次形成一个文件,就可以方便的通过编程对数据进行批量读取,便于数据的管理和应用。

1断面调查数据存储规则

NetCDF文件中存储的数据一般通过三种信息进行描述,即维度(dimensions)、变量(variables)和属性(attributes)。其中变量用于描述数据数组的基本信息,如:数组名、数据类型(整型、浮点型、字符型、等)、维数(一维、二维、等)等;维度定义了变量中每一维的长度;属性则给出了数据或数据集的附加信息(如数据的全名、单位、值的含义、数据来源、调查时间、等)。

1.1维度

维度决定了各变量数组的大小。根据断面调查特征,在存储规则中设置三种维度,分别为站位数、采样层数、站位名长度。其中站位数和采样层数决定了NetCDF文件中温度等变量的数值大小。为了保持各航次的特定数据在各文件中的排序一致,以最大站位数和最大采样层数作为维度,即站位数统一设为34个,采样层数设为16层,分别为0、5、10、15、20、25、30、50、75、100、125、150、200、250、300和400 m,对于无观测的站位、层次以空数据NaN表示。站位名长度用4位的数字加以表示。维度设置见表2。

表2  维度设定

1.2变量和属性

变量用来定义数组,这些数组可以用来存储调查信息(如站位名、经纬度、调查时间等)和实际数据(如温度、盐度、溶解氧)等,每个变量都至少应包括维度信息和数据类型信息。属性用来定义数据的单位和对数据的进一步描述。变量和属性的设定见表3。

表3  变量和属性设定

由于各航次调查站位可能存在一些不同,我们用station_name_valid变量表示该站位是否有进行观测,0表示有观测,1表示未观测;针对调查中站点的实际位置和采样的实际深度与设计位置、深度可能存在偏差的情况,我们用lon_real、lat_real和station_level_real来表示实际的站点位置和采样深度。将海洋环境变量(如温度等)表示为站位数和层数的二维数组,对于没有进行观测的站位、水层,用NaN填充对应的变量值。每一组海洋环境变量数组都对应一组标识数组(_flag)用来表示数据的观测质量,用0表示数据正常,2表示数据可能存在异常,4表示数据没有观测。

通过这种存储规则,NetCDF文件中可以包括断面调查记录中的全部主要信息和数据,而且某一特定的站位、采样深度、变量的数据在不同航次的NetCDF文件中位于相同的阵元位置,因此可以通过编程的方法方便高效的调取。

2 NetCDF格式在MATLAB中的应用实例

MATLAB是一种常用的数学软件,可以进行复杂的数据运算,在海洋研究中经常被用于数据的读写、处理、分析、计算和可视化。MATLAB对NetCDF格式文件的支持一直在不断加强。在MATLAB R2011a版本之前,我们需要安装额外的插件和工具包来对NetCDF文件进行操作;而在之后的版本,MATLAB则内置了对NetCDF格式的支持,且提供了High-level和Low-level两种文件操作方式。High-level方式操作方便,而Low-level方式的功能则更为强大。

下面以温度变量为例,简要介绍通过MATLAB制作一个NetCDF文件的过程,制作过程分为创建和写入两个部分。我们采用MATLAB R2014a版本,用Low-level方式创建NetCDF文件,用High-level方式将观测数据写入文件。

2.1NetCDF文件的创建

Low-level方式创建一个NetCDF文件主要包括三个步骤:定义维度、定义变量、定义属性。

1)用netcdf.create命令创建一个空的NetCDF文件:nc=netcdf.create('文件名.nc','clobber');

2)用netcdf.defDim命令定义维度:nsta=netcdf.defDim(nc,'nsta',34);%站位数34 nlevel=netcdf.defDim(nc,'nlevel',16);%采用层数16

3)用netcdf.defVar命令定义温度变量,数据类型为浮点型:temp=netcdf.defVar(nc,'temp','NC_FLOAT',[nsta,nlevel]);

4)用netcdf.putAtt命令定义属性:可以定义温度的局部属性,如全名、单位等,netcdf.putAtt(nc,temp,'long_name','temperature');netcdf.putAtt(nc,temp,'units','degree Celsius');

5)用netcdf.endDef命令结束定义:netcdf.endDef(nc);

6)用netcdf.putVar命令将NaN作为温度的默认值写入变量数组:netcdf.putVar(nc,temp,NaN(34,16));

7)用netcdf.close命令把数据写入文件中,结束文件创建:netcdf.close(nc);

至此一个NetCDF文件创建完成。

2.2NetCDF文件的读写

将整理好的Excel表格导入MATLAB,并按照预定的站位顺序排序,通过循环判断各环境变量数值所处的站位和水层,然后用High-level方式的ncwrite命令将数据依次写入NetCDF文件即可。写入命令为:ncwrite(文件名,变量名,变量值)。

通过ncread命令,可以将NetCDF文件中的数据全部或部分的读入MATLAB进行进一步的处理、分析、可视化,或输出为其它软件所需要的文件格式。读取命令为:ncread(文件名,变量名)。

3结论

本文将NetCDF数据格式应用于断面调查数据的存储。通过制定存储规范,使NetCDF文件中可以包括调查记录中的全部主要信息和数据,而且使某一特定站位、层次、变量的数据在不同航次的NetCDF文件中位于相同的阵元位置,可以通过MATLAB方便的进行数据的创建和读写操作,便于对数据的进一步整理、分析和可视化处理。与Excel格式的数据报表相比,NetCDF文件具有读写效率高、可操作性强、平台支持广泛的优点;缺点是直观性不高,且操作需要一定的编程基础,因此更适合于数据的批量读取。

参考文献:

[1]REW R K,DAVIS G P,EMMERSON S,et al.NetCDF User's Guide for C[Z].An Interface for Data Access,Version 3,1997.

[2]查石祥.NetCDF数据的编程式访问[J].气象科技,2004,32(增刊):40-43.

[3]刘文军,李 靖,袁昌洪,等.基于NetCDF数据模型的气象资料存储设计[J].安徽农业科学,2009,37(3):1 370-1 371.

[4]贾俊涛,孟婵媛,宋海英,等.基于NetCDF的海底地形网格数据模型创建与调度[J].海洋测绘,2007,27(5):22-25.

中图分类号:P731

文献标识码:A

文章编号:1008-830X(2016)01-0086-04

收稿日期:2015-10-19 基金项目:海洋赤潮灾害立体监测技术与应用国家海洋局重点实验室(MATHAB2014006)

作者简介:赵强(1982-),男,浙江宁波人,博士研究生,研究方向:近岸动力学及其模拟.E-mail:qiangzhao.cn@gmail.com

The Application of NetCDF Data in the Storage of Marine Section Investigation

ZHAO Qiang,LONG Shao-qiao,SHEN Ji-ping,et al
(Ningbo Marine Environment Monitoring Center,SOA,Ningbo315040,China)

Abstract:A proper standard was designed based on the array-oriented,self-describing data format of NetCDF to store the oceanic section investigation data.Under this standard,the variables of the specific station,level but in different surveys can be stored in the same array element positions of NetCDF files,and the batch read/write processing was more efficient base on NetCDF format than Excel or text format.The read and write processes in MATLAB were also introduced.

Key words:NetCDF;storage standard;MATLAB