NCDatasets.jl
Allows one to read and create netCDF files, with data sets and attribute lists behaving like Julia dictionaries and variables like Julia arrays, and it implements the CommonDataModel.jl interface.
https://github.com/JuliaGeo/NCDatasets.jl
Category: Climate Change
Sub Category: Climate Data Standards
Keywords
climate-and-forecast-conventions climatology earth-observation julia meteorology netcdf oceanography opendap
Keywords from Contributors
geo data-assimilation climate climate-change ocean ocean-modelling climate-science sciml ode differential-equations
Last synced: about 9 hours ago
JSON representation
Repository metadata
Load and create NetCDF files in Julia
- Host: GitHub
- URL: https://github.com/JuliaGeo/NCDatasets.jl
- Owner: JuliaGeo
- License: mit
- Created: 2017-06-25T20:42:08.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2025-12-10T07:43:09.000Z (15 days ago)
- Last Synced: 2025-12-23T12:49:33.447Z (2 days ago)
- Topics: climate-and-forecast-conventions, climatology, earth-observation, julia, meteorology, netcdf, oceanography, opendap
- Language: Julia
- Homepage: https://juliageo.org/NCDatasets.jl/
- Size: 4.76 MB
- Stars: 174
- Watchers: 8
- Forks: 34
- Open Issues: 23
- Releases: 73
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Citation: CITATION.cff
README.md
NCDatasets
NCDatasets allows one to read and create netCDF files.
NetCDF data set and attribute list behave like Julia dictionaries and variables like Julia arrays. This package implements the CommonDataModel.jl interface, which mean that the datasets can be accessed in the same way as GRIB files (GRIBDatasets.jl) and Zarr files (ZarrDatasets.jl).
The module NCDatasets provides support for the following netCDF CF conventions:
_FillValuewill be returned asmissing(more information)scale_factorandadd_offsetare applied if present- time variables (recognized by the
unitsattribute) are returned asDateTimeobjects. - support of the CF calendars (standard, gregorian, proleptic gregorian, julian, all leap, no leap, 360 day) using CFTime
- the raw data can also be accessed (without the transformations above).
- contiguous ragged array representation
Other features include:
- Support for NetCDF 4 compression and variable-length arrays (i.e. arrays of vectors where each vector can have potentailly a different length)
- The module also includes an utility function
ncgenwhich generates the Julia code that would produce a netCDF file with the same metadata as a template netCDF file.
Installation
Inside the Julia shell, you can download and install the package by issuing:
using Pkg
Pkg.add("NCDatasets")
Manual
This Manual is a quick introduction in using NCDatasets.jl. For more details you can read the stable or dev documentation.
- Create a netCDF file
- Explore the content of a netCDF file
- Load a netCDF file
- Edit an existing netCDF file
Create a netCDF file
The following gives an example of how to create a netCDF file by defining dimensions, variables and attributes.
using NCDatasets
using DataStructures: OrderedDict
# This creates a new NetCDF file called file.nc.
# The mode "c" stands for creating a new file (clobber)
ds = NCDataset("file.nc","c")
# Define the dimension "lon" and "lat" with the size 100 and 110 resp.
defDim(ds,"lon",100)
defDim(ds,"lat",110)
# Define a global attribute
ds.attrib["title"] = "this is a test file"
# Define the variables temperature with the attribute units
v = defVar(ds,"temperature",Float32,("lon","lat"), attrib = OrderedDict(
"units" => "degree Celsius",
"scale_factor" => 10,
))
# add additional attributes
v.attrib["comments"] = "this is a string attribute with Unicode Ω ∈ ∑ ∫ f(x) dx"
# Generate some example data
data = [Float32(i+j) for i = 1:100, j = 1:110];
# write a single column
v[:,1] = data[:,1];
# write a the complete data set
v[:,:] = data;
close(ds)
It is also possible to create the dimensions, the define the variable and set its value with a single call to defVar:
using NCDatasets
ds = NCDataset("/tmp/test2.nc","c")
data = [Float32(i+j) for i = 1:100, j = 1:110]
v = defVar(ds,"temperature",data,("lon","lat"))
close(ds)
Explore the content of a netCDF file
Before reading the data from a netCDF file, it is often useful to explore the list of variables and attributes defined in it.
For interactive use, the following commands (without ending semicolon) display the content of the file similarly to ncdump -h file.nc:
using NCDatasets
ds = NCDataset("file.nc")
This creates the central structure of NCDatasets.jl, NCDataset, which represents the contents of the netCDF file (without immediatelly loading everything in memory). NCDataset is an alias for Dataset.
The following displays the information just for the variable varname:
ds["varname"]
while to get the global attributes you can do:
ds.attrib
NCDataset("file.nc") produces a listing like:
Dataset: file.nc
Group: /
Dimensions
lon = 100
lat = 110
Variables
temperature (100 × 110)
Datatype: Float32 (Float32)
Dimensions: lon × lat
Attributes:
units = degree Celsius
scale_factor = 10
comments = this is a string attribute with Unicode Ω ∈ ∑ ∫ f(x) dx
Global attributes
title = this is a test file
Load a netCDF file
Loading a variable with known structure can be achieved by accessing the variables and attributes directly by their name.
# The mode "r" stands for read-only. The mode "r" is the default mode and the parameter can be omitted.
ds = NCDataset("file.nc","r")
v = ds["temperature"]
# load a subset
subdata = v[10:30,30:5:end]
# load all data
data = v[:,:]
# load all data ignoring attributes like scale_factor, add_offset, _FillValue and time units
data2 = v.var[:,:];
# load an attribute
unit = v.attrib["units"]
close(ds)
In the example above, the subset can also be loaded with:
subdata = NCDataset("file.nc")["temperature"][10:30,30:5:end]
This might be useful in an interactive session. However, the file test.nc is not directly closed (closing the file will be triggered by Julia's garbage collector), which can be a problem if you open many files. On Linux the number of opened files is often limited to 1024 (soft limit). If you write to a file, you should also always close the file to make sure that the data is properly written to the disk.
An alternative way to ensure the file has been closed is to use a do block: the file will be closed automatically when leaving the block.
data = NCDataset(filename,"r") do ds
ds["temperature"][:,:]
end # ds is closed
Edit an existing netCDF file
When you need to modify variables or attributes in a netCDF file, you have
to open it with the "a" option. Here, for example, we add a global attribute creator to the
file created in the previous step.
ds = NCDataset("file.nc","a")
ds.attrib["creator"] = "your name"
close(ds);
Benchmark
The benchmark loads a variable of the size 1000x500x100 in slices of 1000x500
(applying the scaling of the CF conventions)
and computes the maximum of each slice and the average of each maximum over all slices.
This operation is repeated 100 times.
The code is available at https://github.com/Alexander-Barth/NCDatasets.jl/tree/master/test/perf .
| Module | median | minimum | mean | std. dev. |
|---|---|---|---|---|
| R-ncdf4 | 0.407 | 0.384 | 0.407 | 0.010 |
| python-netCDF4 | 0.475 | 0.463 | 0.476 | 0.010 |
| julia-NCDatasets | 0.265 | 0.249 | 0.267 | 0.011 |
All runtimes are in seconds. We use Julia 1.10.0 (with NCDatasets 0.14.0), R 4.1.2 (with ncdf4 1.22) and Python 3.10.12 (with netCDF4 1.6.5)
on a i5-1135G7 CPU and NVMe SSD (WDC WDS100T2B0C).
Filing an issue
When you file an issue, please include sufficient information that would allow somebody else to reproduce the issue, in particular:
- Provide the code that generates the issue.
- If necessary to run your code, provide the used netCDF file(s).
- Make your code and netCDF file(s) as simple as possible (while still showing the error and being runnable). A big thank you for the 5-star-premium-gold users who do not forget this point! 👍🏅🏆
- The full error message that you are seeing (in particular file names and line numbers of the stack-trace).
- Which version of Julia and
NCDatasetsare you using? Please include the output of:
versioninfo()
using Pkg
Pkg.installed()["NCDatasets"]
- Does
NCDatasetspass its test suite? Please include the output of:
using Pkg
Pkg.test("NCDatasets")
Alternative
The package NetCDF.jl from Fabian Gans and contributors is an alternative to this package which supports a more Matlab/Octave-like interface for reading and writing NetCDF files.
Credits
netcdf_c.jl and the error handling code of the NetCDF C API are from NetCDF.jl by Fabian Gans (Max-Planck-Institut für Biogeochemie, Jena, Germany) released under the MIT license.
Citation (CITATION.cff)
cff-version: "1.2.0"
authors:
- family-names: Barth
given-names: Alexander
orcid: "https://orcid.org/0000-0003-2952-5997"
doi: 10.5281/zenodo.11067062
message: If you use this software, please cite the article in the
Journal of Open Source Software.
preferred-citation:
authors:
- family-names: Barth
given-names: Alexander
orcid: "https://orcid.org/0000-0003-2952-5997"
date-published: 2024-05-29
doi: 10.21105/joss.06504
issn: 2475-9066
issue: 97
journal: Journal of Open Source Software
publisher:
name: Open Journals
start: 6504
title: "NCDatasets.jl: a Julia package for manipulating netCDF data
sets"
type: article
url: "https://joss.theoj.org/papers/10.21105/joss.06504"
volume: 9
title: "NCDatasets.jl: a Julia package for manipulating netCDF data
sets"
Owner metadata
- Name: JuliaGeo
- Login: JuliaGeo
- Email:
- Kind: organization
- Description: Geospatial packages for Julia
- Website: https://juliageo.org/
- Location:
- Twitter:
- Company:
- Icon url: https://avatars.githubusercontent.com/u/10616454?v=4
- Repositories: 32
- Last ynced at: 2024-03-26T04:56:54.935Z
- Profile URL: https://github.com/JuliaGeo
GitHub Events
Total
- Create event: 9
- Commit comment event: 8
- Release event: 2
- Issues event: 9
- Watch event: 16
- Delete event: 1
- Issue comment event: 62
- Push event: 29
- Pull request review event: 1
- Pull request review comment event: 1
- Pull request event: 11
- Fork event: 3
Last Year
- Create event: 9
- Commit comment event: 8
- Release event: 2
- Issues event: 9
- Watch event: 16
- Delete event: 1
- Issue comment event: 62
- Push event: 29
- Pull request review event: 1
- Pull request review comment event: 1
- Pull request event: 11
- Fork event: 3
Committers metadata
Last synced: 6 days ago
Total Commits: 1,183
Total Committers: 27
Avg Commits per committer: 43.815
Development Distribution Score (DDS): 0.145
Commits in past year: 44
Committers in past year: 9
Avg Commits per committer in past year: 4.889
Development Distribution Score (DDS) in past year: 0.25
| Name | Commits | |
|---|---|---|
| Alexander Barth | b****r@g****m | 1012 |
| Datseris | d****e@g****m | 44 |
| Tristan Carion | t****n@g****m | 32 |
| Martijn Visser | m****r@g****m | 22 |
| ctroupin | c****n@g****m | 11 |
| Rafael Schouten | r****n@g****m | 6 |
| adigitoleo | a****o@d****m | 6 |
| Gael Forget | g****t@m****u | 5 |
| github-actions[bot] | 4****] | 5 |
| Argel Ramírez Reyes | a****z@g****m | 5 |
| Gregory L. Wagner | w****g@g****m | 4 |
| Philippe Roy | b****r@y****a | 4 |
| Kene Uba | j****a@p****h | 4 |
| Peter Shin | p****h@g****m | 3 |
| lupemba | s****k@l****k | 3 |
| Fabian Gans | f****s@b****e | 3 |
| Alexander Barth | e****l@e****m | 3 |
| Gabriele Bozzola | s****r@g****m | 2 |
| tcarion | t****n@g****m | 1 |
| Alex Gardner | 3****r | 1 |
| Benoit Pasquier | 4****c | 1 |
| Charles Kawczynski | k****s@g****m | 1 |
| Felix Cremer | f****r@b****e | 1 |
| Julia TagBot | 5****t | 1 |
| Kosuke Sando | k****o@g****m | 1 |
| Navid C. Constantinou | n****y | 1 |
| Steven G. Johnson | s****j@m****u | 1 |
Committer domains:
- bgc-jena.mpg.de: 2
- mit.edu: 2
- live.dk: 1
- protonmail.ch: 1
- yahoo.ca: 1
- dissimulo.com: 1
Issue and Pull Request metadata
Last synced: 14 days ago
Total issues: 141
Total pull requests: 57
Average time to close issues: 4 months
Average time to close pull requests: 21 days
Total issue authors: 54
Total pull request authors: 24
Average comments per issue: 5.31
Average comments per pull request: 4.61
Merged pull request: 39
Bot issues: 0
Bot pull requests: 9
Past year issues: 13
Past year pull requests: 13
Past year average time to close issues: about 1 month
Past year average time to close pull requests: 14 days
Past year issue authors: 10
Past year pull request authors: 7
Past year average comments per issue: 3.23
Past year average comments per pull request: 0.54
Past year merged pull request: 7
Past year bot issues: 0
Past year bot pull requests: 3
Top Issue Authors
- Datseris (18)
- rafaqz (9)
- Balinus (9)
- ryofurue (8)
- Alexander-Barth (7)
- natgeo-wong (7)
- haakon-e (6)
- ctroupin (4)
- tiemvanderdeure (4)
- aramirezreyes (3)
- gvali (3)
- brynpickering (3)
- kongdd (3)
- ali-ramadhan (2)
- BobPortmann (2)
Top Pull Request Authors
- github-actions[bot] (9)
- Datseris (9)
- visr (6)
- Balinus (3)
- Alexander-Barth (3)
- gaelforget (3)
- felixcremer (2)
- glwagner (2)
- keduba (2)
- Sbozzolo (2)
- rafaqz (2)
- lupemba (2)
- JuliaTagBot (1)
- charleskawczynski (1)
- ctroupin (1)
Top Issue Labels
- feature request (5)
- help wanted (3)
- upstream bug (2)
- announcement (1)
- enhancement (1)
- bug (1)
- question (1)
- upstream feature request (1)
Top Pull Request Labels
Package metadata
- Total packages: 1
-
Total downloads:
- julia: 1,367 total
- Total dependent packages: 69
- Total dependent repositories: 9
- Total versions: 62
juliahub.com: NCDatasets
Load and create NetCDF files in Julia
- Homepage: https://juliageo.org/NCDatasets.jl/
- Documentation: https://docs.juliahub.com/General/NCDatasets/stable/
- Licenses: MIT
- Latest release: 0.14.10 (published about 2 months ago)
- Last Synced: 2025-12-22T03:11:12.705Z (3 days ago)
- Versions: 62
- Dependent Packages: 69
- Dependent Repositories: 9
- Downloads: 1,367 Total
-
Rankings:
- Dependent packages count: 1.312%
- Dependent repos count: 3.376%
- Average: 4.105%
- Stargazers count: 5.71%
- Forks count: 6.021%
Dependencies
- julia-actions/setup-julia latest composite
- JuliaRegistries/TagBot v1 composite
- actions/cache v1 composite
- actions/checkout v2 composite
- julia-actions/julia-buildpkg latest composite
- julia-actions/setup-julia v1 composite
- actions/cache v1 composite
- actions/checkout v2 composite
- codecov/codecov-action v1 composite
- julia-actions/julia-buildpkg latest composite
- julia-actions/julia-processcoverage v1 composite
- julia-actions/julia-runtest latest composite
- julia-actions/setup-julia v1 composite
Score: 15.85490519528885