Suite

Programmes/langages pour traiter les fichiers netcdf « rapidement »

Programmes/langages pour traiter les fichiers netcdf « rapidement »


J'utilise R pour parcourir des milliers de fichiers NetCDF (données climatiques réduites), et bien que je puisse le faire en utilisant R, le code est trop lent. Je cherche un moyen de l'accélérer et de maintenir la fonctionnalité.

Ce dont j'ai besoin, c'est d'un programme ou d'une plate-forme où je peux (1) importer des données netcdf, (2) importer une couche de polygones, (3) obtenir la moyenne de la couche de polygones et (4) exporter la sortie vers un fichier csv. Voici un workflow de code général :

shape <- readOGR(dsn,"shape") ## lire dans les fichiers shapefile <- dir("in directory", recursive=TRUE, full.names=TRUE, pattern=".nc$") ### get chemins de fichiers vers les fichiers netCDF en sortie <-NULL pour (i dans 1:length(files)){ brick.tmp <- files[i] pour (j dans 1:nlayers(brick.tmp)){ val = extract(brick. tmp[[j]],forme, fun = moyenne) out <- rbind(out,val) } }

Je préférerais rester dans l'environnement R, mais je ne sais pas comment accélérer le code.

J'ai essayé d'utiliser plusieurs programmes et j'ai parcouru la liste ici : https://www.unidata.ucar.edu/software/netcdf/docs/software.html

Cependant, je pensais tirer parti des connaissances collectives de chacun et voir si je pouvais affiner les choix potentiels.


NetCDF est incroyablement général et l'écriture de code lent est facile. Je traite régulièrement des dizaines de milliers de fichiers NetCDF dans R, en utilisant une combinaison de packages raster, ncdf, ncdf4, RNetCDF ou rgdal. La clé est de tirer parti des outils d'indexation des cellules dans le raster afin que le test "cellule dans le polygone" ne se produise qu'une seule fois, puis vous pouvez appliquer l'extraction à tous les fichiers. De nombreux outils de haut niveau le font pour vous, ce qui peut être très facile.

Un pseudo workflow ressemble à :

library(raster) library(rgdal) ## construire une base de données de fichiers sensible (plus que cela, incroyable comme c'est rarement fait) fs <- list.files("nctree", etc. etc.) poly <- readOGR("folder /of/polys", "shapefilename") polyMatrixVals <- extract(stack(fs), poly, fun = Mean)

De nombreuses hypothèses y sont chargées, mais si cela ne correspond pas tout à fait, il existe des moyens d'obtenir le même effet en utilisant les outils de composant dans le raster. Que R soit le bon outil dépend des détails de votre situation, et cela est vrai pour tout choix de logiciel.