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.
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