Introducción

Este documento muestra cómo descargar y procesar los datos de estaciones climatológicas de los estados en México utilizando las librerías rvest y stringr en R.

Instalación de Librerías

Primero, instalamos las librerías necesarias solo si no están ya instaladas en el sistema.

# Instalar librerías si no están instaladas
required_packages <- c("rvest", "stringr")
new_packages <- required_packages[!(required_packages %in% installed.packages()[,"Package"])]
if(length(new_packages)) install.packages(new_packages)
# Cargar las librerías necesarias
library(rvest)    # Nos ayuda con el scrapping del HTML
## Warning: package 'rvest' was built under R version 4.3.3
library(stringr)   # Nos ayuda a manipular cadenas de texto
## Warning: package 'stringr' was built under R version 4.3.3

Definir Acrónimos de Estados y la URL Base Definimos una lista con los acrónimos de los estados y la URL base para acceder a los datos de cada estado.

# Definir acrónimos de estados y la URL base
estados <- c("ags", "bc", "bcs", "camp", "coah", "col", "chis", "chih", "cdmx", "dgo", "gto", 
             "gro", "hgo", "jal", "mex", "mich", "mor", "nay", "nl", "oax", "pue", "qro", 
             "qroo", "slp", "sin", "son", "tab", "tamps", "tlax", "ver", "yuc", "zac")

url_base <- "https://smn.conagua.gob.mx/tools/RESOURCES/Normales_Climatologicas/catalogo/cat_"

Función para Obtener Datos de un Estado Creamos una función que toma el acrónimo de un estado y devuelve un data.frame con los datos de las estaciones climatológicas.

# Crear una función para obtener la tabla de un estado
obtener_datos_estado <- function(estado) {
  url <- paste0(url_base, estado, ".html")
  html <- read_html(url)
  tabla <- html_nodes(html, "table") %>% html_table(fill = TRUE)
  df <- as.data.frame(tabla[[1]][3:nrow(tabla[[1]]), ])
  return(df)
}

Ejemplo: Descargar Datos de Tabasco Usamos la función creada para descargar los datos del estado de Tabasco (posición 27 en la lista de acrónimos).

# Ejemplo: Obtener datos del estado de Tabasco (posición 27 en la lista)
estado_tabasco <- obtener_datos_estado(estados[27])

# Imprimir los primeros registros del estado de Tabasco
head(estado_tabasco)
##      X1                          X2           X3         X4     X5      X6
## 1 27001 Balancan De Dominguez (SMN)     Balancán Suspendida Diario Mensual
## 2 27002               Benito Juarez       Centla   Operando Diario Mensual
## 3 27003                    Blasillo Huimanguillo   Operando Diario Mensual
## 4 27004              Boca Del Cerro    Tenosique   Operando Diario Mensual
## 5 27006                  Buenavista     Balancán   Operando Diario Mensual
## 6 27007    Centro Experimental W-75     Cárdenas   Operando Diario Mensual
##         X7        X8        X9       X10       X11
## 1 Ext-hist                                        
## 2 Ext-hist                                        
## 3 Ext-hist           1971-2000 1981-2010 1991-2020
## 4 Ext-hist 1961-1990 1971-2000 1981-2010 1991-2020
## 5 Ext-hist           1971-2000 1981-2010 1991-2020
## 6 Ext-hist 1961-1990           1981-2010 1991-2020

Extensión: Descargar y Combinar Datos de Dos Estados Ahora vamos a extender nuestro ejercicio y descargaremos los datos de dos estados, en este caso, Hidalgo (13) y Tabasco (27), y los combinaremos en un solo data.frame.

Función para Descargar y Procesar Datos de Dos Estados La función a continuación realiza los siguientes pasos:

Inicializa un data.frame vacío para almacenar los datos combinados de ambos estados. Itera sobre ambos estados: Crea la URL para cada estado y descarga los datos en formato HTML. Extrae las tablas HTML y las transforma en un formato legible por R. Combina los datos en un solo data.frame utilizando rbind.

# Función para descargar y procesar datos de estaciones de dos estados específicos
procesar_estados <- function(estado1, estado2) {
  # Inicializar DataFrame vacío
  df <- NULL
  
  # Procesar cada estado
  for (estado in c(estado1, estado2)) {
    # Construir la URL completa
    url_completa <- paste0(url_base, estados[estado], ".html")
    
    # Leer y procesar la tabla HTML
    tabla <- read_html(url_completa) %>%
             html_nodes("table") %>%
             html_table(fill = TRUE)
    
    # Añadir los datos al DataFrame, especificando el estado para cada fila
    df <- rbind(df, data.frame(Estado=estados[estado], NoEst=as.data.frame(tabla[[1]][3:nrow(tabla[[1]]),])[,1]))
  }
  
  # Devolver el DataFrame procesado
  return(df)
}

Descargar Datos de Hidalgo (13) y Tabasco (27) Utilizamos la función anterior para descargar y combinar los datos climatológicos de los estados de Hidalgo (posición 13) y Tabasco (posición 27).

# Llamar a la función para los estados de Hidalgo (13) y Tabasco (27)
df_combinado <- procesar_estados(13, 27)

# Ver los primeros registros del DataFrame combinado
head(df_combinado)
##   Estado NoEst
## 1    hgo 13001
## 2    hgo 13002
## 3    hgo 13003
## 4    hgo 13004
## 5    hgo 13005
## 6    hgo 13006