En la web https://www.esrl.noaa.gov/psd/data/gridded/data.noaa.oisst.v2.highres.html es posible descargar datos diarios de temperatura superficial del mar (sst) y de anomalía en la sst (anom). Para ello basta con pinchar en (select 'see list') en la linea correspondiente del cuadro siguiente que aparece en la página citada [Aquí el enlace directo a los datos]:

 

Si pinchamos en el enlace correspondiente a las anomalías diarias, llegamos a otra página en la que debemos pinchar en el enlace situado a la derecha, etiquetado como See list:

 

que nos conduce a la página de descarga de los archivos con la información de la anomalía de SST [Enlace directo aquí]. Si queremos analizar, por ejemplo, la anomalía en el año 2016 descargaremos el archivo sst.day.anom.2016.v2.nc

Este archivo está en formato netCDF que es un formato específico que contiene información de una o varias variables especificando la longitud y latitud donde se ha realizado la medida, así como el instante (día) en que esta se ha llevado a cabo.

Para leer este archivo utilizamos la siguiente sintaxis:

library(ncdf4)  # librería para la lectura de archivos en formato netCDF

file="datos/sst.day.anom.2016.v2.nc"
ncin=nc_open(file)
ncin                               # Descripción del contenido del archivo
## File datos/sst.day.anom.2016.v2.nc (NC_FORMAT_NETCDF4_CLASSIC):
## 
##      1 variables (excluding dimension variables):
##         float anom[lon,lat,time]   
##             long_name: Daily Sea Surface Temperature Anomalies
##             units: degC
##             valid_range: -20
##              valid_range: 20
##             missing_value: -9.96920996838687e+36
##             precision: 2
##             dataset: NOAA High-resolution Blended Analysis
##             var_desc: Sea Surface Temperature Anomalies
##             level_desc: Surface
##             statistic: Anomaly
##             parent_stat: Other
##             actual_range: -13.1199998855591
##              actual_range: 16.7899990081787
## 
##      3 dimensions:
##         time  Size:366   *** is unlimited ***
##             long_name: Time
##             units: days since 1800-01-01 00:00:00
##             delta_t: 0000-00-01 00:00:00
##             avg_period: 0000-00-01 00:00:00
##             axis: T
##             actual_range: 78892
##              actual_range: 79257
##         lat  Size:720
##             long_name: Latitude
##             standard_name: latitude
##             units: degrees_north
##             actual_range: -89.875
##              actual_range: 89.875
##             axis: Y
##         lon  Size:1440
##             long_name: Longitude
##             standard_name: longitude
##             units: degrees_east
##             actual_range: 0.125
##              actual_range: 359.875
##             axis: X
## 
##     8 global attributes:
##         Conventions: CF-1.5
##         title: NOAA High-resolution Blended Analysis: Daily Values using AVHRR only
##         institution: NOAA/NCDC
##         source: NOAA/NCDC  ftp://eclipse.ncdc.noaa.gov/pub/OI-daily-v2/
##         references: http://www.esrl.noaa.gov/psd/data/gridded/data.noaa.oisst.v2.highres.html
##         dataset_title: NOAA Daily Optimum Interpolation Sea Surface Temperature
##         history: Version 1.0
##         comment: Reynolds, et al., 2007: Daily High-Resolution-Blended Analyses for Sea Surface Temperature. J. Climate, 20, 5473-5496.  Climatology is based on 1971-2000 OI.v2 SST, Satellite data: Navy NOAA17 NOAA18 AVHRR, Ice data: NCEP ice. Data less than 15 days old may be subject to revision.
lon <- ncvar_get(ncin,"lon")       # Longitudes recogidas en el archivo
lat <- ncvar_get(ncin,"lat")       # Latitudes
time <- ncvar_get(ncin,"time")     # Tiempo (mes al que corresponde la observación)
tunits <- ncatt_get(ncin, "time", "units")   # Unidades de medida del tiempo
tunits
## $hasatt
## [1] TRUE
## 
## $value
## [1] "days since 1800-01-01 00:00:00"
library(chron)                     # Librería con funciones para trabajar con tiempo. Es capaz de convertir el número de días transcurridos desde un dia concreto en una fecha, teniendo en cuenta la presencia, de años bisiestos.
tustr <- strsplit(tunits$value, " ") # Lee el día desde el que se cuentan las fechas
tdstr <- strsplit(unlist(tustr)[3], "-")
tmonth = as.integer(unlist(tdstr)[2])
tday = as.integer(unlist(tdstr)[3])
tyear = as.integer(unlist(tdstr)[1])
fecha=as.Date(chron(time, origin = c(tmonth, tday, tyear)))

Lectura de los datos de anomalía de temperatura en la SST y su representación gráfica:

tmp_array <- ncvar_get(ncin,"anom")  # lectura de los datos de anomalia de SST
dlname <- ncatt_get(ncin,"anom","long_name"); dlname
## $hasatt
## [1] TRUE
## 
## $value
## [1] "Daily Sea Surface Temperature Anomalies"
dunits <- ncatt_get(ncin,"anom","units"); dunits
## $hasatt
## [1] TRUE
## 
## $value
## [1] "degC"
fillvalue <- ncatt_get(ncin,"anom","_FillValue") # Código utilizado para los valores perdidos
tmp_array[tmp_array == fillvalue$value] <- NA   # Los valores perdidos se convierten a NA para que R los interprete correctamente

# tmp_array es un array de tres dimensiones; las dos primeras son longitud y latitud y la tercera es el día
library(RColorBrewer)
image(lon,lat,tmp_array[,,1], col=rev(brewer.pal(10,"RdBu")))
title(paste("SST Anomaly",fecha[1]))

Si se desea extraer una parte de la imagen, por ejemplo, datos del entorno de Canarias y costa oriental de África el 15 de junio de 2016:

dateStart=which(fecha=="2016-06-15")
LonStartIdx <- which( ncin$dim$lon$vals == 330.125)
LonEndIdx <- which( ncin$dim$lon$vals == 359.125)
LatStartIdx <- which( ncin$dim$lat$vals == 20.125)
LatEndIdx <- which( ncin$dim$lat$vals == 40.125)
lonCount=LonEndIdx-LonStartIdx+1
latCount=LatEndIdx-LatStartIdx+1
canarias=ncvar_get( ncin, "anom", start=c( LonStartIdx, LatStartIdx,dateStart), count=c(lonCount,latCount,1))
canarias[canarias == fillvalue$value] <- NA
# En la variable `canarias` han quedado almacenados los datos de sst en las longitudes y latitudes especificadas.
lonG=ncin$dim$lon$vals[LonStartIdx:LonEndIdx]
latG=ncin$dim$lat$vals[LatStartIdx:LatEndIdx]
image(lonG,latG,canarias)

Del mismo modo, podemos descargar los datos diarios de SST (Enlace directo aquí). Por ejemplo, para los datos de 2016, descargaríamos el archivo (sst.day.mean.2016.v2.nc) y leerlos y representarlos:

library(ncdf4)  # librería para la lectura de archivos en formato netCDF

file="datos/sst.day.mean.2016.v2.nc"
ncin=nc_open(file)
ncin                               # Descripción del contenido del archivo
## File datos/sst.day.mean.2016.v2.nc (NC_FORMAT_NETCDF4_CLASSIC):
## 
##      1 variables (excluding dimension variables):
##         float sst[lon,lat,time]   
##             long_name: Daily Sea Surface Temperature
##             units: degC
##             valid_range: -3
##              valid_range: 45
##             missing_value: -9.96920996838687e+36
##             precision: 2
##             dataset: NOAA High-resolution Blended Analysis
##             var_desc: Sea Surface Temperature
##             level_desc: Surface
##             statistic: Mean
##             parent_stat: Individual Observations
##             actual_range: -1.79999995231628
##              actual_range: 38.1499977111816
## 
##      3 dimensions:
##         time  Size:366   *** is unlimited ***
##             long_name: Time
##             units: days since 1800-01-01 00:00:00
##             delta_t: 0000-00-01 00:00:00
##             avg_period: 0000-00-01 00:00:00
##             axis: T
##             actual_range: 78892
##              actual_range: 79257
##         lat  Size:720
##             long_name: Latitude
##             standard_name: latitude
##             units: degrees_north
##             actual_range: -89.875
##              actual_range: 89.875
##             axis: Y
##         lon  Size:1440
##             long_name: Longitude
##             standard_name: longitude
##             units: degrees_east
##             actual_range: 0.125
##              actual_range: 359.875
##             axis: X
## 
##     8 global attributes:
##         Conventions: CF-1.5
##         title: NOAA High-resolution Blended Analysis: Daily Values using AVHRR only
##         institution: NOAA/NCDC
##         source: NOAA/NCDC  ftp://eclipse.ncdc.noaa.gov/pub/OI-daily-v2/
##         references: http://www.esrl.noaa.gov/psd/data/gridded/data.noaa.oisst.v2.highres.html
##         dataset_title: NOAA Daily Optimum Interpolation Sea Surface Temperature
##         history: Version 1.0
##         comment: Reynolds, et al., 2007: Daily High-Resolution-Blended Analyses for Sea Surface Temperature. J. Climate, 20, 5473-5496.  Climatology is based on 1971-2000 OI.v2 SST, Satellite data: Navy NOAA17 NOAA18 AVHRR, Ice data: NCEP ice. Data less than 15 days old may be subject to revision.
lon <- ncvar_get(ncin,"lon")       # Longitudes recogidas en el archivo
lat <- ncvar_get(ncin,"lat")       # Latitudes
time <- ncvar_get(ncin,"time")     # Tiempo (mes al que corresponde la observación)
tunits <- ncatt_get(ncin, "time", "units")   # Unidades de medida del tiempo
tunits
## $hasatt
## [1] TRUE
## 
## $value
## [1] "days since 1800-01-01 00:00:00"
library(chron)                     # Librería con funciones para trabajar con tiempo. Es capaz de convertir el número de días transcurridos desde un dia concreto en una fecha, teniendo en cuenta la presencia, de años bisiestos.
tustr <- strsplit(tunits$value, " ") # Lee el día desde el que se cuentan las fechas
tdstr <- strsplit(unlist(tustr)[3], "-")
tmonth = as.integer(unlist(tdstr)[2])
tday = as.integer(unlist(tdstr)[3])
tyear = as.integer(unlist(tdstr)[1])
fecha=as.Date(chron(time, origin = c(tmonth, tday, tyear)))

tmp_array <- ncvar_get(ncin,"sst")  # lectura de los datos de SST
dlname <- ncatt_get(ncin,"sst","long_name"); dlname
## $hasatt
## [1] TRUE
## 
## $value
## [1] "Daily Sea Surface Temperature"
dunits <- ncatt_get(ncin,"sst","units"); dunits
## $hasatt
## [1] TRUE
## 
## $value
## [1] "degC"
fillvalue <- ncatt_get(ncin,"sst","_FillValue") # Código utilizado para los valores perdidos
tmp_array[tmp_array == fillvalue$value] <- NA   # Los valores perdidos se convierten a NA para que R los interprete correctamente

# tmp_array es un array de tres dimensiones; las dos primeras son longitud y latitud y la tercera es el día
library(RColorBrewer)
image(lon,lat,tmp_array[,,1], col=rev(brewer.pal(10,"RdBu")))
title(paste("mean SST",fecha[1]))

El archivo canariasMeteo.xlsx contiene datos meteorológicos diarios medidos en diversos aeropuertos canarios desde los años 50-60 (depdne del aeropuerto) del siglo pasado. Los datos se han obtenido a través de la web http://www.ecad.eu \(^{[1]}\), que proporciona datos diarios y han sido procesados para agruparlos en un único archivo excel. Las variables medidas han sido las siguientes:

 

Para cada una de estas variables se muestra el promedio diario (salvo para las temperaturas mínima y máxima, en cuyo caso se muestran, respectivamente, el mínimo y máximo diario) de cada día de 2009. Téngase en cuenta que el registro es incompleto y hay días en que algunas de las variables no se han medido, normalmente por fallos técnicos o cuestiones de mantenimiento. En el archivo Excel correspondiente, cuando falta un dato se ha dejado el hueco en blanco.

 

El objetivo del análisis es determinar las posibles relaciones entre los valores de la SST y/o anomalia de SST con las distintas variables meteorológicas en las distintas islas. A continuación se apuntan algunas ideas para orientar el estudio de estos datos. Estas ideas no pretenden ser exhaustivas, ni es necesario hacer todas y cada una de las tareas señaladas. Deben tomarse como simple orientación y el alumno es libre de poner en práctica cualquier análisis de estos datos que considere interesante. En particular, dada la magnitud de los archivos de datos, se aconseja centrar el análisis en un único año (2016, por ejemplo, o cualquier otro que pueda resultar de interés).

 

  1. Realizar una estadística descriptiva general de cada variable.

    1. En el caso de variables continuas, dicha estadística debería incluir valor medio, desviación típica, valor mediano y valores mínimo y máximo. Los datos pueden representarse gráficamente mediante histogramas, y pueden agruparse por meses o trimestres, globalmente y por islas.

    2. En el caso de variables categóricas (cobertura de nubes), la descripción consistirá en la realización de una tabla de frecuencias y su correspondiente representación en un diagrama de barras.

    3. En el caso del archivo con datos de SST, se puede hacer también una descripción como la señalada en el apartado a anterior, eligiendo algunos puntos concretos (p.ej. en el canal que separa las islas orientales de la costa africana, en algunos puntos al norte del archipiélago, otros al sur y entre islas)

 

  1. Representar la serie temporal de los valores de las distintas variables (temperatura media, mínima y máxima, humedad, velocidad del viento, SST en los puntos elegidos en el apartado anterior).

  2. Dibujar boxplots de las distintas variables frente a la variable “trimestre”, o frente a la variable isla, para evaluar su variación temporal y espacial.

  3. Utilizar el análisis de la varianza para decidir si existen diferencias significativas en los valores medios de la presión atmosférica entre las distintas estaciones.

  4. Utilizar el análisis de la varianza para decidir si existen diferencias significativas en los valores medios de precipitación, velocidad del viento, temperatura, etc entre trimestres y entre islas.

  5. Dibujar nubes de puntos de la temperatura frente a la duración de la radiación solar para los datos de las distintas islas. Calcula la recta de regresión para predecir la temperatura a partir del valor de la radiación solar.

  6. Representar en nubes de puntos la temperatura en las islas frente a la SST, global o por regiones.

  7. ¿La velocidad del viento, o de las rachas, se relaciona con diferencias en los valores de SST entre el norte y sur de cada isla?

  8. Construye un modelo de regresión múltiple para predecir la temperatura media en una isla a partir de la SST en su entorno, la cobertura de nubes, la velocidad del viento, la precipitación, la radiación solar, la presión atmosférica y la humedad relativa del aire.¿Crees que es necesario que el modelo incluya todas las variables citadas?

 

 

Referencias

[1] Klein Tank, A.M.G. and Coauthors, 2002. Daily dataset of 20th-century surface air temperature and precipitation series for the European Climate Assessment. Int. J. of Climatol., 22, 1441-1453. Data and metadata available at http://www.ecad.eu

  [2] Reynolds, Richard W., Thomas M. Smith, Chunying Liu, Dudley B. Chelton, Kenneth S. Casey, Michael G. Schlax, 2007: Daily High-Resolution-Blended Analyses for Sea Surface Temperature. J. Climate, 20, 5473-5496. Reynolds, Richard W., Thomas M. Smith, Chunying Liu, Dudley B. Chelton, Kenneth S. Casey, Michael G. Schlax, 2007: Daily High-Resolution-Blended Analyses for Sea Surface Temperature. J. Climate, 20, 5473-5496.

Citation: Debe citarse la fuente de origen de los datos:

Please note: If you acquire NOAA High Resolution SST data products from PSD, we ask that you acknowledge us in your use of the data. This may be done by including text such as NOAA High Resolution SST data provided by the NOAA/OAR/ESRL PSD, Boulder, Colorado, USA, from their Web site at http://www.esrl.noaa.gov/psd/ in any documents or publications using these data. We would also appreciate receiving a copy of the relevant publications. This will help PSD to justify keeping the NOAA High Resolution SST data set freely available online in the future. Thank you!