UNIVERSIDAD CENTRAL DEL ECUADOR

FIGEMPA

Ingeniería Ambiental

#ESTADISTICA DESCRIPTIVA
#Lorien Arcentales
#30/11/2025
#Carga de paquetes
library(gt)
library(dplyr)
#Carga de datos 
datos<-read.csv("city_day.csv", header = TRUE, dec = ".",
                sep = ",")
#Extraer variable
options(scipen = 999)
habitantes<-datos$Número.de.habitantes
#TDF_habitantes
# Definir los cortes (intervalos), ajusta según tus datos
min <- min(habitantes)
max <- max(habitantes)
cortes <- c(0, 8000000, 16000000, 24000000, 32000000, 34000000)
intervalos_legibles <- paste(
  format(head(cortes, -1), big.mark = ","),
  format(tail(cortes, -1), big.mark = ","),
  sep = " - "
)
habitantes_cut <- cut(
  datos$Número.de.habitantes,
  breaks = cortes,
  right = TRUE,
  labels = intervalos_legibles
)
TDF_habitantes<- data.frame(table(habitantes_cut))
ni <- TDF_habitantes$Freq
sum(ni)
## [1] 29531
hi <- (ni/sum(ni))
sum(hi)
## [1] 1
Ni_asc <- cumsum(ni)
Hi_asc <- cumsum(hi)
Ni_desc <- rev(cumsum(rev(ni)))
Hi_desc <- rev(cumsum(rev(hi)))
TDF_habitantes <- data.frame(
  as.character(levels(habitantes_cut)),
  ni,
  "hi(%)" = round(hi * 100, 2),
  "Ni asc" = Ni_asc,
  "Ni desc" = Ni_desc,
  "Hi asc(%)" = round(Hi_asc * 100, 2),
  "Hi desc(%)" = round(Hi_desc * 100, 2)
)
colnames(TDF_habitantes) <- c("Intervalos de número de habitantes","ni","hi(%)",
                            "Ni asc","Ni desc","Hi asc(%)","Hi desc(%)")
totales <- data.frame( TDF_habitantes=" TOTAL ",
                       ni= sum(ni),
                       hi= sum(hi*100),
                       Ni_asc= "-",
                       Ni_des= "-",
                       Hi_asc= "-",
                       Hi_des= "-")
colnames(totales) <- c("Intervalos de número de habitantes","ni","hi(%)",
                       "Ni asc","Hi asc(%)","Ni desc","Hi desc(%)")
TDF_numerohabitantes<- rbind(TDF_habitantes,totales)


#Creación tabla
library(gt)
library(dplyr)
TDF_numerohabitantes %>%
  gt() %>%
  tab_header(
    title = md("*Tabla Nro. 6*"),
    subtitle = md("**Distribucion de frecuencia del número de habitantes por ciudad, estudio calidad del aire en India entre 2015-2020 **")
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo 2\n Fuente:https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india")
  ) %>%
  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. 6
**Distribucion de frecuencia del número de habitantes por ciudad, estudio calidad del aire en India entre 2015-2020 **
Intervalos de número de habitantes ni hi(%) Ni asc Ni desc Hi asc(%) Hi desc(%)
0 - 8,000,000 16666 56.44 16666 29531 56.44 100
8,000,000 - 16,000,000 8847 29.96 25513 12865 86.39 43.56
16,000,000 - 24,000,000 2009 6.80 27522 4018 93.2 13.61
24,000,000 - 32,000,000 0 0.00 27522 2009 93.2 6.8
32,000,000 - 34,000,000 2009 6.80 29531 2009 100 6.8
TOTAL 29531 100.00 - - - -
Autor: Grupo 2 Fuente:https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india
# GRAFICAS

# Diagrama de barrras local
par(mar = c(8, 6, 4, 2))
barplot(ni,
        main="Gráfica N°1: Distribución de habitantes por intervalos
        en las ciudades del estudio,
calidad del aire en India entre 2015-2020",
        xlab = "Número de habitantes",
        ylab = "Cantidad",
        col = "blue",
        ylim = c(0,max(ni)),
        names.arg=TDF_habitantes$`Intervalos de número de habitantes`,
        las=2,
        cex.names=0.4,
        cex.axis = 0.7,
        cex.main = 0.9,
        mgp = c(5, 1 , 0))
mtext("*En los intervalos los limites superiores son cerrados", 
      side = 1, line = 6, adj = 0, cex = 0.7)

barplot(TDF_habitantes$`hi(%)`,
        main="Gráfica N°2: Distribución de habitantes por intervalos
        en las ciudades del estudio,
calidad del aire en India entre 2015-2020",
        xlab = "Número de habitantes",
        ylab = "Porcentaje %",
        col = "lightblue",
        names.arg=TDF_habitantes$`Intervalos de número de habitantes`,
        las=2,
        cex.names=0.4,
        cex.axis = 0.9,
        cex.main = 0.9,
        mgp = c(5, 1, 0))

# Diagrama de barrras global
barplot(ni,
        main="Gráfica N°3: Distribución de habitantes por intervalos
        en las ciudades del estudio,calidad del aire en India entre 2015-2020",
        xlab = "Número de habitantes",
        ylab = "Cantidad",
        col = "lightgreen",
        ylim = c(0,30000),
        names.arg=TDF_habitantes$`Intervalos de número de habitantes`,
        las=2,
        cex.names=0.4,
        cex.axis = 0.9,
        cex.main = 0.9,
        mgp = c(5, 1, 0))

barplot(TDF_habitantes$`hi(%)`,
        main="Gráfica N°4:Distribución de habitantes por intervalos
        en las ciudades del estudio,calidad del aire en India entre 2015-2020", 
        xlab = "Número de habitantes",
        ylab = "Porcentaje (%)",
        col = "green",
        ylim = c(0,100),
        names.arg=TDF_habitantes$`Intervalos de número de habitantes`,
        las=2,
        cex.names=0.4,
        cex.axis = 0.9,
        cex.main = 0.9,
        mgp = c(5, 1, 0))

# Diagrama de Caja
boxplot(habitantes,
        horizontal = TRUE,
        main = "Gráfica N°5: Distribución del número de habitantes en las 
        ciudades del estudio,calidad del aire 
        en India entre 2015-2020",
        xlab = " Número de habitantes",
        col = "turquoise",
        pch = 1)

# Diagrama de Ojiva Ascendente y Descendente
par(mar = c(9, 6, 4, 2))
x_pos <- 1:length(TDF_habitantes$`Intervalos de número de habitantes`)
plot(x_pos ,Ni_desc,
     main = "Gráfica N°5: ",
     xlab = " Número de habitantes",
     ylab = "Cantidad",
     col = "orange",
     type = "p",
     lwd = 3,
     xaxt="n",
     mgp = c(5, 1, 0),
     ylim = c(0, max(c(Ni_asc, Ni_desc))))

lines(x_pos,Ni_asc,
      col = "green",
      type = "p",
      lwd = 3)
axis(side = 1, at = x_pos, labels = TDF_habitantes$`Intervalos de número de habitantes`,
     las = 2, cex.axis = 0.4)

# Diagrama de Ojiva Ascendente y Descendente Porcentual
par(mar = c(9, 6, 4, 2))
x_por <- 1:length(TDF_habitantes$`Intervalos de número de habitantes`)
plot(x_pos, Hi_desc * 100,
     main = "Gráfica N°6:  ",
     xlab = " Número de habitantes",
     ylab = "Porcentaje (%)",
     col = "red",
     type = "p",
     mgp = c(5, 1, 0),
     lwd = 2,
     xaxt="n")
lines(x_pos, Hi_asc * 100,
      col = "blue",
      type = "p",
      lwd = 3)
axis(side = 1, at = x_pos, labels =  TDF_habitantes$`Intervalos de número de habitantes`, 
     las = 2, cex.axis = 0.4)