path = "C:/Users/ASUS/Desktop/Muestra/MAÑAZO"
setwd(path)1 ANÁLISIS EXPLORATORIO PRELIMINAR
El análisis exploratorio preliminar permite identificar el periodo de estudio más completo, periodos faltantes a completar e identificar valores que podrían implicar errores o datos faltantes en la toma de mediciones. Ej. -99.9 ,-999, -888 ,"NA" ,"S/D" (como carácter).
Es un paso muy importante previo al análisis exploratorio.
1.1 Formato Inicial de Archivos
Normalmente los archivos de series climáticas se encuentran en formato en .csv o .txt (más usado), los cuales cuentan con 6 columnas sin nombre:

Donde cada columna representa:
| Año | Mes | Dia | Pp | Tmax | Tmin |
|---|---|---|---|---|---|
Para realizar este análisis es necesario contar con una carpeta donde se encuentren todas las series de alguna región en estudio ya sea en formato .csv o .txt. Es necesario que cada archivo tenga el nombre de la estación en mayusculas y sin espacios de esta forma:

Además también es necesario para los pasos siguientes contar con archivo .xlsx que cuente con los metadatos de las estaciones, NOTA: De no contar con estos metadatos se pueden extraer del paquete senamhiR.

El archivo contará con la siguiente forma:

Cabe recalcar que los nombres de la columna Estacion y de los archivos .csv deben ser los mismos

1.2 Procesamiento inicial en R
Una vez se cumplan con todos estos requisitos, pasaremos a usar R. Primeramente se establecerá el directorio de trabajo donde se encuentran todos los archivos a utilizar.
En el objeto path se gaurdará la ruta y se usará la función setwd() para guardar nuestro directorio.
Podemos comprobar la ruta guardada con getwd() .
getwd()[1] "C:/Users/ASUS/Desktop/Muestra/MAÑAZO"
Ahora podemos listar todos los archivos .csv o .txt de cada estación de nuestro directorio usando la función list.files(). Podemos establecer el tipo de archivo con pattern, en este caso pattern = "\\.csv$" para listar archivos .csv. Para archivos .txt usar pattern = "\\.txt$"
files <-list.files(pattern = "\\.csv$")
files ###Veremos los 15 csv [1] "CABANILLAS.csv" "CAPACHICA.csv" "CHILLIGUA.csv" "ELFRAYLE.csv"
[5] "ICHUÑA.csv" "ILAVE.csv" "IMATA.csv" "JULI.csv"
[9] "JULIACA.csv" "LAMPA.csv" "LOSUROS.csv" "MAÑAZO.csv"
[13] "PAMPAHUTA.csv" "PUNOSEI.csv" "UBINAS.csv"
1.3 Procesamiento final en R
Con todos los archivo listados procederemos a leer cada uno y agruparlo en un solo dataframe uno debajo de otro usando un bucle, aplicaremos el siguiente código:
datos_f <- NULL
for (i in 1:length(files)){
# Lee el archivo
datos <- read.table(files[i], header = F,sep=";", colClasses = "numeric")
if(ncol(datos) == 4){
datos$V5 <- NA
datos$V6 <- NA
}
if(ncol(datos) == 5){
datos$V6 <- NA
}
# Modificando nombres de columnas
names(datos) <- c("Año","Mes","Dia","Pp","Tmax","Tmin")
# Generando nueva columna de fechas
datos$Fecha <- as.Date(paste0(datos$Año,"-",datos$Mes,"-",datos$Dia))
#Añadiendo columna de estacion
datos_f <- rbind(datos_f,data.frame(datos,ESTACION =sub("\\.csv$", "", files[i])))
}Establecermos
datos_f <- NULL, para definirlo como nuestro inicializadorPara leer uno de los archivos listados podemos usar, la función
read.csv(“Aqui el archivo.csv”), en el caso de ser archivos en formato .txt se puede usarread.table(“Aqui el archivo.txt”). Como en este caso los csv no tienen nombre de columna, podemos establecer el parámetroheader=F, para indicar que no contamos con nombre de columna. NOTA: Normalmente los archivos csv son archivos separados por coma (“,”) , pero a veces están separados por punto y coma, si ocurre ese caso puedes especificar como esta separado usando el parámetrosep = “;”dentro de la funciónread.csv().Algunas veces los archivos no cuentan con las 6 columnas de año, mes, dia, Pp, Tmax y Tmin por lo que se establecerá un condicional para aumentar columnas en caso no esten completas.
Posteriormente se modificarán los nombre de columnas, se creará una columna de fechas y con la función
rbind()se procederé a grupar todos los dataframe suno debajo de otro y agregando una columna adicional para determinar que estación es.
En datos_f quedará guardadas todas las estaciones una debajo de otra.
head(datos_f,20) Año Mes Dia Pp Tmax Tmin Fecha ESTACION
1 1990 1 1 8.9 14.5 1.4 1990-01-01 CABANILLAS
2 1990 1 2 3.6 15.0 1.0 1990-01-02 CABANILLAS
3 1990 1 3 1.4 16.0 3.2 1990-01-03 CABANILLAS
4 1990 1 4 19.8 14.5 4.0 1990-01-04 CABANILLAS
5 1990 1 5 7.6 15.0 4.4 1990-01-05 CABANILLAS
6 1990 1 6 7.8 13.5 4.4 1990-01-06 CABANILLAS
7 1990 1 7 10.8 12.0 3.6 1990-01-07 CABANILLAS
8 1990 1 8 2.8 14.0 4.2 1990-01-08 CABANILLAS
9 1990 1 9 4.2 17.5 4.0 1990-01-09 CABANILLAS
10 1990 1 10 6.2 14.5 4.0 1990-01-10 CABANILLAS
11 1990 1 11 5.8 14.0 4.8 1990-01-11 CABANILLAS
12 1990 1 12 1.6 14.5 4.2 1990-01-12 CABANILLAS
13 1990 1 13 7.0 14.5 4.6 1990-01-13 CABANILLAS
14 1990 1 14 12.0 12.0 4.4 1990-01-14 CABANILLAS
15 1990 1 15 2.8 15.5 4.2 1990-01-15 CABANILLAS
16 1990 1 16 5.2 18.0 4.6 1990-01-16 CABANILLAS
17 1990 1 17 2.4 14.0 4.0 1990-01-17 CABANILLAS
18 1990 1 18 6.2 13.5 4.4 1990-01-18 CABANILLAS
19 1990 1 19 0.0 15.0 6.0 1990-01-19 CABANILLAS
20 1990 1 20 1.0 16.0 6.6 1990-01-20 CABANILLAS
tail(datos_f,20) Año Mes Dia Pp Tmax Tmin Fecha ESTACION
176584 2023 12 12 0.2 22.2 7.0 2023-12-12 UBINAS
176585 2023 12 13 12.0 23.0 6.8 2023-12-13 UBINAS
176586 2023 12 14 2.8 18.6 7.0 2023-12-14 UBINAS
176587 2023 12 15 0.0 20.2 7.2 2023-12-15 UBINAS
176588 2023 12 16 0.0 23.8 7.0 2023-12-16 UBINAS
176589 2023 12 17 0.0 21.8 6.8 2023-12-17 UBINAS
176590 2023 12 18 0.0 22.0 7.2 2023-12-18 UBINAS
176591 2023 12 19 0.0 22.4 6.2 2023-12-19 UBINAS
176592 2023 12 20 0.0 22.0 6.2 2023-12-20 UBINAS
176593 2023 12 21 0.0 21.6 6.0 2023-12-21 UBINAS
176594 2023 12 22 0.0 22.0 6.8 2023-12-22 UBINAS
176595 2023 12 23 0.0 23.2 7.0 2023-12-23 UBINAS
176596 2023 12 24 0.0 22.8 6.6 2023-12-24 UBINAS
176597 2023 12 25 0.0 23.6 5.8 2023-12-25 UBINAS
176598 2023 12 26 0.0 19.0 5.4 2023-12-26 UBINAS
176599 2023 12 27 1.2 20.8 7.0 2023-12-27 UBINAS
176600 2023 12 28 1.8 19.2 7.4 2023-12-28 UBINAS
176601 2023 12 29 1.0 18.8 7.0 2023-12-29 UBINAS
176602 2023 12 30 2.0 17.4 7.4 2023-12-30 UBINAS
176603 2023 12 31 0.0 17.8 7.0 2023-12-31 UBINAS
unique(datos_f$ESTACION) [1] "CABANILLAS" "CAPACHICA" "CHILLIGUA" "ELFRAYLE" "ICHUÑA"
[6] "ILAVE" "IMATA" "JULI" "JULIACA" "LAMPA"
[11] "LOSUROS" "MAÑAZO" "PAMPAHUTA" "PUNOSEI" "UBINAS"
1.4 Generación de gráficas para visualización
Ahora podemos graficar una variable de cada una de las estaciones en una sola gráfica, para ello estableceremos nuestro data=datos_f para indicar que queremos graficar de ese dataframe, los ejes x=Fecha y=Pp (variable de precipitación), la variable se puede cambiar a Tmax y Tmin , además se establece un color diferente paa cada estación con col="ESTACION" .
Antes instalaremos los paquetes necesarios ggplot2 para gráficas estáticas y plotly para gráficas interactivas, la instalación se hace con la función install.packages() . NOTA: Solo es necesario instalar una vez, depués de eso se puede comnetar la instalación.
#install.packages("ggplot2") ####Descomentar para instalar y comentar después de instalado
#install.packages("plotly") ####Descomentar para instalar y comentar después de instalado
#install.packages("htmlwidgets") ####Descomentar para instalar y comentar después de instalado
library(ggplot2)
library(plotly)
Attaching package: 'plotly'
The following object is masked from 'package:ggplot2':
last_plot
The following object is masked from 'package:stats':
filter
The following object is masked from 'package:graphics':
layout
library(htmlwidgets)Crearemos un bucle para graficar todas las variables y guardarlas en una lista, además de exportarlas a nuestro directorio.
En
varguardaremos todas las variables que graficaremos en cada iteración, podemos también agregar las unidades (unit) y los títulos (title)Con
geom_line()establecemos que genere un gráfico de líneas, esta puede ser cambiado porgeom_point()si se quiere un gráfico de puntos.Con
facet_wrap()establecemos que sean gráficas de línea por separado, podemos usar el parámetroncol=2, para establlecer que a lo mucho se generen 2 columnas de gráficos.Creamos 2 listas
static_gdonde se guardaran las gráficas estáticas eintera_gdonde se guardaran las gráficas interactivas.Con la función
ggsave()la gráfica se exportará, se puede modificar elheightywidhta gusto propio.Además creamos una carpeta donde se guardaran las gráficas llamada
aed_preliminar, en esta carpeta estarán los resultados.
var <- c("Pp","Tmax","Tmin")
unit <- c("(mm)","°C","°C")
title <- c("Precipitación Estaciones Mañazo","Temperatura Máxima Estaciones Mañazo","Temperatura Mínima Estaciones Mañazo")
static_g <- list()
interac_g <- list()
carpeta_graficas <- "aed_graph"
if (!dir.exists(carpeta_graficas)) {
dir.create(carpeta_graficas)
}
for (i in 1:length(var)){
g_pp <- ggplot(data=datos_f,aes_string(x="Fecha",y=var[i],col="ESTACION"))+
geom_line(show.legend = FALSE)+
facet_wrap(~ ESTACION, scales = "free_y", ncol = 2)+xlab("Fecha")+
ylab(paste0(var[i]," ",unit[i]))+theme_bw()+
theme(plot.title = element_text(hjust = 0.5,face = "bold"), strip.text = element_text(color = "black", face = "bold"),strip.background = element_rect(fill="white",color=NA))+
theme(axis.title = element_text(face = "bold")) + ggtitle(title[i])
static_g[[i]] <- g_pp
interac_g[[i]] <- ggplotly(g_pp)
ggsave(static_g[[i]],filename=paste0("aed_preliminar/",var[i],"_aed.png"),dpi=320,width=11,height=9)
htmlwidgets::saveWidget(interac_g[[i]],paste0("aed_preliminar/",var[i],"_aed.html"))
}Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
ℹ Please use tidy evaluation ideoms with `aes()`
Warning: Removed 21729 rows containing missing values (`geom_line()`).
Warning: Removed 21587 rows containing missing values (`geom_line()`).
Ahora podemos revisar la carpeta creada aed_preliminar donde se guardaron todas las gráficas, esta carpeta la podemos encontrar en nuestro directorio. NOTA: Esta carpeta se crea automáticamente si no existe asi que no es necesario crearla manualmente.


Aqui podemos ver algunas gráficas guardadas en las listas, ya sea de forma estática o interactiva.
static_g[[1]] ######Precipitación
interac_g[[1]] ####Precipitación interactiva