La instalación adecuada de Python + NetCDF es algo muy extendido y documentado en sistemas Linux, pero no tanto en sistemas Windows. En esta entrada el objetivo es recoger los pasos necesarios para conseguirlo, a modo de referencia rápida con las instrucciones y enlaces oportunos.

NetCDF [1] es un formato binario de fichero (.nc) orientado a arrays, que facilita el manejo de varias dimensiones (x, y, z, tiempo…) de forma eficiente y flexible. Por esta razón está muy extendido en la comunidad científica, por ejemplo para guardar datos del medio como temperaturas, corrientes, viento, salinidad, etc. obtenidos mediante sensores o modelado. De forma indisoluble con el formato, existe un conjunto de librerías para NetCDF que facilitan el acceso a sus datos desde varios lenguajes (C, Fortran, Java, etc.) y que son la pasarela con la que trabaja el programador. Python es por su parte el lenguaje de scripting más potente y posee multitud de librerías para ampliar su campo de acción (para el manejo de datos SIG, cálculo intensivo, gráficos, etc.), por lo que juntos forman una buena combinación en el ámbito científico.
Los pasos para configurarlos de forma integrada en una plataforma Windows de 32 bits son:
- (A) Python 2.7. Si aún no lo tenemos, la última versión disponible para la rama 2.x (la más extendida) es actualmente la 2.7.5, descargable aquí
- (B) NetCDF4. Las librerías base están escritas en C y para usarlas es necesario descargarlas y compilarlas o, algo más práctico, obtener directamente los binarios. Siguiendo la segunda vía, aquí está el instalador con la última versión para netCDF4. Para una descripción más detallada de estos binarios, ver el enlace [2]
- (C) Acceso a las librerías NetCDF. Para un enlace posterior a las librerías, es necesario agregar al PATH los siguientes directorios, generados por el instalador: C:\Program Files\netCDF 4.3.0\bin y c:\Program Files\netCDF 4.3.0\deps\shared\bin
- (D) Numpy. El acceso a los datos de los ficheros NetCDF se realizará de forma efectiva con esta librería para Python, especializada en el manejo de arrays. La última versión disponible hoy, la 1.7.1, para Python 2.7 está disponible aquí
- (E) Interfaz de Python para netcdf4. Ésta es la librería Python que permite leer y escribir en los netcdf desde scripts .py, actuando de pasarela hacia las librerías base previamente configuradas (C). El instalador para la 2.X está en este enlace
- (F) Validación. Finalmente, para probar que todo está correcto, ejecutaremos un pequeño script de Python, leyendo un netcdf cualquiera (fichero testNC.py). P.ej. estos datos de la NASA muestran las anomalías térmicas sobre la superficie terrestre y es posible descargarlos en formato netCDF desde aquí en un fichero «nmaps.nc». Como nota útil, señalar que para visualizar de forma rápida el netcdf se puede usar un visor como Panoply [3] o un software SIG como gvSIG, que en su versión más reciente incluye soporte a este formato [4]
testNC.py
# -*- coding: utf-8 -*- import netCDF4 as nc import numpy as np ''' Prueba de acceso a netCDF en Python Win32. Abre un fichero .nc y obtiene el valor mínimo de una variable conocida ('TEMPANOMALY') ''' print 'TEST netCDF en Python' rutaFichero = "c:/users/admin/nmaps.nc" fichero = nc.Dataset(rutaFichero) print "* Variables disponibles en el fichero:" for v in fichero.variables: print v datos = fichero.variables["TEMPANOMALY"][0] print "* Mayor anomalia de temperatura negativa : {0} K".format(min(datos))
Nota: como los datos de la variable vienen en un array con «máscara» (para indicar dónde hay ‘huecos’ sin datos), es posible utilizar las clases de numpy específicas y hacer algo como:
minimo = np.ma.MaskedArray.min(fichero.variables["TEMPANOMALY"][:]) maximo = np.ma.MaskedArray.max(fichero.variables["TEMPANOMALY"][:])
Enlaces de interés:
- [1] NetCDF (Network Common Data Format) F.A.Q.: http://www.unidata.ucar.edu/software/netcdf/docs/faq.html
- [2] Installing and Using netCDF-C Libraries in a Windows Environment: http://www.unidata.ucar.edu/software/netcdf/docs/winbin.html
- [3] Visor de datos netCDF Panoply (con versión para Win32): http://www.giss.nasa.gov/tools/panoply/
- [4] Soporte para netCDF en gvSIG 2.0: http://blog.gvsig.org/2013/04/30/datos-en-netcdf-para-gvsig-v2-0/
- [5] Otros ejemplos de uso de ficheros .nc en Python: http://netcdf4-python.googlecode.com/svn/trunk/docs/netCDF4-module.html
Otra fuente interesante para el manejo de netcdf, como me señala @alechamizo, es CDO (Climate Data Operator), que es un ejecutable de línea de comandos y también posee una versión para Windows: https://code.zmaw.de/projects/cdo/files
Recibo como comentario, vía Linkedin, una interesante recomendación sobre una versión de Python específica para el ámbito científico, denominada PythonXY (https://code.google.com/p/pythonxy/). Personalmente no la he probado aún, pero tal vez os sea útil, sobre todo para un uso interactivo. Parece que vienen configuradas muchas librerías por defecto (gdal, netcdf, matplotlib, etc.), junto con Spyder y Qt. Saludos!
Si se usan los binarios netCDF4 indicados, en sus últimas versiones, parece que existe una incompatibilidad declarada con Windows XP de las librerías HDF5. Como consecuencia, cuando se realiza el en python, aparece un error como:
«ImportError: DLL load failed: No se encontró el proceso especificado.»
y no puede usarse la librería netCDF4. En Windows Server 2008 y Windows 7 parece que estas instrucciones funcionan correctamente (entornos x86)