趙 強,龍紹橋,沈繼平,唐德富,陸偉先
(國家海洋局寧波海洋環(huán)境監(jiān)測中心站,浙江寧波 315040)
·研究簡報·
NetCDF數(shù)據(jù)格式在海洋斷面調(diào)查數(shù)據(jù)存儲中的應(yīng)用
趙強,龍紹橋,沈繼平,唐德富,陸偉先
(國家海洋局寧波海洋環(huán)境監(jiān)測中心站,浙江寧波315040)
摘要:通過制定合理的存儲規(guī)范,將NetCDF數(shù)據(jù)格式應(yīng)用于海洋斷面調(diào)查數(shù)據(jù)的存儲,使NetCDF文件中可以包括調(diào)查記錄中的全部主要信息和數(shù)據(jù),并使某一特定站位、層次、變量的數(shù)據(jù)在不同航次的NetCDF文件中位于相同的陣元位置,相對于Excel或文本格式更便于高效的通過MATLAB等程序語言進行數(shù)據(jù)的批量讀寫操作。本文也介紹了NetCDF在MATLAB中的讀寫操作。
關(guān)鍵詞:NetCDF;存儲規(guī)則;MATLAB
國家海洋局寧波海洋環(huán)境監(jiān)測中心站承擔著東海斷面海洋環(huán)境調(diào)查任務(wù),調(diào)查計劃每季度進行一次,時間分別在2、5、8、11月份;自北向南分布有3個斷面,分別位于長江口至濟州島連線、30°N和27°N,設(shè)計站位34個;采樣深度為依照水深不同而不同,采樣深度見表1;調(diào)查內(nèi)容包括溫度、鹽度、營養(yǎng)鹽、溶解氧、pH、堿度等。這些數(shù)據(jù)以Excel表格的形式存儲為電子文檔,供業(yè)務(wù)和科研人員使用。在使用時,當需要獲取特定數(shù)據(jù)時,通常需要手動打開Excel文件,找到相應(yīng)站位、深度對應(yīng)的數(shù)據(jù)。如果所需的數(shù)據(jù)量較大,人工查找的方式費時費力,我們期望能夠通過編程的方式自動獲取對應(yīng)的數(shù)據(jù),但是由于每次調(diào)查的
站位數(shù)、站位實際坐標、采樣深度、調(diào)查站位順序會因季節(jié)和海況有所差異,導(dǎo)致每次調(diào)查獲得的數(shù)據(jù)量都不用,因此數(shù)據(jù)在Excel表格中所處的位置也都會不同。如果采用編程方法直接對這些Excel文件讀取需多次對關(guān)鍵詞進行搜索,效率低下且較難實現(xiàn);如果先按照某一規(guī)則先對調(diào)查數(shù)據(jù)進行標準化處理,使特定數(shù)據(jù)在文件中的位置固定,在批量獲取數(shù)據(jù)時直接調(diào)取對應(yīng)位置的數(shù)據(jù),則可提高效率。
表1 東海斷面調(diào)查站點采樣深度
NetCDF(Network Common Data Form,網(wǎng)絡(luò)通用數(shù)據(jù)格式)是一種面向數(shù)組型的數(shù)據(jù)描述方法和編碼標準,是由美國大學大氣研究協(xié)會(University Corporation for Atmospheric Research,UCAR)的Unidata項目科學家針對科學數(shù)據(jù)的特點開發(fā)的[1-2]。NetCDF以數(shù)組的形式保存數(shù)據(jù),同時包含了數(shù)據(jù)或數(shù)據(jù)集的信息,可以對數(shù)據(jù)進行高效地存儲、管理、獲取和分發(fā),因此被廣泛應(yīng)用于大氣科學、海洋學等諸多領(lǐng)域,也被主流程序語言所支持(如C、C++、Python、Fortran、MATLAB等)[3-4]。
賈俊濤等[4]將海底地形數(shù)據(jù)作為實驗數(shù)據(jù),比較了NetCDF格式、文本格式和二進制格式在文件的存儲大小、存儲時間、讀取時間和檢索時間四項指標上的優(yōu)劣,結(jié)果顯示NetCDF格式在前三項上的效率略優(yōu)于其它兩種格式,而在第四項檢索時間上的效率顯著優(yōu)于其它兩種格式。通過對海洋斷面調(diào)查數(shù)據(jù)進行整理,制定合理的存儲規(guī)則,將調(diào)查數(shù)據(jù)存儲為NetCDF格式,每個航次形成一個文件,就可以方便的通過編程對數(shù)據(jù)進行批量讀取,便于數(shù)據(jù)的管理和應(yīng)用。
NetCDF文件中存儲的數(shù)據(jù)一般通過三種信息進行描述,即維度(dimensions)、變量(variables)和屬性(attributes)。其中變量用于描述數(shù)據(jù)數(shù)組的基本信息,如:數(shù)組名、數(shù)據(jù)類型(整型、浮點型、字符型、等)、維數(shù)(一維、二維、等)等;維度定義了變量中每一維的長度;屬性則給出了數(shù)據(jù)或數(shù)據(jù)集的附加信息(如數(shù)據(jù)的全名、單位、值的含義、數(shù)據(jù)來源、調(diào)查時間、等)。
1.1維度
維度決定了各變量數(shù)組的大小。根據(jù)斷面調(diào)查特征,在存儲規(guī)則中設(shè)置三種維度,分別為站位數(shù)、采樣層數(shù)、站位名長度。其中站位數(shù)和采樣層數(shù)決定了NetCDF文件中溫度等變量的數(shù)值大小。為了保持各航次的特定數(shù)據(jù)在各文件中的排序一致,以最大站位數(shù)和最大采樣層數(shù)作為維度,即站位數(shù)統(tǒng)一設(shè)為34個,采樣層數(shù)設(shè)為16層,分別為0、5、10、15、20、25、30、50、75、100、125、150、200、250、300和400 m,對于無觀測的站位、層次以空數(shù)據(jù)NaN表示。站位名長度用4位的數(shù)字加以表示。維度設(shè)置見表2。
表2 維度設(shè)定
1.2變量和屬性
變量用來定義數(shù)組,這些數(shù)組可以用來存儲調(diào)查信息(如站位名、經(jīng)緯度、調(diào)查時間等)和實際數(shù)據(jù)(如溫度、鹽度、溶解氧)等,每個變量都至少應(yīng)包括維度信息和數(shù)據(jù)類型信息。屬性用來定義數(shù)據(jù)的單位和對數(shù)據(jù)的進一步描述。變量和屬性的設(shè)定見表3。
表3 變量和屬性設(shè)定
由于各航次調(diào)查站位可能存在一些不同,我們用station_name_valid變量表示該站位是否有進行觀測,0表示有觀測,1表示未觀測;針對調(diào)查中站點的實際位置和采樣的實際深度與設(shè)計位置、深度可能存在偏差的情況,我們用lon_real、lat_real和station_level_real來表示實際的站點位置和采樣深度。將海洋環(huán)境變量(如溫度等)表示為站位數(shù)和層數(shù)的二維數(shù)組,對于沒有進行觀測的站位、水層,用NaN填充對應(yīng)的變量值。每一組海洋環(huán)境變量數(shù)組都對應(yīng)一組標識數(shù)組(_flag)用來表示數(shù)據(jù)的觀測質(zhì)量,用0表示數(shù)據(jù)正常,2表示數(shù)據(jù)可能存在異常,4表示數(shù)據(jù)沒有觀測。
通過這種存儲規(guī)則,NetCDF文件中可以包括斷面調(diào)查記錄中的全部主要信息和數(shù)據(jù),而且某一特定的站位、采樣深度、變量的數(shù)據(jù)在不同航次的NetCDF文件中位于相同的陣元位置,因此可以通過編程的方法方便高效的調(diào)取。
MATLAB是一種常用的數(shù)學軟件,可以進行復(fù)雜的數(shù)據(jù)運算,在海洋研究中經(jīng)常被用于數(shù)據(jù)的讀寫、處理、分析、計算和可視化。MATLAB對NetCDF格式文件的支持一直在不斷加強。在MATLAB R2011a版本之前,我們需要安裝額外的插件和工具包來對NetCDF文件進行操作;而在之后的版本,MATLAB則內(nèi)置了對NetCDF格式的支持,且提供了High-level和Low-level兩種文件操作方式。High-level方式操作方便,而Low-level方式的功能則更為強大。
下面以溫度變量為例,簡要介紹通過MATLAB制作一個NetCDF文件的過程,制作過程分為創(chuàng)建和寫入兩個部分。我們采用MATLAB R2014a版本,用Low-level方式創(chuàng)建NetCDF文件,用High-level方式將觀測數(shù)據(jù)寫入文件。
2.1NetCDF文件的創(chuàng)建
Low-level方式創(chuàng)建一個NetCDF文件主要包括三個步驟:定義維度、定義變量、定義屬性。
1)用netcdf.create命令創(chuàng)建一個空的NetCDF文件:nc=netcdf.create('文件名.nc','clobber');
2)用netcdf.defDim命令定義維度:nsta=netcdf.defDim(nc,'nsta',34);%站位數(shù)34 nlevel=netcdf.defDim(nc,'nlevel',16);%采用層數(shù)16
3)用netcdf.defVar命令定義溫度變量,數(shù)據(jù)類型為浮點型: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命令結(jié)束定義:netcdf.endDef(nc);
6)用netcdf.putVar命令將NaN作為溫度的默認值寫入變量數(shù)組:netcdf.putVar(nc,temp,NaN(34,16));
7)用netcdf.close命令把數(shù)據(jù)寫入文件中,結(jié)束文件創(chuàng)建:netcdf.close(nc);
至此一個NetCDF文件創(chuàng)建完成。
2.2NetCDF文件的讀寫
將整理好的Excel表格導(dǎo)入MATLAB,并按照預(yù)定的站位順序排序,通過循環(huán)判斷各環(huán)境變量數(shù)值所處的站位和水層,然后用High-level方式的ncwrite命令將數(shù)據(jù)依次寫入NetCDF文件即可。寫入命令為:ncwrite(文件名,變量名,變量值)。
通過ncread命令,可以將NetCDF文件中的數(shù)據(jù)全部或部分的讀入MATLAB進行進一步的處理、分析、可視化,或輸出為其它軟件所需要的文件格式。讀取命令為:ncread(文件名,變量名)。
本文將NetCDF數(shù)據(jù)格式應(yīng)用于斷面調(diào)查數(shù)據(jù)的存儲。通過制定存儲規(guī)范,使NetCDF文件中可以包括調(diào)查記錄中的全部主要信息和數(shù)據(jù),而且使某一特定站位、層次、變量的數(shù)據(jù)在不同航次的NetCDF文件中位于相同的陣元位置,可以通過MATLAB方便的進行數(shù)據(jù)的創(chuàng)建和讀寫操作,便于對數(shù)據(jù)的進一步整理、分析和可視化處理。與Excel格式的數(shù)據(jù)報表相比,NetCDF文件具有讀寫效率高、可操作性強、平臺支持廣泛的優(yōu)點;缺點是直觀性不高,且操作需要一定的編程基礎(chǔ),因此更適合于數(shù)據(jù)的批量讀取。
參考文獻:
[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數(shù)據(jù)的編程式訪問[J].氣象科技,2004,32(增刊):40-43.
[3]劉文軍,李 靖,袁昌洪,等.基于NetCDF數(shù)據(jù)模型的氣象資料存儲設(shè)計[J].安徽農(nóng)業(yè)科學,2009,37(3):1 370-1 371.
[4]賈俊濤,孟嬋媛,宋海英,等.基于NetCDF的海底地形網(wǎng)格數(shù)據(jù)模型創(chuàng)建與調(diào)度[J].海洋測繪,2007,27(5):22-25.
中圖分類號:P731
文獻標識碼:A
文章編號:1008-830X(2016)01-0086-04
收稿日期:2015-10-19 基金項目:海洋赤潮災(zāi)害立體監(jiān)測技術(shù)與應(yīng)用國家海洋局重點實驗室(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