# 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")