NetCDF

網路通用數據格式（Network Common Data Form，netCDF）是一種自描述、與機器無關、基於陣列的科學數據格式，同時也是支持創建、訪問和共享這一數據格式的函式庫。該項目主頁位於美國大氣科學研究大學聯盟（UCAR）的Unidata規劃網站。它也是netCDF軟體、標準開發、更新等的主要來源。netCDF格式是一種開放標準。

netCDF項目開始於1989年，UCAR目前對其積極支持，在新發行版中改進性能、增加功能並修正缺陷，當前版本系列是netCDF-4。netCDF的經典格式（CDF-1）和64位偏移量格式（CDF-2），是開放地理空間協會採用的國際標準。

## 歷史

1985年美國國家航空航天局（NASA）的國家空間科學數據中心（NSSDC），設計並開發了通用數據格式（CDF），CDF最初是用FORTRAN寫成，並只能在VAX/VMS環境下獲得。Unidata在1987年8月成立了關於CDF的工作組，提議探索與NASA協作，擴展CDF的FORTRAN接口，定義C接口，並允許用一個單一調用訪問數據聚集，同時要維持與現存NASA接口兼容的可能性。在1988年早些時候，Unidata的Glenn Davis用C開發了原型netCDF包，它位於網路表示層XDR格式的上層，而結果的程序可以在UNIX和VMS系統二者上實現。NASA的CDF和Unidata的netCDF從此獨立發展，但新近的CDF版本與netCDF共享了很多特徵。

1991年Unidata發布了netCDF版本2.0，1997年發布了版本3.3。2003年7月美國能源部的阿貢國家實驗室和西北大學，貢獻了叫做並行netCDF（或稱PnetCDF）的一個netCDF並行計算擴展。2004年在NASA的資助下，Unidata與美國國家超級計算應用中心（NCSA），開始合作增進netCDF和HDF5的互操作性。2008年Unidata發布了版本4.0，允許使用HDF5數據文件格式。同時發布了版本3.6.3，它與版本4.0是同樣的代碼但關掉了netcdf-4特徵，目前netCDF-3庫仍然在世界各地被廣泛使用。2010年Unidata發布了版本4.1.1，增加了對C和Fortran客戶端通過OPeNDAP訪問遠程數據的特定子集的支持，並使用PnetCDF擴展庫，支持在netCDF經典格式（CDF-1、CDF-2和CDF-5）上的並行I/O。

## 格式描述

netCDF庫支持多種不同的二進位格式的netCDF文件：

- CDF-1，在最初netCDF發行中使用的經典格式，它仍是文件建立的預設格式。
- CDF-2，在版本3.6.0中介入的64-bit偏移量格式，它支持更大的變量和文件大小。
- netCDF-4/HDF5，在版本4.0中介入的格式，它是帶有一些限制的HDF5數據格式。
- HDF4 SD，在版本4.1中開始支持對這個格式的只讀訪問。
- CDF-5，由PnetCDF擴展庫在CDF-2基礎之上規定的格式，集成入了netCDF庫版本4.4.0中。

所有格式都是「自描述的」。這意味其中有一個頭部，它描述文件餘下部分的格局，特別是陣列數據，連同以名稱/值特性形式的任意文件元數據。這個格式是跨平台的，涉及的問題如字節序在軟體庫中解決。數據以允許有效率的子集化的方式來存儲。

起始於版本4.0，netCDF API允許使用HDF5數據格式。netCDF使用者可以建立HDF5文件從而獲得netCDF格式不具備的利益，比如更大的文件和多重無限制的維度。

完全後向兼容，可訪問舊有netCDF文件並支持以前版本的C和Fortran API。

## 軟體

netCDF常用於氣候學、氣象學和海洋學應用，如天氣預報、氣候變化；也用於地理資訊系統應用，是很多GIS應用的輸入/輸出格式；並用於通用科學數據交換。從它的站點引述如下：netCDF（網路公用數據格式）是用於面向陣列數據訪問的一組接口，和針對C、Fortran、C++、Java和其他語言的一套自由發行的數據訪問庫。netCDF庫支持用來表示科學數據的一種機器無關格式。接口、庫和格式一起支持建立、訪問和共享科學數據。

### 訪問庫

UCAR發布的軟體庫提供了對netCDF文件的讀寫訪問，編碼和解碼所需的陣列和元數據。核心庫是用C編寫的，並為C或C++應用提供API，為Fortran應用提供了兩個API，一個給Fortran 77，一個給Fortran 90。Unidata還開發維護一個獨立實現，使用100% Java寫成，它擴展了核心數據模型並增加了額外的功能。其他程式語言基於netCDF的C庫也能獲得至其API的接口，這包括R、Perl數據語言、Python、Ruby、Haskell、Mathematica、MATLAB、IDL和Octave。API調用規定在不同語言間非常類似，當然會有著不可避免的不同語法。不同版本的API調用是後向兼容的。應用編程者使用支持這個庫的語言，在正常情況下不需要關心文件結構自身，即使它作為開放格式是可以獲知的。

- Python語言通過模塊訪問netCDF文件，可以用Unidata官方發行的`netCDF4-python`，此外，讀寫netCDF-4格式可用h5netcdf；讀寫其他netCDF格式可用SciPy。`xarray`模塊可將netCDF導入導出於pandas的`DataFrame`對象；cfgrib是ECMWF發行的使用ecCodes並遵從氣候和預報元數據約定約定，將GRIB映射到NetCDF通用數據模型的接口。NCAR的PyNIO模塊支持多種netCDF格式，它的開發已經停止而進入維護狀態。
- R語言通過包來支持netCDF，包括還支持HDF5的ncdf4，和不支持HDF5的RNetCDF。

### 應用

現在已經出產了範圍廣泛的使用netCDF文件的應用程式。它們的範圍從命令行實用程序到圖形可視化包。下面列出其中一小部分，而更長的列表可見於UCAR網站列表：

- netCDF算子（NCO），這個套件是針對netCDF文件的常用Unix命令行實用工具集，它提供一套命令來操縱和分析netCDF文件，包括基本記錄串接、陣列分片和平均。
- ncview，它是netCDF格式文件的可視瀏覽器。這個程序是可視化在netCDF文件中的場的簡單、快速、基於GUI的工具。
- NCAR命令語言（NCL），它可用來分析和可視化netCDF中的數據（還支持其他格式）。
- 網格分析和顯示系統（GrADS），它是交互式桌面工具，用來容易的訪問、操縱和可視化地球科學數據。
- 地理數據抽象庫（GDAL），它提供對netCDF數據的讀寫訪問支持。
- Panoply，它是netCDF文件查看器，它關注地理網格數據的表示。它是用Java寫成因而跨平台。
- ECMWF的Metview，這個工作站和批處理系統可以處理netCDF和GRIB及BUFR。
- Ferret，它是交互式電腦可視化和分析環境，設計用來滿足海洋學者和氣象學者分析巨大而且複雜的網格數據。
- HDFql，它使使用者能在C、C++、Java、Python、C#、Fortran和R語言中通過高層語言（類似SQL）來管理netCDF-4/HDF5文件。

## 元數據約定

氣候和預報（CF）約定是對地球科學數據的元數據約定，意圖用於促進處理和共享通過netCDF應用編程接口（API）建立的文件。CF約定於2003年建立，普遍化並擴展了早期的協作海洋/大氣研究數據服務（COARDS）約定和對氣候數據的Gregory/Drach/Tett（GDT）約定。CF約定定義了與數據包含在同一個文件中的元數據，從而使得文件「自我描述」，提供對在每個變量中的數據表示的是什麼的確切描述，和數據的空間的和時間的屬性的確切描述，包括關於網格的資訊，比如網格單元邊界和單元平均方法。這使得能夠使用來自不同來源的數據，確定哪些數據是可比較的，並允許建造有著強力的提取、重新插值和顯示能力的應用。Unidata 在2007年至2011年開發了LibCF庫。

## 並行netCDF

並行netCDF擴展包建造在MPI-IO之上，它是對MPI的I/O擴展。使用高層netCDF數據結構，並行netCDF庫可以進行優化而在多處理器間高效分配文件讀和寫應用。並行netCDF包只可以讀/寫經典和64-bit偏移量格式。並行netCDF不能讀或寫在netCDF-4.0中可獲得的基於HDF5的格式。並行netCDF包使用不同但類似的Fortran和C的API。

在Unidata netCDF庫中自從版本4.0已經支持對HDF5數據文件的並行I/O。Unidata netCDF C庫自從版本4.1.1使用並行netCDF庫支持對經典和64-bit偏移量文件的並行 I/O，但使用netCDF API。

## 與其他格式庫的互操作性

netCDF C庫，和基於它的庫：Fortran 77和Fortran 90、C++和所有第三方庫，自從版本4.1.1開始可以讀一些其他數據格式的數據。HDF5格式的數據可以讀取，但有一些限制。使用HDF4科學數據（SD）API建立的HDF4格式的數據，可以用netCDF C庫讀取。

## netCDF-Java通用數據模型

netCDF-Java庫目前已經能夠讀取很多文件格式和遠程訪問協議，並且正在開發對一些其他的格式的支持。因為這些都是通過netCDF API透明的進行訪問，netCDF-Java庫被稱為實現了科學數據集的「通用數據模型」。

## 參見

- 通用數據格式 (CDF)
- CGNS (CFD General Notation System)
- EAS3 (Ein-Ausgabe-System)
- FITS (Flexible Image Transport System)
- GRIB (GRIdded Binary)
- 層級數據格式（HDF）
- OPeNDAP 客戶-伺服器協議
- Tecplot 二進位文件
- XMDF (eXtensible Model Data Format)

## 外部連結

- CF Metadata Home Page
- PnetCDF: A Parallel I/O Library for NetCDF File Access
- netCDF-Java project at UCAR

## 基本資料

- 日語原文：Network Common Data Form
- 擴展名：on
- 擴展名：.nc
- _nomimecode：on
- mime：application/netcdf、application/x-netcdf
- 所有者：美國大氣科學研究大學聯盟（UCAR）
- magic：CDF\001、CDF\002、\211HDF\r\n\032\n、CDF\005
- 類型：科學二進位數據
- 擴展自：通用數據格式（CDF）、外部數據表示法（XDR）、層級數據格式（HDF）