#UNIVERSIDAD CENTRAL DEL ECUADOR #ANALISIS ESTADISTICO DE LA CALIDAD
DE AIRE EN LA INDIA
# Lista de paquetes necesarios
required_packages <- c("dplyr", "ggplot2", "kableExtra", "gt", "magrittr", "tidyr")
# Instalar los paquetes que faltan
new_packages <- required_packages[!(required_packages %in% installed.packages()[,"Package"])]
if(length(new_packages)) install.packages(new_packages)
# Cargar todos los paquetes necesarios
lapply(required_packages, library, character.only = TRUE)
## [[1]]
## [1] "dplyr" "stats" "graphics" "grDevices" "utils" "datasets"
## [7] "methods" "base"
##
## [[2]]
## [1] "ggplot2" "dplyr" "stats" "graphics" "grDevices" "utils"
## [7] "datasets" "methods" "base"
##
## [[3]]
## [1] "kableExtra" "ggplot2" "dplyr" "stats" "graphics"
## [6] "grDevices" "utils" "datasets" "methods" "base"
##
## [[4]]
## [1] "gt" "kableExtra" "ggplot2" "dplyr" "stats"
## [6] "graphics" "grDevices" "utils" "datasets" "methods"
## [11] "base"
##
## [[5]]
## [1] "magrittr" "gt" "kableExtra" "ggplot2" "dplyr"
## [6] "stats" "graphics" "grDevices" "utils" "datasets"
## [11] "methods" "base"
##
## [[6]]
## [1] "tidyr" "magrittr" "gt" "kableExtra" "ggplot2"
## [6] "dplyr" "stats" "graphics" "grDevices" "utils"
## [11] "datasets" "methods" "base"
# Estadística Descriptiva
# Llumitasig Daniela
# 19/11/2025
# Cargar las librerías necesarias
library(gt)
library(dplyr)
# Cargar los datos
datos <- read.csv("city_day (2).csv", header = TRUE, dec = ".", sep = ",")
# Tablas Cualitativas Nominales
# Estado
State <- datos$State
# Tabla de distribución de frecuencia
TDF_State <- data.frame(table(State))
ni <- TDF_State$Freq
hi <- round((ni / sum(ni)) * 100, 2)
# Crear la tabla con las frecuencias y los porcentajes
State <- TDF_State$State
TDF_State <- data.frame(State, ni, hi)
# Agregar fila total
Summary <- data.frame(State = "TOTAL", ni = sum(ni), hi = 100)
TDF_State_suma <- rbind(TDF_State, Summary)
# Cambiar nombres de las columnas
colnames(TDF_State_suma) <- c("State", "ni", "hi(%)")
View(TDF_State_suma)
TDF_State_suma %>%
gt() %>%
# Agregar el título y subtítulo a la tabla
tab_header(
title = md("*Tabla Nro. 2*"),
subtitle = md("Distribución de frecuencias de registros de calidad de aire por Estado")
) %>%
# Agregar la fuente
tab_source_note(
md("**Fuente:** Datos procesados por el autor a partir del archivo *city_day.csv*")
) %>%
# Estilo para los bordes de las celdas
tab_style(
style = cell_borders(
sides = c("top", "bottom"),
color = "black",
weight = px(2),
style = "solid"
),
locations = cells_column_labels()
) %>%
tab_options(
table.border.top.color = "black",
table.border.bottom.color = "black",
table.border.top.style = "solid",
table.border.bottom.style = "solid",
column_labels.border.top.color = "black",
column_labels.border.bottom.color = "black",
column_labels.border.bottom.width = px(2),
row.striping.include_table_body = TRUE,
heading.border.bottom.color = "black",
heading.border.bottom.width = px(2),
table_body.hlines.color = "gray",
table_body.border.bottom.color = "black"
)
| Tabla Nro. 2 |
| Distribución de frecuencias de registros de calidad de aire por Estado |
| State |
ni |
hi(%) |
| Andhra Pradesh |
2413 |
8.17 |
| Assam |
502 |
1.70 |
| Bihar |
1858 |
6.29 |
| Chandigarh |
304 |
1.03 |
| Delhi |
2009 |
6.80 |
| Gujarat |
2009 |
6.80 |
| Haryana |
1679 |
5.69 |
| Jharkhand |
1169 |
3.96 |
| Karnataka |
2009 |
6.80 |
| Kerala |
1436 |
4.86 |
| Madhya Pradesh |
289 |
0.98 |
| Maharashtra |
2009 |
6.80 |
| Meghalaya |
310 |
1.05 |
| Mizoram |
113 |
0.38 |
| Odisha |
1863 |
6.31 |
| Punjab |
1221 |
4.13 |
| Rajasthan |
1114 |
3.77 |
| Tamil Nadu |
2395 |
8.11 |
| Telangana |
2006 |
6.79 |
| Uttar Pradesh |
2009 |
6.80 |
| West Bengal |
814 |
2.76 |
| TOTAL |
29531 |
100.00 |
| Fuente: Datos procesados por el autor a partir del archivo city_day.csv |
# Se agruparon los estados en diferentes zonas para simplificar y organizar los datos, ya que el número de valores que puede tomar la variable 'State' excedió el límite de representaciones posibles en un diagrama de barras.
# Crear columna Zona usando ifelse
# Crear el data frame con los 21 estados
tabla <- data.frame(
State = c(
"Andhra Pradesh", "Assam", "Bihar", "Chandigarh", "Delhi", "Gujarat",
"Haryana", "Jharkhand", "Karnataka", "Kerala", "Madhya Pradesh", "Maharashtra",
"Meghalaya", "Mizoram", "Odisha", "Punjab", "Rajasthan", "Tamil Nadu",
"Telangana", "Uttar Pradesh", "West Bengal"
)
)
# Asignar las zonas correspondientes a cada estado usando ifelse
tabla$Zona <- ifelse(tabla$State %in% c("Uttar Pradesh", "Haryana", "Delhi"),
"Norte",
ifelse(tabla$State %in% c("Gujarat", "Rajasthan", "Maharashtra", "Goa", "Chandigarh", "Punjab"),
"Oeste",
ifelse(tabla$State %in% c("Tamil Nadu", "Kerala"),
"Sur",
ifelse(tabla$State %in% c("Bihar", "Odisha", "Assam", "West Bengal", "Jharkhand", "Meghalaya", "Mizoram", "Tripura"),
"Este",
ifelse(tabla$State %in% c("Madhya Pradesh", "Telangana", "Karnataka", "Andhra Pradesh"),
"Centro", NA)))))
# Verificar la asignación correcta de zonas
table(tabla$State, tabla$Zona)
##
## Centro Este Norte Oeste Sur
## Andhra Pradesh 1 0 0 0 0
## Assam 0 1 0 0 0
## Bihar 0 1 0 0 0
## Chandigarh 0 0 0 1 0
## Delhi 0 0 1 0 0
## Gujarat 0 0 0 1 0
## Haryana 0 0 1 0 0
## Jharkhand 0 1 0 0 0
## Karnataka 1 0 0 0 0
## Kerala 0 0 0 0 1
## Madhya Pradesh 1 0 0 0 0
## Maharashtra 0 0 0 1 0
## Meghalaya 0 1 0 0 0
## Mizoram 0 1 0 0 0
## Odisha 0 1 0 0 0
## Punjab 0 0 0 1 0
## Rajasthan 0 0 0 1 0
## Tamil Nadu 0 0 0 0 1
## Telangana 1 0 0 0 0
## Uttar Pradesh 0 0 1 0 0
## West Bengal 0 1 0 0 0
# Contamos las frecuencias de cada zona en la columna "Zona"
TDF_zona <- data.frame(table(tabla$Zona))
colnames(TDF_zona) <- c("Zona", "ni")
# Calculamos el porcentaje de cada zona con respecto al total
TDF_zona$hi <- round((TDF_zona$ni / sum(TDF_zona$ni)) * 100, 2)
print(TDF_zona)
## Zona ni hi
## 1 Centro 4 19.05
## 2 Este 7 33.33
## 3 Norte 3 14.29
## 4 Oeste 5 23.81
## 5 Sur 2 9.52
install.packages("kableExtra")
library(kableExtra)
# Crear la tabla con las frecuencias y porcentajes
TDF_zona <- data.frame(table(tabla$Zona))
colnames(TDF_zona) <- c("Zona", "ni")
# Calculamos el porcentaje de cada zona con respecto al total
TDF_zona$hi <- round((TDF_zona$ni / sum(TDF_zona$ni)) * 100, 2)
# Crear la fila de total
Sumatoria <- data.frame(Zona = "TOTAL", ni = sum(TDF_zona$ni), hi = 100)
# Combinar la fila total con el resto de la tabla
TDF_zona_final <- rbind(TDF_zona, Sumatoria)
# Nombrar columnas
colnames(TDF_zona_final) <- c("Zona", "ni", "hi (%)")
# Mostrar la tabla con formato y título
library(knitr)
library(kableExtra)
kable(TDF_zona_final, align = 'c',
caption = "Tabla N°3: Distribución de Frecuencias de las Zonas
agrupadas en el estudio de la Calidad de Aire en la India") %>%
kable_styling(full_width = FALSE, position = "center",
bootstrap_options = c("striped", "hover", "condensed"))
Tabla N°3: Distribución de Frecuencias de las Zonas agrupadas en el
estudio de la Calidad de Aire en la India
|
Zona
|
ni
|
hi (%)
|
|
Centro
|
4
|
19.05
|
|
Este
|
7
|
33.33
|
|
Norte
|
3
|
14.29
|
|
Oeste
|
5
|
23.81
|
|
Sur
|
2
|
9.52
|
|
TOTAL
|
21
|
100.00
|
# Diagrama de barras locales
# Eliminar la fila "TOTAL" de la tabla
TDF_zonas_sintotal <- TDF_zona_final[TDF_zona_final$Zona != "TOTAL", ]
barplot(TDF_zonas_sintotal$ni,
main = "Gráfica N°1: Distribución de las zonas agrupadas
en el Estudio de la Calidad de Aire en la India",
xlab = "Zona",
ylab = "Cantidad",
col = "green",
ylim = c(0, 10),
las = 2,
cex.names = 0.6,
names.arg = TDF_zonas_sintotal$Zona)

# Diagrama de barras con los porcentajes
barplot(TDF_zonas_sintotal$hi,
main = "Gráfica N°2: Distribución de las zonas agrupadas
en el Estudio de la Calidad de Aire en la India",
xlab = "Zona",
ylab = "Porcentaje (%)",
col = "orange",
ylim = c(0,40),
las = 2,
cex.names = 0.6,
names.arg = TDF_zonas_sintotal$Zona)

# Diagrama de barras global
barplot(TDF_zonas_sintotal$ni,
main = "Gráfica N°3: Distribución de los estados
agrupados por zona en el Estudio de la Calidad de Aire en la India",
xlab = "Región",
ylab = "Cantidad",
col = "yellow",
ylim = c(0,4000),
las=2,
cex.names = 0.6,
names.arg = TDF_zonas_sintotal$Zona)

#Diagrama de barras con los procentajes (Global)
barplot(TDF_zonas_sintotal$hi,
main = "Gráfica N°4: Distribución de los estados
agrupados por ona en el Estudio de la Calidad de Aire en la India",
xlab = "Región",
ylab = "Porcentaje (%)",
col = "red",
ylim = c(0,100),
las = 3,
cex.names = 0.6,
names.arg = TDF_zonas_sintotal$Zona)

# Diagrama circular
labels_info <- sprintf("%.2f%%", TDF_zonas_sintotal$hi)
pie(TDF_zonas_sintotal$hi,
main = "Gráfica N°5: Distribución de los estados agrupados
por zona en el Estudio de la Calidad de Aire en la India",
radius = 1.0,
labels = labels_info,
col = heat.colors(length(TDF_zonas_sintotal$hi)),
cex = 0.9,
cex.main = 1)
# Añadir la leyenda
legend("topright",
legend = TDF_zonas_sintotal$Zona,
fill = heat.colors(length(TDF_zonas_sintotal$hi)),
cex = 0.8,
title = "Leyenda")
