# Cargar las librerías necesarias
library(readxl)
library(dplyr)
library(ggplot2)
# Cargar los datos desde un archivo Excel
datos <- read_excel("Climatico_El_Salvador.xlsx")
# Ver las primeras filas de los datos
head(datos)
## # A tibble: 6 × 16
## `Fecha y hora` `Temperatura máxima (°C)` `Temperatura mínima (°C)`
## <dttm> <dbl> <dbl>
## 1 2019-01-31 00:00:00 30.5 23.5
## 2 2019-02-28 00:00:00 32.2 21.7
## 3 2019-02-28 00:00:00 25.3 21.4
## 4 2019-03-31 00:00:00 31.0 22.0
## 5 2019-03-31 00:00:00 34.7 23.5
## 6 2019-04-30 00:00:00 30.4 24.5
## # ℹ 13 more variables: `Temperatura media (°C)` <dbl>,
## # `Precipitación (mm)` <dbl>, `Humedad (%)` <dbl>,
## # `Velocidad del viento (km/h)` <dbl>, `Dirección del viento (grados)` <dbl>,
## # `Presión atmosférica (hPa)` <dbl>, `Nivel de agua en ríos (m)` <dbl>,
## # `Índice de Calor` <dbl>, `Índice de Humedad` <dbl>,
## # `Eventos climáticos extremos` <chr>,
## # `Coordenadas geográficas (lat, lon)` <chr>, …
# Ver un resumen de los datos
summary(datos)
## Fecha y hora Temperatura máxima (°C)
## Min. :2019-01-31 00:00:00.00 Min. :25.17
## 1st Qu.:2019-10-31 00:00:00.00 1st Qu.:27.22
## Median :2021-04-30 00:00:00.00 Median :29.69
## Mean :2021-06-07 01:38:37.80 Mean :29.97
## 3rd Qu.:2022-10-31 00:00:00.00 3rd Qu.:32.51
## Max. :2024-04-30 00:00:00.00 Max. :34.92
## Temperatura mínima (°C) Temperatura media (°C) Precipitación (mm)
## Min. :18.03 Min. :20.10 Min. : 3.758
## 1st Qu.:19.50 1st Qu.:21.78 1st Qu.: 70.374
## Median :22.06 Median :24.88 Median :100.787
## Mean :21.68 Mean :24.81 Mean :104.682
## 3rd Qu.:23.45 3rd Qu.:27.31 3rd Qu.:147.737
## Max. :24.90 Max. :29.79 Max. :196.328
## Humedad (%) Velocidad del viento (km/h) Dirección del viento (grados)
## Min. :60.34 Min. : 0.06199 Min. : 3.0
## 1st Qu.:73.18 1st Qu.: 4.88851 1st Qu.:106.0
## Median :81.56 Median : 8.96286 Median :197.0
## Mean :81.42 Mean : 9.71862 Mean :195.4
## 3rd Qu.:92.27 3rd Qu.:13.44082 3rd Qu.:279.0
## Max. :99.65 Max. :19.76748 Max. :359.0
## Presión atmosférica (hPa) Nivel de agua en ríos (m) Índice de Calor
## Min. :1000 Min. :0.5232 Min. :20.28
## 1st Qu.:1006 1st Qu.:2.0504 1st Qu.:27.94
## Median :1011 Median :2.8204 Median :34.48
## Mean :1012 Mean :2.9756 Mean :34.95
## 3rd Qu.:1020 3rd Qu.:4.0063 3rd Qu.:43.19
## Max. :1025 Max. :4.9081 Max. :49.99
## Índice de Humedad Eventos climáticos extremos
## Min. :20.03 Length:73
## 1st Qu.:31.64 Class :character
## Median :41.66 Mode :character
## Mean :42.70
## 3rd Qu.:55.25
## Max. :69.79
## Coordenadas geográficas (lat, lon) Cobertura de nubes (%)
## Length:73 Min. :12.72
## Class :character 1st Qu.:35.84
## Mode :character Median :57.49
## Mean :54.84
## 3rd Qu.:74.45
## Max. :98.42
## Variabilidad climática
## Length:73
## Class :character
## Mode :character
##
##
##
# Calcular estadísticas básicas para temperatura máxima
summary(datos$`Temperatura máxima (°C)`)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 25.17 27.22 29.69 29.97 32.51 34.92
# Calcular estadísticas básicas para precipitación
summary(datos$`Precipitación (mm)`)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.758 70.374 100.787 104.682 147.737 196.328
# Definir los intervalos para las temperaturas máximas
breaks <- seq(floor(min(datos$`Temperatura máxima (°C)`)), ceiling(max(datos$`Temperatura máxima (°C)`)), by = 2)
# Crear un factor con los intervalos definidos
datos$TempMaxIntervalos <- cut(datos$`Temperatura máxima (°C)`, breaks, right = FALSE, include.lowest = TRUE)
# Contar la frecuencia en cada intervalo
frecuencias <- datos %>%
group_by(TempMaxIntervalos) %>%
summarise(Frecuencia = n(), .groups = 'drop')
# Dibujar el histograma con las etiquetas
ggplot(frecuencias, aes(x = TempMaxIntervalos, y = Frecuencia, fill = TempMaxIntervalos)) +
geom_col() +
geom_text(aes(label = Frecuencia), vjust = -0.3) +
labs(title = "Histograma de Temperatura Máxima por Intervalos",
x = "Intervalo de Temperatura Máxima (°C)",
y = "Frecuencia") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Ajustar el ángulo de las etiquetas del eje x para mejor visualización

#install.packages("plotly")
library(plotly)
# Crear un gráfico interactivo para la Temperatura máxima (°C)
p_temp_max <- plot_ly(data = datos, x = ~`Fecha y hora`, y = ~`Temperatura máxima (°C)`, type = 'scatter', mode = 'lines+markers',
text = ~paste('Temperatura Máxima:', `Temperatura máxima (°C)`, '°C'),
hoverinfo = 'text',
line = list(color = 'red')) %>%
layout(title = "Temperatura Máxima (°C) a lo Largo del Tiempo",
xaxis = list(title = "Fecha"),
yaxis = list(title = "Temperatura Máxima (°C)"))
# Mostrar el gráfico
p_temp_max
# Crear un gráfico interactivo para la Temperatura mínima (°C)
p_temp_min <- plot_ly(data = datos, x = ~`Fecha y hora`, y = ~`Temperatura mínima (°C)`, type = 'scatter', mode = 'lines+markers',
text = ~paste('Temperatura Mínima:', `Temperatura mínima (°C)`, '°C'),
hoverinfo = 'text',
line = list(color = 'green')) %>%
layout(title = "Temperatura Mínima (°C) a lo Largo del Tiempo",
xaxis = list(title = "Fecha"),
yaxis = list(title = "Temperatura Mínima (°C)"))
# Mostrar el gráfico
p_temp_min
# Crear un gráfico interactivo para la Temperatura media a lo largo del tiempo(°C)
p <- plot_ly(data = datos, x = ~`Fecha y hora`, y = ~`Temperatura media (°C)`, type = 'scatter', mode = 'lines+markers',
text = ~paste('Temperatura Media:', `Temperatura media (°C)`, '°C'),
hoverinfo = 'text',
line = list(color = 'blue')) %>%
layout(title = "Temperatura Media (°C) a lo Largo del Tiempo",
xaxis = list(title = "Fecha"),
yaxis = list(title = "Temperatura Media (°C)"))
# Mostrar el gráfico
p
# Crear un gráfico interactivo para la Precipitación (mm)
p_precipitacion <- plot_ly(data = datos, x = ~`Fecha y hora`, y = ~`Precipitación (mm)`, type = 'scatter', mode = 'lines+markers',
text = ~paste('Precipitación:', `Precipitación (mm)`, 'mm'),
hoverinfo = 'text',
line = list(color = 'blue')) %>%
layout(title = "Precipitación (mm) a lo Largo del Tiempo",
xaxis = list(title = "Fecha"),
yaxis = list(title = "Precipitación (mm)"))
# Mostrar el gráfico
p_precipitacion
# Crear un gráfico interactivo para la Humedad (%)
p_humedad <- plot_ly(data = datos, x = ~`Fecha y hora`, y = ~`Humedad (%)`, type = 'scatter', mode = 'lines+markers',
text = ~paste('Humedad:', `Humedad (%)`, '%'),
hoverinfo = 'text',
line = list(color = 'teal')) %>%
layout(title = "Humedad (%) a lo Largo del Tiempo",
xaxis = list(title = "Fecha"),
yaxis = list(title = "Humedad (%)"))
# Mostrar el gráfico
p_humedad
# Crear un gráfico interactivo para la Velocidad del viento (km/h)
p_velocidad_viento <- plot_ly(data = datos, x = ~`Fecha y hora`, y = ~`Velocidad del viento (km/h)`, type = 'scatter', mode = 'lines+markers',
text = ~paste('Velocidad del Viento:', `Velocidad del viento (km/h)`, 'km/h'),
hoverinfo = 'text',
line = list(color = 'purple')) %>%
layout(title = "Velocidad del Viento (km/h) a lo Largo del Tiempo",
xaxis = list(title = "Fecha"),
yaxis = list(title = "Velocidad del Viento (km/h)"))
# Mostrar el gráfico
p_velocidad_viento
# Crear un gráfico interactivo para la Dirección del viento (grados)
p_direccion_viento <- plot_ly(data = datos, x = ~`Fecha y hora`, y = ~`Dirección del viento (grados)`, type = 'scatter', mode = 'lines+markers',
text = ~paste('Dirección del Viento:', `Dirección del viento (grados)`, 'grados'),
hoverinfo = 'text',
line = list(color = 'orange')) %>%
layout(title = "Dirección del Viento (grados) a lo Largo del Tiempo",
xaxis = list(title = "Fecha"),
yaxis = list(title = "Dirección del Viento (grados)"),
yaxis2 = list(overlaying = "y", side = "right", range = c(0,360)))
# Mostrar el gráfico
p_direccion_viento
# Crear un gráfico interactivo para la Presión atmosférica (hPa)
p_presion_atmosferica <- plot_ly(data = datos, x = ~`Fecha y hora`, y = ~`Presión atmosférica (hPa)`, type = 'scatter', mode = 'lines+markers',
text = ~paste('Presión Atmosférica:', `Presión atmosférica (hPa)`, 'hPa'),
hoverinfo = 'text',
line = list(color = 'gray')) %>%
layout(title = "Presión Atmosférica (hPa) a lo Largo del Tiempo",
xaxis = list(title = "Fecha"),
yaxis = list(title = "Presión Atmosférica (hPa)"))
# Mostrar el gráfico
p_presion_atmosferica
# Crear un gráfico interactivo para el Nivel de agua en ríos (m)
p_nivel_agua <- plot_ly(data = datos, x = ~`Fecha y hora`, y = ~`Nivel de agua en ríos (m)`, type = 'scatter', mode = 'lines+markers',
text = ~paste('Nivel de Agua en Ríos:', `Nivel de agua en ríos (m)`, 'm'),
hoverinfo = 'text',
line = list(color = 'blue')) %>%
layout(title = "Nivel de Agua en Ríos (m) a lo Largo del Tiempo",
xaxis = list(title = "Fecha"),
yaxis = list(title = "Nivel de Agua en Ríos (m)"))
# Mostrar el gráfico
p_nivel_agua
# Crear un gráfico interactivo para el Índice de Calor
p_indice_calor <- plot_ly(data = datos, x = ~`Fecha y hora`, y = ~`Índice de Calor`, type = 'scatter', mode = 'lines+markers',
text = ~paste('Índice de Calor:', `Índice de Calor`),
hoverinfo = 'text',
line = list(color = 'red')) %>%
layout(title = "Índice de Calor a lo Largo del Tiempo",
xaxis = list(title = "Fecha"),
yaxis = list(title = "Índice de Calor"))
# Mostrar el gráfico
p_indice_calor
# Crear un gráfico interactivo para el Índice de Humedad
p_indice_humedad <- plot_ly(data = datos, x = ~`Fecha y hora`, y = ~`Índice de Humedad`, type = 'scatter', mode = 'lines+markers',
text = ~paste('Índice de Humedad:', `Índice de Humedad`),
hoverinfo = 'text',
line = list(color = 'green')) %>%
layout(title = "Índice de Humedad a lo Largo del Tiempo",
xaxis = list(title = "Fecha"),
yaxis = list(title = "Índice de Humedad"))
# Mostrar el gráfico
p_indice_humedad
# Crear un gráfico interactivo para la Cobertura de nubes (%)
p_cobertura_nubes <- plot_ly(data = datos, x = ~`Fecha y hora`, y = ~`Cobertura de nubes (%)`, type = 'scatter', mode = 'lines+markers',
text = ~paste('Cobertura de Nubes:', `Cobertura de nubes (%)`, '%'),
hoverinfo = 'text',
line = list(color = 'grey')) %>%
layout(title = "Cobertura de Nubes (%) a lo Largo del Tiempo",
xaxis = list(title = "Fecha"),
yaxis = list(title = "Cobertura de Nubes (%)"))
# Mostrar el gráfico
p_cobertura_nubes
# Gráfico de barras para eventos climáticos extremos
datos %>%
group_by(`Eventos climáticos extremos`) %>%
summarise(Frecuencia = n()) %>%
ggplot(aes(x = `Eventos climáticos extremos`, y = Frecuencia, fill = `Eventos climáticos extremos`)) +
geom_col() +
geom_text(aes(label = Frecuencia), vjust = -0.3) +
theme_minimal() +
labs(title = "Frecuencia de Eventos Climáticos Extremos", x = "Evento", y = "Frecuencia")

# Gráfico de barras para variabilidad climática
datos %>%
group_by(`Variabilidad climática`) %>%
summarise(Frecuencia = n()) %>%
ggplot(aes(x = `Variabilidad climática`, y = Frecuencia, fill = `Variabilidad climática`)) +
geom_col() +
geom_text(aes(label = Frecuencia), vjust = -0.3) +
theme_minimal() +
labs(title = "Frecuencia de Variabilidad Climática", x = "Variabilidad", y = "Frecuencia")

# Preparar los datos
datos_frecuencia <- datos %>%
group_by(`Fecha y hora`, `Eventos climáticos extremos`) %>%
summarise(Frecuencia = n(), .groups = 'drop') %>%
arrange(`Fecha y hora`)
# Crear el gráfico de frecuencias específicas por tiempo
ggplot(datos_frecuencia, aes(x = `Fecha y hora`, y = Frecuencia, color = `Eventos climáticos extremos`)) +
geom_line() +
geom_point() + # Opcional: añadir puntos para cada dato
theme_minimal() +
labs(title = "Frecuencia de Eventos Climáticos Extremos por Unidad de Tiempo",
x = "Fecha",
y = "Frecuencia",
color = "Tipo de Evento")

# Preparar los datos acumulativos
datos_acumulados <- datos %>%
group_by(`Fecha y hora`, `Eventos climáticos extremos`) %>%
summarise(Frecuencia = n(), .groups = 'drop') %>%
arrange(`Fecha y hora`) %>%
mutate(Acumulado = cumsum(Frecuencia)) # Acumular la frecuencia de eventos
# Crear el gráfico
ggplot(datos_acumulados, aes(x = `Fecha y hora`, y = Acumulado, color = `Eventos climáticos extremos`)) +
geom_line() +
theme_minimal() +
labs(title = "Tendencia de Eventos Climáticos Extremos a lo Largo del Tiempo", x = "Fecha", y = "Conteo Acumulativo")
