NCO

nco_logo

Qu’est ce que NCO ?

La boîte à outils NCO pour Netcdf Operators permet la manipulation des fichiers NetCDF en ligne de commandes. Cette boîte à outils se présentent sous la forme d'une douzaine de commandes pouvant être lancées dans un terminal qui prend en entrée des fichiers Netcdf, HDF et ou lien DAP (protocole d'attaque de fichiers netcdf par le réseau).

Ce projet est bien évidemment opensource. Tous les infos sont disponibles ici.

Installation

NCO est disponible pour la plupart des distributions Linux mais peut aussi être installé sous Windows et MacOS via conda. Vous trouverez ci-dessous les méthodes d'installation les plus courantes en fonction de votre OS et/ou distribution.

sudo apt install nco # Debian-based Linux systems Debian, Mint, Ubuntu
sudo dnf-install nco # Newer RPM-based Linux systems CentOS, Fedora RHEL
sudo yum-install nco # Older RPM-based Linux systems CentOS, Fedora, RHEL
sudo port install nco # MacOS MacPorts
brew install nco # Linux or MacOS with Homebrew
conda install -c conda-forge nco # Linux, MacOS, or Windows with Anaconda

Plus d’infos ici, notamment si vous souhaitez compiler une certaine version !!!

Commande générique

Les opérateurs NCO s'utilisent comme des commandes shell. Ainsi, la syntaxe générale d'utilisation est la suivante:

ncooperator [OPTIONS] [input-file] [output-file]

où:

  • ncooperateur est l'opérateur que vous souhaitez utilisé (voir la liste dessous)
  • OPTIONS la liste des options que vous souhaitez utiliser avec l'opérateur
  • input-file le nom du fichier netcdf d'entrée sur lequel vous souhaitez appliquer l'opération
  • output-file le nom du fichier netcdf de sortie résultat de l'opération réalisée

Même si output-file est optionnel, nous vous conseillons d'en mettre un. En effet, la modification du netcdf d'entrée est possible mais risquée et peut générer des problèmes inattendues résultant de l'ouverture du fichier en mode READ et WRITE en même temps.

Description de quelques opérateurs

ncap2 : processeur arithmétique permet de réaliser des calculs.

ncap2 permet de réaliser des opérations arithmétiques sur un fichier existant pour créer une nouvelle variable. L'opérateur s'utilise comme suivant:

ncap2 [-s 'ligne']  [-S fichier_d_operation] [input-file] [output-file]

La commande prend comme OPTIONS -s pour affecter une ligne d'opération mais peut aussi à l'aide de l'OPTION -S prendre un script contenant multiples opérations arithmétiques. Les opérations s'entendent comme une ligne interprétée prenant en compte des variables du fichier netcdf et/ou scalaire liés à des opérateurs.

Plusieurs types d'opérateurs peuvent être utilisés:

  • Arithmetic Operators: * / % + - ^
  • Binary Operators: > >= < <= == != == || && >> <<
  • Unary Operators: + - ++ -- !
  • Conditional Operator: exp1 ? exp2 : exp3
  • Assign Operators: = += -= /= *=

Ainsi, si les variables A et B sont contenues dans un fichier netcdf in.nc et que vous souhaitez faire la différence des deux champs:

ncap2 -s 'C=A-B'  in.nc out.nc

ncatted : manipulation des attributs

ncatted est une commande permettant la manipulation des attributs du fichier netcdf qu'ils soient globaux ou liés à une variable. L'opérateur s'utilise comme suivant:

ncatted -a nom_attr,[var: nom_var,’’,global],[mode : a,c,d,m,o],[type_attr : f,d,l,s,c,b],value_attrb in.nc  out.nc`

où:

  • nom_attr : le nom de l'attribut à modifier, créer ou supprimer
  • var : peut prendre le nom d'une variable nom_var pour un attribut local, global pour agir sur un attribut global ou '' pour agir sur tous les types d'attribut
  • mode : a pour append, c pour create, d pour delete, m pour modify et o pour overwrite (valeur par défaut)
  • type_attr : le type_attr correspond au type de données défini dans les netcdf, f pour float, d pour double, l pour long integer, s pour short, c pour char et b pour Byte
  • value_attr : correspond à la valeur de l'attribut.

ATTENTION pas d'espace entre ces 5 options

Concernant les modes, le mode a append permet d'ajouter un nouvel attribut et le crée si il n'existe pas. Le mode c create crée l'attribut si il est inexistant mais ne le modifie pas. Le mode d delete permet de supprimer un attribut, dans ce mode value_attrb et type_attr sont laissées à blanc ('') ou ignorés car non nécessaires. Le mode m modify permet de modifier un attribut existant (pas d'effet dabs le cas contraire). Le mode overwrite modifie la valeur si elle existe, dans le cas contraire l'attribut est créé.

ncks : Extraction et sous-partie avec la commande Kitchen Sink!!

ncks ou Kitchen Sink!! permet l'extraction d'une ou plusieurs variables mais aussi d'une sous-partie spatio-temporelle sous différents format. C'est une des commandes les plus complexes dans l'écosytème nco et bénéficie à ce titre de multiples options permettant bon nombre de fonctions notamment l'extraction de calendrier dans un format intelligible à l'affichage de données comme ncdump. Nous présentons ici une utilisation restreinte pour extraire seulement des variables ou des sous élements de ces variables.

ncks [-v nom_var] [-d nom_coord1,valmin_coord1,valmax_coord1]  in.nc out.nc

  • nom_var : nom de la variable à extraire
  • nom_coord1,valmin_coord1,valmax_coord1 : correspond à une sous-extraction sur une coordonnée nom_coord1 dont les valeurs sont comprises entre valmin_coord1 et valmax_coord1
  • in.nc : le fichier d'entrée à traiter
  • out.nc : champ optionnel permettant la création d'un fichier netcdf de sortie contenant l'extraction, si il n'est pas spécifié, le résultat s'affichera sur la sortie standard.

Nous le verrons par la suite mais l'option -d peut être utilisée plusieurs fois pour chaque coordonnée et en lien avec l'option -v. Ainsi, il est possible d'extraire une échantillon spatio-temporelle d'une variable.

ncrcat : Concatenation de fichiers

ncrcat permet de réaliser la concatenation de fichiers netcdf sur l'ensemble des variables ou en sous-selectionnant via l'utilisation de dimension.

ncrcat [-d dim,[ min][,[ max]][,[ stride]]]  in1.nc in2.nc in3.nc ... out_concat.nc

  • in1.nc in2.nc in3.nc : fichiers netcdf à concaténer.
  • option -d : permet de sous-sélectionner des valeurs d'une dimension
  • dim : nom de la dimension à sous-sélectionner
  • min : valeure minimale de la dimension à sous-sélectionner
  • max : valeur maximale de la dimension à sous-sélectionner
  • stride : pas optionnel permettant de boucler sur certains éléments entre les valeurs minimale et maximale

Si la liste de fichiers est trop importante, il est possible d'utiliser les caractères spéciaux de type shell pour formater une liste de fichiers. Ainsi, l'exemple ci-dessous montre deux commandes de concaténation aboutissants au même résultat.

ncrcat 85.nc 86.nc 87.nc 88.nc 89.nc 8589.nc
ncrcat 8[56789].nc 8589.nc

Travaux Pratiques

Pour faire le TP, se déplacer dans le répertoir tp/nco-cdo .

cd tp/nco-cdo  # si vous êtes dans votre home directory
cd nco-cdo # si vous êtes dans le répertoire tp
cd ../nco-cdo # si vous êtes dans un sous-répertoire de tp

On va travailler sur deux fichiers ici :

  • tas_histo_one_year.nc contient des données de température du giec sur l’année 2005
  • tasdeg_rcp85_only.nc contient des données de température du giec sur l’année 2099

Petit rappel:

ncdump -h  tas_histo_one_year.nc  # voir le header
ncview tas_histo_one_year.nc # visualisation du fichier

ncap2 : processeur arithmétique

L'exemple ci-dessous permet changer l’unité d’une température en passant des Kelvins en Celcius.

ncap2 -s 'tasdeg[time,lat,lon]=tas-273.15' tas_histo_one_year.nc tasdeg.nc

Nous n'avons transformé ici que la variable en retranchant aux données 273,15°Kelvin.

ncatted : manipulation d'attributs

Vous trouverez ci-dessous plusieurs exemples :

  • Modifier l'unité de la variable tasdeg
ncatted -a units,tasdeg,o,c,'°C'  tasdeg.nc
  • Affecter à la variable tasdeg les valeurs manquantes à -999
ncatted -a missing_value,tasdeg,o,d,999. tasdeg.nc
  • Supprimer tous les attributs nommés associated_files
ncatted -a associated_files,,d,, tasdeg.nc tasdeg_ssunit.nc
  • Supprimer tous les attributs globaux
ncatted -a ,global,d,, tasdeg.nc
  • Ajouter un attribut global nommé institution
ncatted -a institution,global,a,c,'Webinaire-SIST24' tasdeg.nc

ncks : Extraction et sous-partie avec la commande Kitchen Sink!!

  • Extraction de la variable tasdeg
ncks -v tasdeg tasdeg.nc tasdeg_only.nc # 
  • Opération binaire avec ncbo Ex : différence de toutes les données entre 2 dates
ncbo --op_typ="-" tasdeg_rcp85_only.nc tasdeg_only.nc diff.nc
  • Extraire une zone géographique lon de 0° – 360°E Lat de -20°N-20°N de la variable tasdeg
ncks -d lon,0.,360. -d lat,-20.,20. -d time,'2099-08-10 0:00:0.0','2099-08-20 00:00:0.0' -v tasdeg diff.nc extract.nc

ncrcat : Concatenation de fichier

  • Concatenation des fichiers tasdeg_only.nc et tasdeg_rcp85_only.nc
ncrcat tasdeg_only.nc tasdeg_rcp85_only.nc tasdeg_concat.nc

Lien utiles

Documentation NCO : https://nco.sourceforge.net/