Librerías para leer archivo CSV

library(readxl)
## Warning: package 'readxl' was built under R version 4.3.3
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union

Lectura del archivo CSV

En esta parte lo que prácticamente realiza es leer el archivo CSV que contiene todos los datos generados por el dispositivo y extraídos de la API del mismo dispositivo. La siguiente línea lo que hace es eliminar las 4 primera filas principales para que de esta forma no haya problema en la elaboración de las gráficas.

GraficaTierra <- read.csv("C:/R/api_tierra_limpio.csv")
GraficaTierra <- GraficaTierra %>% slice(-1:-4)
View(GraficaTierra)

Librerías para creación de gráficos

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3
library(plotly)
## Warning: package 'plotly' was built under R version 4.3.3
## 
## 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

Librería necesaria para formato de fecha

library(lubridate)
## Warning: package 'lubridate' was built under R version 4.3.3
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union

Creación de función para formato de fecha

convertir_hora <- function(data) {
  data %>%
    mutate(fecha = ymd_hms(fecha),  # Convertir la cadena de caracteres de fecha a fecha y hora
           mes_dia = format(fecha, "%m/%d"))  # Extraer el mes y día
}

Creación de gráfico para el campo Temperatura del suelo

Las temperaturas del suelo varían aproximadamente entre 24°C y 36°C. Esto sugiere que hay una alteración considerable en las temperaturas del suelo registradas. La temperatura del suelo de 30°C tiene la frecuencia más alta, seguida de las temperaturas alrededor de 28°C y 26°C. Esto indica que la mayoría de las observaciones se concentran en estos rangos de temperatura. La alta frecuencia de temperaturas que están en los 30°C implica que esta temperatura es común durante el periodo de tiempo, lo cual indica que las condiciones climáticas predominantes en la región de los Llanos es mayormente alta la temperatura.

GraficaTierra <- convertir_hora(GraficaTierra)
  
  ggplot(GraficaTierra, aes(x = mes_dia, y = Temp_suelo)) +
    geom_point(color = "#800020", alpha = 0.7) +  # Usar color naranja para los puntos
    labs(title = "Temperatura del suelo",
         x = "Fecha",
         y = "Temperatura (C°)") +
    theme_minimal()

Gráfica de Temperatura del aire

La gráfica muestra que las temperaturas alrededor de 25°C y 35°C tienen las frecuencias más altas. Esto indica que estas temperaturas son comunes en el periodo Mayo - Junio. La alta frecuencia de temperaturas alrededor de 25°C y 35°C puede implicar ciertas condiciones climáticas frecuentes en la región. Ya que esto nos muestra que podría ser indicativo de un clima en los que hay días calurosos y noches frescas.

  #redondeamos los datos
GraficaTierra$temp <- round(GraficaTierra$temp)

#creamos un vector
colores <- ifelse(GraficaTierra$temp > 30, "#E74C3C", "#3498DB")

ggplot(GraficaTierra, aes(x = temp, fill = colores)) +
  geom_bar() +  
  labs(title = "Frecuencia de Temperatura",
       x = "Temperatura del Aire (°C)",
       y = "Frecuencia") +  
  scale_fill_identity() +  
  theme_minimal()  

Gráfica en relación entre la temperatura del suelo y del aire

La gráfica muestra picos y caídas. Estas alteraciones podrían deberse a cambios ambientales, como el paso de nubes, cambios en la radiación solar, o eventos climáticos específicos. Lo cual con el uso de este tipo de grafico nos proporciona una visión detallada de cómo varían junta la temperatura del suelo y del aire a lo largo del tiempo, revelando patrones, correlaciones y posibles diferencias que son importantes para el análisis climático y ambiental.

  fig <- plot_ly() %>%
    add_trace(data = GraficaTierra, x = ~seq_along(Temp_suelo), y = ~Temp_suelo, type = 'scatter', mode = 'lines',
              name = 'Temperatura del suelo', line = list(color = 'blue')) %>%
    add_trace(data = GraficaTierra, x = ~seq_along(temp), y = ~temp, type = 'scatter', mode = 'lines',
              name = 'Temperatura del aire', line = list(color = 'red'))
  
  #etiquetas y titulos
  fig <- fig %>% layout(
    title = 'Relación entre la temperatura del suelo y del aire',
    xaxis = list(title = 'Tiempo'),
    yaxis = list(title = 'Temperatura (°C)'),
    legend = list(title = list(text = 'Variables'))
  )
  
  fig

Libreria necesaria para grafico en 3D

library(MASS)
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:plotly':
## 
##     select
## The following object is masked from 'package:dplyr':
## 
##     select

Grafica 3D Densidad entre temperatura de aire y suelo

El gráfico muestra la densidad de la temperatura, que es más alta cuando la temperatura del aire y del suelo son similares. Ya que el aire caliente es menos denso que el aire frío. La densidad también es más alta cuando la temperatura del suelo es más alta que la temperatura del aire. Esto se debe a que el suelo absorbe más calor del sol que del aire.

kd <- with(GraficaTierra, kde2d(temp, Temp_suelo, n = 50))

#creamos el gráfico de superficie en 3D
fig <- plot_ly(x = kd$x, y = kd$y, z = kd$z) %>% add_surface()

#añadimos los títulos y etiquetas
fig <- fig %>% layout(
  title = "Densidad de Temperatura del Aire y del Suelo",
  scene = list(
    xaxis = list(title = "Temperatura del Aire (°C)"),
    yaxis = list(title = "Temperatura del Suelo (°C)"),
    zaxis = list(title = "Densidad")
  )
)

#visualizamos
fig

Grafica de pastel del porcentaje total de dias lluviosos

La gráfica nos muestra que el 99.5% de los días no está lloviendo, mientras que solo el 0.509% de los días sí está lloviendo. Lo cual nos da a entender que en la temporada en la que estuvo el dispositivo funcionando.

#calculamos la frecuencia total de los días lluviosos y no lluviosos
frecuencia_total <- GraficaTierra %>%
  mutate(lluvia = ifelse(lluvia == "No esta lloviendo", "No está lloviendo", "Está lloviendo")) %>%
  count(lluvia) %>%
  mutate(porcentaje = n / sum(n) * 100)  #calculamos porcentaje

#creamos grafico de pastel
plot_ly(frecuencia_total, labels = ~lluvia, values = ~porcentaje, type = 'pie', marker = list(colors = c("#3498DB", "#F39C12"))) %>%
  layout(title = "Distribución de días de lluvia",
         showlegend = TRUE,
         yaxis = list(title = "Porcentaje"))

Grafica de frecuencia de humedad

En cuanto a esta grafica, hay picos significativos de frecuencia en el rango de 0 a 5, lo cual quiere decir que los valores de humedad más bajos son los más comunes. Las escalas de colores proporciona distinguir las frecuencias, donde los colores más claros representan frecuencias más altas, mientras que los colores más oscuros representan frecuencias más bajas.

#calculamos frecuencia
frecuencia_humedad <- GraficaTierra %>%
  count(hall) %>%
  rename(frecuencia = n)

#creamos matriz
humedad_vals <- unique(frecuencia_humedad$hall)
frecuencia <- matrix(0, nrow = length(humedad_vals), ncol = length(humedad_vals))
for (i in seq_along(humedad_vals)) {
  for (j in seq_along(humedad_vals)) {
    frecuencia[i, j] <- ifelse(i == j, frecuencia_humedad$frecuencia[frecuencia_humedad$hall == humedad_vals[i]], 0)
  }
}


fig <- plot_ly(
  z = ~frecuencia,
  type = 'surface'
) %>%
  layout(
    title = "Frecuencia de Humedad",
    scene = list(
      xaxis = list(title = "Humedad (hall)"),
      yaxis = list(title = "Humedad (hall)"),
      zaxis = list(title = "Frecuencia")
    )
  )


fig

Diagrama de dispersion entre Temperatura y Huemdad

La gráfica de dispersión tiene relacion en cuanto a la temperatura y la humedad, con una mayor dispersión de datos en rangos medios y una concentración más baja de humedad a temperaturas más altas. Esta información es valiosa ya que para nosostros es posible analizar patrones climáticos y entender lo que esta pasando entre estas dos variables.

plot_ly(data = GraficaTierra, x = ~hall, y = ~temp, type = "scatter", mode = "markers", 
        marker = list(color = "#52BE80", opacity = 0.7)) %>%
  layout(title = "Relación entre Temperatura (C°) y Humedad",
         xaxis = list(title = "Temperatura (C°)"),
         yaxis = list(title = "Humedad (%)"),
         showlegend = FALSE)

Grafica 3D en relacion a Temperatura, Temperatura del suelo y Humedad

Se puede observar que a medida que aumenta la humedad, la temperatura del suelo tiende a disminuir. A medida que aumenta la temperatura del aire, la temperatura del suelo también tiende a aumentar.

# Crear el gráfico 3D
fig <- plot_ly(GraficaTierra, x = ~temp, y = ~hall, z = ~Temp_suelo, type = 'scatter3d', mode = 'markers',
               marker = list(size = 5, color = ~temp, colorscale = 'Viridis', opacity = 0.8)) %>%
  layout(title = "Gráfico 3D",
         scene = list(
           xaxis = list(title = "Temperatura (°C)"),
           yaxis = list(title = "Humedad (%)"),
           zaxis = list(title = "Temperatura del suelo (C°)")
         ))

fig