Instalación de librerías NetCDF + Python en un sistema Windows

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.

Python + netCDF

NetCDF 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:

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 anomalía 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"][:])

Algunos otros ejemplos de uso de ficheros .nc en Python