Este cuaderno es una guía para facilitar el desarrollo de la actividades en clase de los cursos: Hidroclimatológia (pregrado y posgrado) y Modelación de procesos hidrológicos de la FEAR-PUJ, y fue consolidado con la ayuda de Diego Cortés (estudiante de Maestría en Recursos Hídricos en la Unal).

El presente cuaderno permite identificar los periodos en los que cada estación presenta una mayor cantidad de datos faltantes.

Antes de iniciar, es recomendable iniciar limpiando el espacio de trabajo y llamando de una vez todos las librerías que se vayan a necesitar. Si no se tiene instalada alguna de las librerías es necesario hacerlo con el comando “install.packages”. Así mismo, se selecciona el directorio de trabajo donde se tiene el archivo con la información a procesar.

Una vez instalados los paquetes requeridos, por favor indique con el comando “setwd” la ubicación de la CARPETA donde tiene los archivos con los que vamos a trabajar.Por favor recuerde que para correr este comando debe usar DOBLE SLASH. Es recomendable que cree una carpeta de trabajo para este curso y que esta no este guardada en la nube (OneDrive) para evitar problemas de sincronización por falta de internet durante las clases.

# Carpeta de trabajo
setwd("D://Javeriana//Scripts - R") 

Si usted ha realizado la solicitud de información por la opción PQR de IDEAM, es posible que obtenga un archivo comprimido. Si este es el caso por favor descomprima los archivos previamente usando las herramientas Winrar, WinZip o similares.

Para iniciar, cargaremos los archivos en una variable a la que llamaremos fls. NOTA Estos archivos deberan estar en formato texto (.txt)

fls <- list.files("REQ_2021-006681/", ".txt$", full.names = T) # Archivos recibidos

Adicionalmente, es necesrio realizar una selección de variables según el glosario base establecido por Ideam. Para ello, es necesario descargar de la página http://dhime.ideam.gov.co/atencionciudadano/ en la pestaña Recursos el archivo Glosario de Variables.xlsx. Una vez obtenido el archivo, es necesario verificar que no tenga columnas o filas combinadas. Si este es el caso, por favor elimine la primer fila.

Una vez listo el archivo, asignaremos una variable a cada tipo de variable, como se indica a continuación:

# glosario
gl1 <- read.xlsx("D://Javeriana//Scripts - R//GlosarioVariables.xlsx", "Basicas")
gl2 <- read.xlsx("D://Javeriana//Scripts - R//GlosarioVariables.xlsx", "Derivadas-M")
gl3 <- read.xlsx("D://Javeriana//Scripts - R//GlosarioVariables.xlsx", "Derivadas-H")

Si tiene un archivo de excel con tildes, es posible que este código le genere un error y deba revisar como usar la función encoding=“UTF-8” de los paquetes readxl u openxlsx.

Ahora, es necesario agrupar estas variables en una sola, que denominaremos glosario y que utilizará únicamente las columnas “Etiqueta” y “Descripción”. Esta acción se consolida con la función rbind la cual agrupa variables por fila.

glosario <- rbind(gl1[ ,c("Etiqueta", "Descripcion")], gl2[ ,c("Etiqueta", "Descripcion")],
                  gl3[ ,c("Etiqueta", "Descripcion")])

El siguiente paso es la creación de un archivo que contenga el código de la estación, la fecha y el valor de la variable. Esto se hace con la variable data. Si usted desea que el filtro no sea por código si no por nombre, por favor realice el ajuste en el código.Finalmente, agrupamos todos los datos en la variable data2xts.

for(i in fls){ 
  data <- read.csv(i, header = F)[,-1] 
  var <- sub(".+/", "", i); var <- sub(".txt", "", var) 
  var.des <- ifelse(var %in% glosario$Etiqueta, glosario$Descripcion[glosario$Etiqueta == var], 
                    var)
  data$V3 <- as.POSIXct(data$V3, format = "%Y-%m-%d %T", tz = "GMT")
  data2xts <- list()
  for (j in unique(data$V2)){
    dj <- data[data$V2 == j,]
    data2xts[[as.character(j)]] <- as.xts(dj$V4, order.by = dj$V3)
  }

  data2xts <- do.call(cbind, data2xts) # Series de tiempo
  
   colnames(data2xts) <- substring(colnames(data2xts), 2) 
  
   #hay que crear la carpeta primero
  
   as.data.frame(data2xts) %>% write.csv(sprintf("Registros Crudos Ordenados/%s.csv", var), na = " ")
  
  dates <- index(data2xts)
  data.p <- (1:ncol(data2xts[,]) * t((data2xts[,]+1)/(data2xts[,]+1))) %>% t %>%
    as.data.frame() # Para plotear
  data.p <- cbind(dates, data.p)
  colnames(data.p)[1] <- "time"
  colnames(data.p)[-1] <- substring(colnames(data2xts),2)
  
  data.p <- melt(data.p, id.vars = "time", variable.name = "Estaci?n")
  
  # Plot de registros
  #hay que crear primero la carpeta registrosplot
  p.p <- ggplot(data.p, aes(time, value)) +
    geom_point() +
    scale_y_continuous(breaks = 1:ncol(data2xts), limits = c(1,ncol(data2xts)),
                       labels = colnames(data2xts), name = "") +
    labs(x = "Fechas") +
    ggtitle(sprintf("Registros de %s", var.des)) +
    theme(plot.title = element_text(hjust = 0.5))
  ggsave(filename = sprintf("RegistrosPlot/%s.png", var),
         width = 15, height = (ncol(data2xts)), units = "cm")
}
## Warning: Removed 2347953 rows containing missing values (geom_point).
## Warning: Removed 1956038 rows containing missing values (geom_point).
## Warning: Removed 13095 rows containing missing values (geom_point).