title: “ESTUDIO ESTADÍSTICO DE LA CALIDAD DEL AIRE EN INDIA” output: html_notebook — # UNIVERSIDAD CENTRAL DEL ECUADOR ### PROYECTO:ESTUDIO ESTADÍSTICO DE LA CALIDAD DEL AIRE EN INDIA ### FECHA: 21/11/2025
#Estadística Descriptiva
#Ariana Viteri
#07/11/2025
# Cargar librerías necesarias
library(gt)
# 0. Cargar el dataframe
TDFDate <- read.csv("~/ariana tercer semestre/Estadistica/city_day.csv", header = TRUE)
# 1. Preparación de Datos: Convertir a formato de fecha R
TDFDate$Date_Convertida <- as.Date(TDFDate$Date, format = "%d/%m/%Y")
# 2. Agrupación por Año:
grupos_Anio <- format(TDFDate$Date_Convertida, format = "%Y")
grupos_Anio_limpio <- grupos_Anio[!is.na(grupos_Anio)]
# 3. Cálculo de Frecuencias (ni)
tabla_frecuencia <- as.data.frame(table(grupos_Anio_limpio))
# 👉 AQUI AÑADIMOS LA JERARQUÍA DESCENDENTE (2020 → 2015)
tabla_frecuencia <- tabla_frecuencia[order(-as.numeric(as.character(tabla_frecuencia$grupos_Anio_limpio))), ]
# 4. Asignación de Variables
Anio <- tabla_frecuencia$grupos_Anio_limpio
ni <- tabla_frecuencia$Freq
# 5. Cálculos Derivados (Frecuencias relativas y acumuladas)
hi <- ni / sum(ni) * 100
Ni_asc <- cumsum(ni)
Ni_dsc <- rev(cumsum(rev(ni)))
Hi_asc <- round(cumsum(hi), 2)
Hi_dsc <- round(rev(cumsum(rev(hi))), 2)
# 6. Crear la Tabla de Distribución de Frecuencias Agrupadas
TDFAnioFin <- data.frame(Anio, ni, hi, Ni_asc, Ni_dsc, Hi_asc, Hi_dsc)
# --- INCLUSIÓN DE LA FILA TOTAL ---
total_ni <- sum(ni)
total_hi <- sum(hi)
# 7. CREACIÓN DE TDFAnioCompleto (La variable que gt necesita)
TDFAnioCompleto <- rbind(TDFAnioFin,
data.frame(Anio = "Total",
ni = total_ni,
hi = total_hi,
Ni_asc = NA,
Ni_dsc = NA,
Hi_asc = NA,
Hi_dsc = NA))
# =======================================================
# VISUALIZACIÓN CON GT
# =======================================================
TDFAnioCompleto %>%
gt() %>%
fmt_number(
columns = c(hi, Hi_asc, Hi_dsc),
decimals = 2,
suffix = "%"
) %>%
tab_header(
title = md("**Tabla Nro. 4**"),
subtitle = md("Tabla de distribución de frecuencias de los datos agrupados por **Año**")
) %>%
cols_label(
Anio = "Año",
ni = html("n<sub>i</sub>"),
hi = html("h<sub>i</sub> (%)"),
Ni_asc = html("N<sub>i</sub> asc"),
Ni_dsc = html("N<sub>i</sub> dsc"),
Hi_asc = html("H<sub>i</sub> asc (%)"),
Hi_dsc = html("H<sub>i</sub> dsc (%)")
) %>%
tab_source_note(
source_note = md("Fuente: Datos procesados de https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india")
) %>%
tab_style(
style = cell_borders(sides = "left", color = "black", weight = px(2), style = "solid"),
locations = cells_body()
) %>%
tab_style(
style = cell_borders(sides = "right", color = "black", weight = px(2), style = "solid"),
locations = cells_body()
) %>%
tab_style(
style = cell_borders(sides = "left", color = "black", weight = px(2), style = "solid"),
locations = cells_column_labels()
) %>%
tab_style(
style = cell_borders(sides = "right", 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. 4 | ||||||
| Tabla de distribución de frecuencias de los datos agrupados por Año | ||||||
| Año | ni | hi (%) | Ni asc | Ni dsc | Hi asc (%) | Hi dsc (%) |
|---|---|---|---|---|---|---|
| 2020 | 4646 | 15.73 | 4646 | 29531 | 15.73 | 100.00 |
| 2019 | 7446 | 25.21 | 12092 | 24885 | 40.95 | 84.27 |
| 2018 | 6471 | 21.91 | 18563 | 17439 | 62.86 | 59.05 |
| 2017 | 4689 | 15.88 | 23252 | 10968 | 78.74 | 37.14 |
| 2016 | 3478 | 11.78 | 26730 | 6279 | 90.52 | 21.26 |
| 2015 | 2801 | 9.48 | 29531 | 2801 | 100.00 | 9.48 |
| Total | 29531 | 100.00 | NA | NA | NA | NA |
| Fuente: Datos procesados de https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india | ||||||
# DIAGRAMA DE BARRAS (ya con años en orden descendente)
barplot(TDFAnioFin$ni,
main = "Gráfico Nº4.1: Frecuencia de la muestra distribuida por año en la India 2015-2020",
xlab = "Año de la Muestra",
ylab = "Frecuencia (Cantidad de Días)",
names.arg = TDFAnioFin$Anio,
las = 1,
col = "skyblue")
# 2. DIAGRAMA DE BARRAS DE FRECUENCIA ABSOLUTA (ni) - Global
limite_y <- sum(TDFAnioFin$ni) # Recalcula el límite Y (el total de la muestra)
barplot(TDFAnioFin$ni,
main = "Gráfico Nº4.2: Frecuencia de la muestra distribuida por año en la India 2015-2020",
xlab = "Año",
ylab = "Frecuencia (Cantidad de Días)",
names.arg = TDFAnioFin$Anio,
las = 1,
col = "darkblue",
ylim = c(0, limite_y)) # Establece el eje Y desde 0 hasta el total
# DIAGRAMA DE BARRAS DE FRECUENCIA RELATIVA (hi) - Local
barplot(TDFAnioFin$hi,
main = "Gráfico Nº4.3: Frecuencia de la muestra distribuida por año en la India 2015-2020",
xlab = "Año de la Muestra",
ylab = "Porcentaje (%) (Cantidad de Días)",
names.arg = TDFAnioFin$Anio, # Usa los Años como etiquetas
las = 1,
col = "green",
ylim = c(0, 100)) # El eje Y siempre va de 0 a 100%
# DIAGRAMA DE BARRAS DE FRECUENCIA RELATIVA (hi) - Global
barplot(TDFAnioFin$hi,
main = "Gráfico Nº4.4: Frecuencia de la muestra distribuida por año en la India 2015-2020",
xlab = "Año",
ylab = "Porcentaje (%) (Cantidad de Días)",
names.arg = TDFAnioFin$Anio,
las = 1,
col = "darkgreen",
ylim = c(0, 100))
# =============================
# DIAGRAMA CIRCULAR (PASTEL)
# =============================
library(RColorBrewer)
# Frecuencias relativas en porcentaje
hi_pastel <- round(TDFAnioFin$ni / sum(TDFAnioFin$ni) * 100, 1)
# Etiquetas SOLO porcentaje
etiquetas <- paste0(hi_pastel, "%")
# Paleta cálida (amarillo → naranja → rojo)
paleta_base <- brewer.pal(n = length(TDFAnioFin$ni), "YlOrRd")
# *** ORDENAR COLORES SEGÚN LOS PORCENTAJES ***
# menor porcentaje → color más claro
# mayor porcentaje → color más oscuro
orden <- order(hi_pastel) # orden ascendente de porcentajes
colores <- paleta_base[rank(hi_pastel)] # asigna colores según ranking
# Gráfico circular
pie(
TDFAnioFin$ni,
labels = etiquetas,
main = "Gráfico Nº4.2: Distribución porcentual por año (2015-2020)",
col = colores,
radius = 1
)
# LEYENDA (en el mismo orden que el pastel)
legend(
"topright", # <<---- PUEDES CAMBIAR LA UBICACIÓN
legend = TDFAnioFin$Anio,
fill = colores,
title = "Años",
cex = 0.9
)