Introduction à NetCDF École normale supérieure L3 géosciences 2014/2015 Lionel GUEZ guez@lmd.ens.fr Laboratoire de météorologie dynamique
Explications préliminaires Deux distinctions générales sur les entrées et sorties (indépendamment du langage) : accès séquentiel accès direct format texte (formatted) format binaire (unformatted) 2/27
Accès séquentiel Notion de «position courante» dans le fichier. On ne peut lire ou écrire qu'à la position courante. Pour aller d'une position à une autre, plus loin, obligation de lire tout le fichier entre les deux positions. 3/27
Accès direct Possibilité de se placer directement à un enregistrement quelconque du fichier, pour le lire ou l'écrire Possibilité de récrire n'importe quel enregistrement (sans perdre le reste du fichier) 4/27
Format texte versus format binaire Format binaire : représentation interne à l'ordinateur d'une valeur. Format texte : suite de caractères. Par exemple : 2 14 = 16384 = (100000000000000) 2 Écriture de la valeur comme texte : 5 codes de caractères, pour «1», «6», «3», «8», «4» (typiquement 5 fois huit bits) Écriture de la valeur binaire : typiquement une suite de 32 bits 5/27
Avantages du format binaire Rapidité d'exécution du programme (économie du temps de conversion à partir des caractères ou vers des caractères) Taille réduite de fichier Exemple : 8.328622e-17 4 octets en binaire, 12 octets en texte 6/27
Avantages du format binaire (suite) Exactitude (pas forcément de représentation exacte binaire d'un décimal ; pas forcément de représentation décimale exacte d'un développement binaire fini ; pas les mêmes troncatures) Exemple : 1 / 10 = 0,1 = (0,000110011001 ) 2 = 1/16 + 1/32 + 0/64 + 0/128 + 1/256 + 1/512 + 0/1024 + 7/27
Inconvénients potentiels du format binaire Si on utilise le format binaire directement dans un langage (Fortran, C, Python ) : Pas de lisibilité immédiate du fichier Pas de portabilité (le codage dépend du compilateur ou de l'interpréteur et de la machine) Problème du stockage des tableaux multidimensionnels : convention à choisir
Qu'est-ce que NetCDF? Un format de fichier (convention : suffixe.nc ) : binaire, portable destiné principalement à stocker des tableaux de nombres multi-dimensionnels (et donc à l'informatique scientifique) immédiatement lisible 9/27
Qu'est-ce que NetCDF? (suite) Des bibliothèques de procédures dans différents langages pour créer, lire, modifier des fichiers dans ce format. Les procédures NetCDF font de l'accès direct. 10/27
Quelques perspectives NetCDF est développé par Unidata (organisme public américain, National Science Foundation). Depuis 1988 Les bibliothèques NetCDF sont libres et gratuites. 11/27
Quelques perspectives (suite) Énormément utilisé en météorologie et en océanographie. Moins hégémonique mais utilisé aussi en géologie. Des dizaines de logiciels tiers gratuits pour manipuler (découper, assembler, faire des moyennes ) et visualiser les fichiers NetCDF. 12/27
Contenu d'un fichier NetCDF Méta-données : expliquent ce que sont les données. Le fichier est donc auto-descriptif. Données scalaires ou tableaux 13/27
Voir le contenu d'un fichier Utilitaire ncdump (toujours inclus dans l'installation de NetCDF) ncdump file affiche tout le contenu du fichier (la commande convertit le binaire en texte pour l'afficher). En général, pas très lisible parce que : trop long les tableaux multi-dimensionnels sont écrits comme des tableaux à une dimension 14/27
L'en-tête d'un fichier ncdump -h file affiche seulement l'en-tête ( -h pour header ) du fichier, c'est-à-dire les métadonnées. 15/27
Les trois parties de l'en-tête Dimensions : elles ont un nom et une valeur entière Variables : type, nom, dimensions entre parenthèses Les dimensions sont celles nommées plus haut 0 (scalaire), 1 ou plusieurs dimensions Pour chaque variable, des attributs. Quelques attributs importants : units, long_name, missing_value 16/27
Les trois parties de l'en-tête (suite) Attributs globaux : méta-données pour l'ensemble du fichier, et non pour une variable 17/27
Coordonnées Coordonnée NetCDF : variable NetCDF à une dimension, dont le nom est identique au nom de la dimension En général : une coordonnée par dimension Association de valeurs d'une coordonnée aux indices dans une dimension d'un tableau 18/27
Coordonnées (suite) Les coordonnées sont reconnues et traitées spécialement par de nombreux utilitaires et programmes qui lisent les fichiers NetCDF Convention : une coordonnée doit être strictement monotone 19/27
Valeurs des coordonnées ncdump -c file Fait apparaître l'en-tête déjà affiché par ncdump -h, plus une nouvelle partie data. 20/27
Variables primaires Ce sont les variables du fichier NetCDF autres que les coordonnées. Pour voir les valeurs d'une variable primaire : ncdump -v var1, file Utile pour une variable scalaire ou à une dimension, mais peu lisible pour une variable multi-dimensionnelle 21/27
Valeurs d'une variable multidimensionnelle Plus puissant que ncdump : ncks ( ks pour kitchen sink ) ncks est un des opérateurs NCO http://nco.sourceforge.net NCO : NetCDF operators, à installer en plus de NetCDF ncks permet de n'afficher qu'une partie d'une variable : la valeur en un point particulier, ou une hyper-tranche quelconque de la variable 22/27
Valeurs d'une variable multidimensionnelle (suite) ncks -v var[,...] \ -d dim,[min][,[max]] input-file Valeurs min et max dans l'argument -d : sans point décimal : indice avec point décimal : valeur de coordonnée 23/27
Valeurs d'une variable multidimensionnelle (suite) Exemple : ncks -v ta -d time,0 \ -d latitude,0. cira.nc Variable température à la date d'indice 0 (valeur de la coordonnée : 15, premier indice) et la latitude 0 (indice 16), à tous les niveaux de pression 24/27
Logiciels graphiques Très nombreux logiciels permettant de faire des graphiques à 1, 2 ou 3 dimensions, à partir de variables lues dans un fichier NetCDF 25/27
Logiciels graphiques (suite) Une toute petite sélection, du plus simple aux plus complets : ncview Grads (orienté analyse de données atmosphériques), Ferret (orienté analyse de données océaniques et atmosphériques), GMT (orienté géophysique) Python avec matplotlib, Matlab, IDL 26/27
Création ou modification d'un fichier NetCDF Interfaces dans de nombreux langages : développées par Unidata : interfaces en C, Fortran, C++, Java développées par des tiers : interfaces en Python, R, Ruby, Matlab 27/27