MinOx

Este informe presenta un análisis de los datos recopilados en el proyecto MinOx, que se enfoca en el monitoreo de la concentración de gases mediante sensores IoT. Se explorarán las mediciones de tres sensores (MQ135, MQ7 y MiCS5524) a lo largo de un período de tiempo específico.

El análisis utilizará diversas técnicas de visualización de datos, incluyendo gráficos de dispersión, histogramas y gráficos comparativos, para comprender la relación entre la hora del día y las mediciones de los sensores, identificar los valores más altos de concentración de gases y analizar la distribución de las mediciones a lo largo del tiempo.

##Librerias

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

Carga y limpieza de los datos

Los datos utilizados en este análisis fueron recopilados como parte del proyecto MinOx, orientado al monitoreo de la concentración de gases utilizando sensores IoT. El conjunto de datos comprende mediciones obtenidas de tres sensores específicos: MQ135, MQ7 y MiCS5524. Cada medición incluye información sobre la fecha y la hora en que fue registrada.

Los datos se encuentran en formato CSV y han sido procesados para eliminar registros con mediciones nulas o cero, garantizando la calidad y la integridad de los datos utilizados en el análisis.

# Leer el archivo CSV
data <- read_csv("C:/R/MinOx.csv")
## Rows: 10000 Columns: 5
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (1): id
## dbl  (3): MQ135, MQ7, MiCS5524
## dttm (1): Fecha
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Convertir la columna Fecha a tipo datetime
data$Fecha <- as.POSIXct(data$Fecha, format="%Y-%m-%d %H:%M:%S")

# Análisis exploratorio de datos (EDA)

summary(data)
##       id                Fecha                            MQ135       
##  Length:10000       Min.   :2024-04-24 00:50:20.82   Min.   :  0.00  
##  Class :character   1st Qu.:2024-05-18 04:22:42.27   1st Qu.:  0.00  
##  Mode  :character   Median :2024-05-21 16:57:52.58   Median : 37.00  
##                     Mean   :2024-05-21 03:37:30.99   Mean   : 34.92  
##                     3rd Qu.:2024-05-22 07:51:49.75   3rd Qu.: 49.00  
##                     Max.   :2024-05-27 13:32:59.14   Max.   :334.00  
##       MQ7            MiCS5524   
##  Min.   : 110.0   Min.   :  43  
##  1st Qu.: 336.0   1st Qu.: 135  
##  Median : 402.0   Median : 176  
##  Mean   : 406.8   Mean   :1646  
##  3rd Qu.: 463.0   3rd Qu.:4095  
##  Max.   :1753.0   Max.   :4095
# Eliminar filas con valores en 0 para los sensores MQ135, MQ7 y MiCS5524
data_clean <- data %>%
  filter(MQ135 != 0, MQ7 != 0, MiCS5524 != 0)

# Ver el dataframe limpio
head(data_clean)
# Verificar el dataframe limpio
summary(data_clean)
##       id                Fecha                            MQ135       
##  Length:7033        Min.   :2024-04-24 00:50:20.82   Min.   :  1.00  
##  Class :character   1st Qu.:2024-05-21 07:26:55.01   1st Qu.: 35.00  
##  Mode  :character   Median :2024-05-21 17:53:27.64   Median : 45.00  
##                     Mean   :2024-05-21 07:49:31.50   Mean   : 49.65  
##                     3rd Qu.:2024-05-22 04:21:50.74   3rd Qu.: 55.00  
##                     Max.   :2024-05-27 11:42:16.40   Max.   :334.00  
##       MQ7            MiCS5524     
##  Min.   : 176.0   Min.   :  43.0  
##  1st Qu.: 390.0   1st Qu.: 124.0  
##  Median : 437.0   Median : 150.0  
##  Mean   : 445.9   Mean   : 642.3  
##  3rd Qu.: 477.0   3rd Qu.: 180.0  
##  Max.   :1753.0   Max.   :4095.0
str(data_clean)
## spc_tbl_ [7,033 × 5] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ id      : chr [1:7033] "YjhMskIwYGSIIGFjrhgm" "r1BqDOwMqsV5KSI48e6r" "U5WnHNJM70vC97afave6" "NKN0Wd3X5jPQ616Z1qQT" ...
##  $ Fecha   : POSIXct[1:7033], format: "2024-04-24 00:50:20" "2024-04-24 00:50:51" ...
##  $ MQ135   : num [1:7033] 134 89 65 62 307 185 144 128 112 97 ...
##  $ MQ7     : num [1:7033] 711 653 587 572 1753 ...
##  $ MiCS5524: num [1:7033] 4095 1486 4095 4095 2969 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   id = col_character(),
##   ..   Fecha = col_datetime(format = ""),
##   ..   MQ135 = col_double(),
##   ..   MQ7 = col_double(),
##   ..   MiCS5524 = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>

#Extraer y convertir la columna fecha del dataset Se da formato a la columna para su posterior uso en diferentes graficas

data_clean$Date <- as.Date(data_clean$Fecha)
data_clean$Hour <- format(data_clean$Fecha, "%H:%M:%S")

data_clean$Hour <- as.POSIXct(data_clean$Hour, format="%H:%M:%S")

##Graficacas de dispersion Graficas de dispersion entre la hora del dia y la medicion del sensor, esto para ver a que hora se encontro mayor concentracion de gases a lo largo del dia, esto para tener en cuenta los horarios donde es mas peligroso

#MQ-135

ggplot(data_clean, aes(x = Hour, y = MQ135)) +
  geom_point(alpha = 0.5, color = "blue") +
  labs(title = "Dispersión de las mediciones de MQ135 a lo largo del día",
       x = "Hora del día",
       y = "MQ135") +
  theme_minimal()

#MQ-7

ggplot(data_clean, aes(x = Hour, y = MQ7)) +
  geom_point(alpha = 0.5, color = "red") +
  labs(title = "Dispersión de las mediciones de MQ7 a lo largo del día",
       x = "Hora del día",
       y = "MQ7") +
  theme_minimal()

#MiCS-5524

ggplot(data_clean, aes(x = Hour, y = MiCS5524)) +
  geom_point(alpha = 0.5, color = "green") +
  labs(title = "Dispersión de las mediciones de MiCS5524 a lo largo del día",
       x = "Hora del día",
       y = "MiCS5524") +
  theme_minimal()

##Histogramas Se graficaron histogramas para ver los valores mas altos a lo largo de la medicion esto para ver cual fue la mayor concentracion de gases

#Histograma de las mediciones de MQ135

ggplot(data_clean, aes(x = MQ135)) +
  geom_histogram(binwidth = 10, fill = "blue", alpha = 0.7) +
  labs(title = "Histograma de las mediciones de MQ135",
       x = "MQ135",
       y = "Frecuencia") +
  theme_minimal()

#Histograma de las mediciones de MQ7

ggplot(data_clean, aes(x = MQ7)) +
  geom_histogram(binwidth = 10, fill = "red", alpha = 0.7) +
  labs(title = "Histograma de las mediciones de MQ7",
       x = "MQ7",
       y = "Frecuencia") +
  theme_minimal()

#Histograma de las mediciones de MiCS5524

ggplot(data_clean, aes(x = MiCS5524)) +
  geom_histogram(binwidth = 100, fill = "green", alpha = 0.7) +
  labs(title = "Histograma de las mediciones de MiCS5524",
       x = "MiCS5524",
       y = "Frecuencia") +
  theme_minimal()

##Graficas comparativas Se crearon graficas comparativas para ver cual de los 3 sensores tenia mayores mediciones, esto para determinar cual gas tiene mayor concentracion en el area y asi poder tomar medidas al respecto

Crear un dataframe en formato largo para facilitar la comparación

data_long <- data_clean %>%
  pivot_longer(cols = c(MQ135, MQ7, MiCS5524), 
               names_to = "Sensor", 
               values_to = "Medicion")

#Grafica

ggplot(data_long, aes(x = Fecha, y = Medicion, color = Sensor)) +
  geom_line(alpha = 0.7) +
  labs(title = "Comparación de las mediciones de los sensores a lo largo del tiempo",
       x = "Fecha",
       y = "Medición") +
  theme_minimal()

#Comparación de la variabilidad de las mediciones de los sensores

# Gráfica de boxplot comparativa
ggplot(data_long, aes(x = Sensor, y = Medicion, fill = Sensor)) +
  geom_boxplot(alpha = 0.7) +
  labs(title = "Comparación de la variabilidad de las mediciones de los sensores",
       x = "Sensor",
       y = "Medición") +
  theme_minimal()

##Conclucion

En este estudio, hemos explorado los datos del proyecto MinOx para comprender mejor la concentración de gases a lo largo del tiempo. Mediante gráficos y visualizaciones, identificamos los momentos del día con mayores concentraciones de gases para cada sensor. Esta información puede ser útil para comprender patrones de contaminación del aire y tomar medidas para abordarlos en el futuro.

Gracias a este proyecto fue mas facil comprender la manipulacion y estructuracion de datos masivos, esto para su posterior analiis presentado en diferentes maneras.