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