Menú

Mostrando entradas con la etiqueta chirps. Mostrar todas las entradas
Mostrando entradas con la etiqueta chirps. Mostrar todas las entradas

viernes, 6 de julio de 2018

Relleno de datos de lluvia mensual de una estación con CHIRPS

Anteriormente, generamos una función para descargar los raster de lluvia estimada a partir de satélite (CHIRPS V 2.0), ahora lo que vamos hacer es extraer los datos para un punto en especifico o la ubicación de una estación climática, el periodo de tiempo de la serie de datos chirps debe ser la misma que la serie de datos de la estación (no importa que existan datos faltantes, solo especificar el datos faltante como -99.9) para que sean comparables.

Luego se creara un modelo de ajuste entre los datos estimados y los datos reales, esto con el fin de que los datos a rellenar sean acordes a la tendencia de los datos observados o pluviometricos.

La importancia de completar series de datos radica darle continuidad a la serie y que esto me permita realizar mejores análisis, crear modelos hidrológicos estables, balances hídricos, etc.

####################################################################

library(raster)

# Ruta del directorio de trabajo
setwd("D:/Documents/chirps/")

# Directorio de los datos de chirp V-2.0
ruta_chirps = "D:/Documents/chirps/raster/"

# Periodo de datos a analizar
fecha_inicial = c("1981/1/1")
fecha_final = c("2018/5/1")

# Coordenada geografica de las estacion (longitud, Latitud)
coor.x = c(-89.8106)
coor.y = c(15.6083)

# Convertir las coordenadas de las estaciones a puntos
ubicacion = data.frame(lon=coor.x, lat=coor.y)
coordinates(ubicacion) = c("lon", "lat")
proj4string(ubicacion) = CRS("+init=epsg:4326") # WGS 84

# Cargar los datos raster
lista_chirps = paste0(ruta_chirps,"chirps-v2.0.", format(seq(as.Date(fecha_inicial), as.Date(fecha_final), "month"), "%Y.%m"), ".tif")
ras_chirps = stack(lista_chirps)

# Extraer datos de lluvia de la estacion
chirps = as.vector((extract(ras_chirps, ubicacion)))

# Cargar datos pluviometricos (reales u observados) de la estacion
estacion = scan("estaciones/Cahabon_1_1981_5_2018.txt", sep = "\t", na.strings = "-99.9")
serie = estacion


# Modelo de ajuste de datos chirps a pluviometicos
model = lm(estacion~chirps)

# estadisticos del modelo de ajuste lineal
summary(model)

# coeficientes del modelo de ajuste lineal
alfa = coef(model)[[2]]
beta = coef(model)[[1]]

# Grafica
plot(estacion~chirps)
abline(b=1,a=1, col="red")

# posiciones de datos faltantes pluviometricos
faltantes = which(is.na(serie))

# Datos chirps ajustados para relleno
relleno = round(alfa*chirps[faltantes]+beta,1)

# Completacion de la serie real
serie[faltantes] = relleno

# Grafico de serie completa (negro) y serie incompleta (rojo)
plot(serie,type="l", xlab="Lluvia [mm]", main="Comparacion de serie completa e incompleta de lluvia")
lines(estacion, col="red")

# Crear tabla de fechas y serie completa
fecha = format(seq(as.Date(fecha_inicial), as.Date(fecha_final), "month"), "%Y.%m")
serie.completa = data.frame(fecha,serie)

write.csv(serie.completa, "Cahabon_rellenada.csv", row.names = FALSE)

#############################################################

Descargar
Archivo_R

jueves, 5 de julio de 2018

Extraer datos de lluvia en una cuenca usando R

La falta de datos de lluvia en una cuenca, no es impedimento para poder realizar un balance hídrico hoy en día, ya que existen datos de hidroestimación o datos de lluvia estimada a partir de satelites o radares.  Estos datos tienen la ventaja que proporcionan la distribución espacial de la lluvia, pero su desventaja es que tienen a subestimar o sobrestimar en algunos eventos de lluvia y esto depende del tipo de lluvia; pero mediante un ajuste por regresión se puede reducir el error.
 También, pueden usarse para rellenar datos mensuales, trimestrales, anuales de lluvia en las series observadas, mediante un ajuste.

## Script para descargar datos chirps 2.0 y extraer la lluvia media de la cuenca
## Walter Bardales
## Fecha: 01/07/2018


#################################################################################

library(R.utils)

# Funcion de descarga Chirps V2.0
download.chirps2.0 = function(Ruta, fecha_inicial, fecha_final){
fecha=format(seq(as.Date(fecha_inicial), as.Date(fecha_final), "month"), format="%Y.%m")
for (i in 1:length(fecha)){
wurl=paste0("ftp://ftp.chg.ucsb.edu/pub/org/chg/products/CHIRPS-2.0/camer-carib_monthly/tifs/","chirps-v2.0.",fecha[i],".tif.gz")
download.file(wurl,paste0(Ruta,"chirps-v2.0.",fecha[i],".tif.gz"))
gunzip(paste0(Ruta,"chirps-v2.0.",fecha[i],".tif.gz"))
}
}

#################################################################################

# Cargar libreria de trabajo
library(raster)
library(rgdal)

# Directorio de trabajo
setwd("D:/Documents/chirps/")

# Cargar funcion de descarga chirps V2.0
source("Funcion_descarga_chirps.R")

# Directorio de la descarga
Ruta = "D:/Documents/chirps/raster/"

# Periodo de descarga
fecha_inicial = c("1983/5/1")
fecha_final = c("1983/8/1")

# Descargar archivos chirps y descomprimir
download.chirps2.0(Ruta,fecha_inicial, fecha_final)

# Desactivar el paquete R.utils por tener conflicto con el paquete Raster
detach("package:R.utils", unload=TRUE)

# Cargar los datos de chirps 2.0
lista_archivos = paste0("raster/","chirps-v2.0.",format(seq(as.Date(fecha_inicial), as.Date(fecha_final), "month"),"%Y.%m"),".tif")
chirps = stack(lista_archivos)

# Cargar el poligono de la cuenca en coordenadas geograficas
cuenca = readOGR("shapefile/La_Pasion.shp") # Indicar el directorio de la cuenca

# Extraer los datos
ppcuenca = t(extract(chirps, cuenca, fun=mean))
row.names(ppcuenca) = NULL # Crear serie de datos y guardar
lluvia_media = data.frame(fecha=format(seq(as.Date(fecha_inicial), as.Date(fecha_final), "month"),"%Y.%m"), Lluvia=ppcuenca)

write.csv(lluvia_media, "Lluvia_La_Pasion.csv", row.names = FALSE) # Cambiar el nombre del archivo de salida


#######################################################################

Descargar scripts