es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtener el valor promedio de un área específica en netCDF.

Estoy intentando trazar una serie de tiempo de la temperatura de la superficie del mar (SST) para una región específica a partir de un archivo .nc. La SST es una variable tridimensional (lat, lon, tiempo), que tiene valores diarios promedio para una región específica desde 1982 hasta 2016. Quiero que mi gráfico refleje la variabilidad estacional de la temperatura de la SST durante todo el período de tiempo. Supongo que lo primero que debo hacer es obtener un valor promedio de SST para mi región de latitud y longitud para cada uno de los días con los que puedo trabajar más adelante. Hasta ahora, supongo que necesito leer el archivo .nc y las variables:

import netCDF4 as nc

f = nc.Dataset('cmems_SST_MED_SST_L4_REP_OBSERVATIONS_010_021_1639073212518.nc')
sst = f.variables['analysed_sst'][:]
lon = f.variables['longitude'][:]
lat = f.variables['latitude'][:]

A continuación, siguiendo el código sugerido aquí, intenté remodelar y obtener el promedio, pero se produce un error:

global_average= np.nanmean(sst[:,:,:],axis=(1,2))
annual_temp = np.nanmean(np.reshape(global_average, (34,12)), axis = 1) 

# 34 años entre 1982 y 2016, y 12 meses por año.

ERROR: no se puede remodelar una matriz de tamaño 14008 en forma (34,12)

A partir de aquí encontré diferentes formas, como usar cdo o nco (que no funcionaron debido a problemas de instalación) entre otros, que no eran adecuados para mi caso. He usado nanmean porque sé que en MATLAB esto se hace usando la función nanmean. Soy bastante nuevo en este tema y me gustaría pedir algunos consejos, como en qué debería enfocarme más o qué camino es más adecuado para este caso. ¡Gracias!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para obtener el valor medio de la TSM para su región específica en cada día, puede utilizar xarray. Primero, necesita abrir el archivo .nc con xarray:

    import xarray as xr
    file = xr.open_dataset('cmems_SST_MED_SST_L4_REP_OBSERVATIONS_010_021_1639073212518.nc')
    

    Luego, puede seleccionar la región de interés utilizando las variables de latitud y longitud:

    region = file.sel(latitude=lat_range, longitude=lon_range)
    

    donde lat_range y lon_range son los rangos de latitud y longitud para su región de interés.

    A continuación, puede calcular el valor medio de la TSM para cada día utilizando la función mean:

    daily_mean = region.mean(dim=('latitude', 'longitude'))
    

    Finalmente, para graficar la variabilidad estacional de la TSM durante todo el período de tiempo, puede utilizar matplotlib para graficar la serie temporal:

    import matplotlib.pyplot as plt
    fig, ax = plt.subplots()
    ax.plot(daily_mean.time, daily_mean)
    

    Esto mostrará el valor medio de la TSM para su región de interés en cada día durante todo el período de tiempo. Para mostrar la variabilidad estacional de manera más clara, puede volver a muestrear los datos utilizando la función resample, lo que le permitirá graficar el valor medio de la TSM para cada estación:

    seasonal_mean = daily_mean.resample(time='QS-DEC').mean(dim='time')
    fig, ax = plt.subplots()
    ax.plot(seasonal_mean.time, seasonal_mean)
    

    Esto mostrará el valor medio de la TSM para su región de interés en cada estación durante todo el período de tiempo.

Comments are closed.