Instalar y cargar librerias.

# install.packages("devtools")    
# install.packages('rticles')
#install.packages("tinytex")
#install.packages("dplyr")
#install.packages("modeest")
#install.packages("e1071")
#install.packages("summarytools")
#install.packages("read")
#install.packages("readxl")
#install.packages("patchwork")
#install.packages("magrittr")
library(patchwork)
library(summarytools)
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(modeest)  
library(rticles)
library(ggplot2)
library(e1071)
## 
## Adjuntando el paquete: 'e1071'
## The following object is masked from 'package:modeest':
## 
##     skewness
library(naniar)
library(tinytex)
library(readxl)
library(magrittr) 

Cargar base de datos.

datos <- read_excel("C:/Users/Usuario/Desktop/RIOGRANDE/RIOGRANDE/PRIMERAS VARIABLES.xlsx", sheet = 1)

Mostrar datos faltantes.

colSums(is.na(datos)) %>% as.data.frame()
##                  .
## CabezaFamilia   11
## VentasDiarias   28
## VentasN.Diarias 43
## Deuda           50
## Edad            22
## Miembros        11
## GENERO          15
## Ambulante       26
## HTrabajo_Dia    19
## HTrabajo_Semana 13
## Empleados        0
## Carga            0
## Pasajeros        0
## Turistas         0
## HabitantesCP     0
## HabitantesCR     0
## CIU              0
## Letrado          0
gg_miss_var(datos)

Estandarizar Termminos.

T_CabezaFamilia = function(CabezaFamilia) {
  CabezaFamilia = tolower(CabezaFamilia) 
  CabezaFamilia = dplyr::recode(CabezaFamilia,  
                                 "no" = "No",
                                 "si" = "Si",
                                 "SI" = "Si",
                                 "NO" = "No",
                                 .default = CabezaFamilia)  
  return(CabezaFamilia)
}

T_Ambulante= function(Ambulante) {
  Ambulante = tolower(Ambulante)  
  Ambulante = dplyr::recode(Ambulante,  
                             "no" = "No",
                             "si" = "Si",
                             "SI" = "Si",
                             "NO" = "No",
                             .default = Ambulante)  
  return(Ambulante)

}

datos = datos %>%
  mutate(CabezaFamilia = T_CabezaFamilia(CabezaFamilia))
datos = datos %>%
  mutate(Ambulante = T_Ambulante(Ambulante))

Calculo de la curtosis para determinar imputación de datos faltantes.

curtosis_ventas_diarias = kurtosis(datos$VentasDiarias, na.rm = TRUE)
curtosis_ventas_n_diarias = kurtosis(datos$VentasN.Diarias, na.rm = TRUE)
curtosis_deuda = kurtosis(datos$Deuda, na.rm = TRUE)
curtosis_edad = kurtosis(datos$Edad, na.rm = TRUE)
curtosis_miembros = kurtosis(datos$Miembros, na.rm = TRUE)
curtosis_htrabajodia = kurtosis(datos$HTrabajo_Dia, na.rm = TRUE)
curtosis_htrabajosemana = kurtosis(datos$HTrabajo_Semana, na.rm = TRUE)

curtosis_ventas_diarias
## [1] 75.2271
curtosis_ventas_n_diarias
## [1] 60.92506
curtosis_deuda
## [1] 127.8383
curtosis_edad
## [1] -0.0188526
curtosis_miembros
## [1] 3.180662
curtosis_htrabajodia 
## [1] 1.29582
curtosis_htrabajosemana 
## [1] 11.93906
mediana_ventas_diarias = median(datos$VentasDiarias, na.rm = TRUE)
mediana_ventas_n_diarias = median(datos$VentasN.Diarias, na.rm = TRUE)
mediana_deuda = median(datos$Deuda, na.rm = TRUE)
mediana_edad = median(datos$Edad, na.rm = TRUE)
mediana_miembros = median(datos$Miembros, na.rm = TRUE)
mediana_htrabajodia = median(datos$HTrabajo_Dia, na.rm = TRUE)
mediana_htrabajosemana = median(datos$HTrabajo_Semana, na.rm = TRUE)

datos$VentasDiarias[is.na(datos$VentasDiarias)] = mediana_ventas_diarias
datos$VentasN.Diarias[is.na(datos$VentasN.Diarias)] = mediana_ventas_n_diarias
datos$Deuda[is.na(datos$Deuda)] = mediana_deuda
datos$Edad[is.na(datos$Edad)] = mediana_edad
datos$Miembros[is.na(datos$Miembros)] = mediana_miembros
datos$HTrabajo_Dia[is.na(datos$HTrabajo_Dia)] = mediana_htrabajodia
datos$HTrabajo_Semana[is.na(datos$HTrabajo_Semana)] = mediana_htrabajosemana

Verificar datos faltantes

colSums(is.na(datos)) %>% as.data.frame()
##                  .
## CabezaFamilia   11
## VentasDiarias    0
## VentasN.Diarias  0
## Deuda            0
## Edad             0
## Miembros         0
## GENERO          15
## Ambulante       26
## HTrabajo_Dia     0
## HTrabajo_Semana  0
## Empleados        0
## Carga            0
## Pasajeros        0
## Turistas         0
## HabitantesCP     0
## HabitantesCR     0
## CIU              0
## Letrado          0
gg_miss_var(datos)

Calcular las ventas netas por género, si son vendedores ambulantes y si son cabeza de familia.

ventas_net_ambulante <- datos %>%
  filter(Ambulante == "Si") %>% 
  group_by(GENERO, CabezaFamilia) %>%
  summarise(VentasN_Diarias_Total = mean(VentasN.Diarias, na.rm = TRUE)) %>%
  ungroup()
## `summarise()` has grouped output by 'GENERO'. You can override using the
## `.groups` argument.
print(ventas_net_ambulante)
## # A tibble: 6 × 3
##   GENERO CabezaFamilia VentasN_Diarias_Total
##   <chr>  <chr>                         <dbl>
## 1 F      No                             40  
## 2 F      Si                             49.3
## 3 M      No                             65  
## 4 M      Si                             69.8
## 5 <NA>   Si                             53.3
## 6 <NA>   <NA>                           80

Datos atipicos con ranto intercualirtico.

detect_outliers <- function(x) {
  Q1 <- quantile(x, 0.25, na.rm = TRUE)
  Q3 <- quantile(x, 0.75, na.rm = TRUE)
  IQR <- Q3 - Q1
  lower_bound <- Q1 - 1.5 * IQR
  upper_bound <- Q3 + 1.5 * IQR
  outliers <- x[x < lower_bound | x > upper_bound]
  return(outliers)
}

outliers_ventas_diarias = detect_outliers(datos$VentasDiarias)
outliers_ventas_n_diarias = detect_outliers(datos$VentasN.Diarias)
outliers_deuda = detect_outliers(datos$Deuda)
outliers_edad = detect_outliers(datos$Edad)
outliers_miembros = detect_outliers(datos$Miembros)
outliers_htrabajodia = detect_outliers(datos$HTrabajo_Dia)
#outliers_htrabajosemana = detect_outliers(datos$HTrabajo_Semana) en este caso no lo impute porque en su mayoria eran 7 dias, la media daba 6 y algo, por lo cual lo deje asi.

outliers_ventas_diarias
##  [1]  3000  1500  4000  2500  1600  2000  2000  3000  2000 35000  1500  2000
## [13]  3500  5000  2000 30000  2000  1500  3000  2000  1300  7000  1500  2500
## [25]  1500  1500  8000
outliers_ventas_n_diarias
##  [1] 1000  500 1000  800  600 4000 7000  500 1500  350 1500 2500  700  600 1400
## [16]  500 2000  500 1000
outliers_deuda
##  [1]   78000   30000  120000   30000  120000 3000000   22000   26000   60000
## [10]  140000   35000   25000   20000   60000   40000   30000   60000   30000
## [19]  300000   30000   40000  230000   30000  700000  300000   62000   50000
## [28]  100000   70000  300000   70000  190000   20000   30000   20000  500000
outliers_edad
## [1] 88  2 84
outliers_miembros
## [1] 10 15 10 10
outliers_htrabajodia 
##  [1] 24 24 17 24 17 24 24 19 24 24 24 24 17 24 24 24 24 24 24 17 24 24 20 24 20
## [26] 24 24
#outliers_htrabajosemana

Imputar valores

moda_Genero = as.character(names(sort(table(datos$GENERO), decreasing = TRUE)[1]))
datos$GENERO[is.na(datos$GENERO)] = moda_Genero
ventas_net_ambulante2 = datos %>%
  filter(Ambulante == "Si") %>%  
  group_by(GENERO, CabezaFamilia) %>%
  summarise(VentasN_Diarias_Total = sum(VentasN.Diarias, na.rm = TRUE)) %>%
  ungroup()
## `summarise()` has grouped output by 'GENERO'. You can override using the
## `.groups` argument.
print(ventas_net_ambulante)
## # A tibble: 6 × 3
##   GENERO CabezaFamilia VentasN_Diarias_Total
##   <chr>  <chr>                         <dbl>
## 1 F      No                             40  
## 2 F      Si                             49.3
## 3 M      No                             65  
## 4 M      Si                             69.8
## 5 <NA>   Si                             53.3
## 6 <NA>   <NA>                           80
moda_cabeza_familia = as.character(names(sort(table(datos$CabezaFamilia), decreasing = TRUE)[1]))
datos$CabezaFamilia[is.na(datos$CabezaFamilia)] = moda_cabeza_familia
moda_Ambulante = as.character(names(sort(table(datos$Ambulante), decreasing = TRUE)[1]))
datos$Ambulante[is.na(datos$Ambulante)] = moda_Ambulante

colSums(is.na(datos)) %>% as.data.frame()
##                 .
## CabezaFamilia   0
## VentasDiarias   0
## VentasN.Diarias 0
## Deuda           0
## Edad            0
## Miembros        0
## GENERO          0
## Ambulante       0
## HTrabajo_Dia    0
## HTrabajo_Semana 0
## Empleados       0
## Carga           0
## Pasajeros       0
## Turistas        0
## HabitantesCP    0
## HabitantesCR    0
## CIU             0
## Letrado         0
gg_miss_var(datos)

Ahora voy a imputar los ouliers identificados anteriormente con la mediana, ahora esto es asi porque son datos que no siguen una distribución normal y porque son variables numericas. Cuando la distribucón es normal o cuando hay variables catgoricas que hace de forma diferente.

replace_outliers_with_median <- function(x) {
  Q1 <- quantile(x, 0.25, na.rm = TRUE)
  Q3 <- quantile(x, 0.75, na.rm = TRUE)
  IQR <- Q3 - Q1
  lower_bound <- Q1 - 1.5 * IQR
  upper_bound <- Q3 + 1.5 * IQR
  mediana <- median(x, na.rm = TRUE)
  x <- ifelse(x < lower_bound | x > upper_bound, mediana, x)
  return(x)
}

datos_sin_outliers <- datos %>%
  mutate(
    VentasDiarias = replace_outliers_with_median(VentasDiarias),
    VentasN.Diarias = replace_outliers_with_median(VentasN.Diarias),
    Deuda = replace_outliers_with_median(Deuda),
    Edad = replace_outliers_with_median(Edad),
    Miembros = replace_outliers_with_median(Miembros),
    HTrabajo_Dia = replace_outliers_with_median(HTrabajo_Dia),
    HTrabajo_Semana = replace_outliers_with_median(HTrabajo_Semana)
    
  )

colSums(is.na(datos_sin_outliers)) %>% as.data.frame()
##                 .
## CabezaFamilia   0
## VentasDiarias   0
## VentasN.Diarias 0
## Deuda           0
## Edad            0
## Miembros        0
## GENERO          0
## Ambulante       0
## HTrabajo_Dia    0
## HTrabajo_Semana 0
## Empleados       0
## Carga           0
## Pasajeros       0
## Turistas        0
## HabitantesCP    0
## HabitantesCR    0
## CIU             0
## Letrado         0
gg_miss_var(datos_sin_outliers)

Promedio de ventas brutas y netas sin outliers y con outliers.

promedios_ventas_sin_outliers = datos_sin_outliers %>%
  group_by(CabezaFamilia) %>%
  summarise(
    Promedio_VentasDiarias = mean(VentasDiarias, na.rm = TRUE),
    Promedio_VentasN_Diarias = mean(VentasN.Diarias, na.rm = TRUE)
  )
print(as.data.frame(promedios_ventas_sin_outliers))
##   CabezaFamilia Promedio_VentasDiarias Promedio_VentasN_Diarias
## 1            No               297.9310                 89.06897
## 2            Si               255.2895                 92.92105
promedios_ventas_con_outliers <- datos %>%
  group_by(CabezaFamilia) %>%
  summarise(
    Promedio_VentasDiarias = mean(VentasDiarias, na.rm = TRUE),
    Promedio_VentasN_Diarias = mean(VentasN.Diarias, na.rm = TRUE)
  )
print(as.data.frame(promedios_ventas_con_outliers))
##   CabezaFamilia Promedio_VentasDiarias Promedio_VentasN_Diarias
## 1            No               297.9310                 89.06897
## 2            Si               923.7105                232.02632

Deuda

promedios_deuda_sin_outliers = datos_sin_outliers %>%
  group_by(CabezaFamilia) %>%
  summarise(
    Promedio_Deuda = mean(Deuda, na.rm = TRUE)
  )
print(as.data.frame(promedios_deuda_sin_outliers))
##   CabezaFamilia Promedio_Deuda
## 1            No       1463.793
## 2            Si       1537.632

Miembros

promedios_miembros_sin_outliers <- datos_sin_outliers %>%
  group_by(CabezaFamilia) %>%
  summarise(
    Promedio_Miembros = mean(Miembros, na.rm = TRUE)
  )
print(as.data.frame(promedios_miembros_sin_outliers))
##   CabezaFamilia Promedio_Miembros
## 1            No          3.241379
## 2            Si          3.910526

Edad

promedios_edad_sin_outliers = datos_sin_outliers %>%
  group_by(CabezaFamilia) %>%
  summarise(
    Promedio_Edad = mean(Edad, na.rm = TRUE)
  )
print(promedios_edad_sin_outliers)
## # A tibble: 2 × 2
##   CabezaFamilia Promedio_Edad
##   <chr>                 <dbl>
## 1 No                     35.4
## 2 Si                     45.9

Horas de trabajo por día

promedios_horas_dia_sin_outliers = datos_sin_outliers %>%
  group_by(CabezaFamilia) %>%
  summarise(
    Promedio_HorasDia = mean(HTrabajo_Dia, na.rm = TRUE)
  )
print(promedios_horas_dia_sin_outliers)
## # A tibble: 2 × 2
##   CabezaFamilia Promedio_HorasDia
##   <chr>                     <dbl>
## 1 No                         10.1
## 2 Si                         10.7

dias de trabajo a la semana

promedios_horas_semana_sin_outliers = datos_sin_outliers %>% #aqui me equivoque nombrando la variable, pero esta bien, no hace ningun efecto ##
  group_by(CabezaFamilia) %>%
  summarise(
    Promedio_HorasSemana = mean(HTrabajo_Semana, na.rm = TRUE)
  )
print(promedios_horas_semana_sin_outliers)
## # A tibble: 2 × 2
##   CabezaFamilia Promedio_HorasSemana
##   <chr>                        <dbl>
## 1 No                               7
## 2 Si                               7

Cantidad de cada género por cabeza de familia

cantidad_genero_por_cabeza_familia <- datos_sin_outliers %>%
  group_by(CabezaFamilia, GENERO) %>%
  summarise(Cantidad = n()) %>%
  ungroup()
## `summarise()` has grouped output by 'CabezaFamilia'. You can override using the
## `.groups` argument.
print(cantidad_genero_por_cabeza_familia)
## # A tibble: 4 × 3
##   CabezaFamilia GENERO Cantidad
##   <chr>         <chr>     <int>
## 1 No            F            14
## 2 No            M            15
## 3 Si            F            67
## 4 Si            M           123

Cuantos son cabeza de familia por genero

cantidad_por_genero_ambulante_cabeza <- datos_sin_outliers %>%
  filter(Ambulante == "Si") %>%  # Filtrar solo los vendedores ambulantes
  group_by(GENERO, CabezaFamilia) %>%
  summarise(Cantidad = n()) %>%
  ungroup()
## `summarise()` has grouped output by 'GENERO'. You can override using the
## `.groups` argument.
print(cantidad_por_genero_ambulante_cabeza)
## # A tibble: 4 × 3
##   GENERO CabezaFamilia Cantidad
##   <chr>  <chr>            <int>
## 1 F      No                   3
## 2 F      Si                  15
## 3 M      No                   5
## 4 M      Si                  29

Horas de trabajo diaria y semanales por cabeza de familia

horas_trabajo_por_genero_cabeza = datos_sin_outliers %>%
  group_by(GENERO, CabezaFamilia) %>%
  summarise(
    Promedio_HorasDia = mean(HTrabajo_Dia, na.rm = TRUE),
    Promedio_HorasSemana = mean(HTrabajo_Semana, na.rm = TRUE)
  ) %>%
  ungroup()
## `summarise()` has grouped output by 'GENERO'. You can override using the
## `.groups` argument.
print(horas_trabajo_por_genero_cabeza)
## # A tibble: 4 × 4
##   GENERO CabezaFamilia Promedio_HorasDia Promedio_HorasSemana
##   <chr>  <chr>                     <dbl>                <dbl>
## 1 F      No                         9.64                    7
## 2 F      Si                        10.3                     7
## 3 M      No                        10.5                     7
## 4 M      Si                        11.0                     7

Tipos de clientes.

frecuencia_relativa = datos_sin_outliers %>%
  group_by(Ambulante) %>%
  summarise(
    Total_Negocios = n(),
    Carga_Afirmativo = sum(Carga, na.rm = TRUE) / Total_Negocios * 100,
    Pasajeros_Afirmativo = sum(Pasajeros, na.rm = TRUE) / Total_Negocios * 100,
    Turistas_Afirmativo = sum(Turistas, na.rm = TRUE) / Total_Negocios * 100,
    HabitantesCP_Afirmativo = sum(HabitantesCP, na.rm = TRUE) / Total_Negocios * 100,
    HabitantesCR_Afirmativo = sum(HabitantesCR, na.rm = TRUE) / Total_Negocios * 100
  )
print(as.data.frame(frecuencia_relativa))
##   Ambulante Total_Negocios Carga_Afirmativo Pasajeros_Afirmativo
## 1        No            167         66.46707             38.32335
## 2        Si             52         75.00000             73.07692
##   Turistas_Afirmativo HabitantesCP_Afirmativo HabitantesCR_Afirmativo
## 1            53.89222                64.07186                53.89222
## 2            67.30769                53.84615                40.38462

####Calcular la diferencia entre VentasDiarias y VentasN.Diarias

diferencia_ventas_ambulante = datos_sin_outliers %>%
  mutate(Diferencia_Ventas = VentasDiarias - VentasN.Diarias) %>% 
  group_by(GENERO, CabezaFamilia, Ambulante) %>% 
  summarise(Promedio_Diferencia = mean(Diferencia_Ventas, na.rm = TRUE)) %>% 
  ungroup()
## `summarise()` has grouped output by 'GENERO', 'CabezaFamilia'. You can override
## using the `.groups` argument.
print(as.data.frame(diferencia_ventas_ambulante))
##   GENERO CabezaFamilia Ambulante Promedio_Diferencia
## 1      F            No        No           290.00000
## 2      F            No        Si            50.00000
## 3      F            Si        No           194.42308
## 4      F            Si        Si            58.00000
## 5      M            No        No           233.20000
## 6      M            No        Si            77.00000
## 7      M            Si        No           188.72340
## 8      M            Si        Si            73.44828

Grafico de densidad conjunta

conteo_por_hora = datos_sin_outliers %>%
  group_by(HTrabajo_Dia) %>%
  summarise(Conteo = n())
altura_fija = max(datos_sin_outliers$VentasN.Diarias) * 1.1
grafico_densidad_conjunta <- ggplot(datos_sin_outliers, aes(x = HTrabajo_Dia, y = VentasN.Diarias)) +
  geom_point(alpha = 0.5, color = "blue") +  
  geom_density2d(color = "red") +  
  scale_x_continuous(breaks = seq(5, 20, by = 1)) + 
  geom_label(data = conteo_por_hora, aes(x = HTrabajo_Dia, y = altura_fija, label = Conteo), 
             color = "black", fill = "white", size = 5, fontface = "bold", vjust = 1) +  
  labs(title = " ", x = "Horas de Trabajo por Dia", y = "Ventas Netas Diarias") +
  theme_minimal()
print(grafico_densidad_conjunta)

Calcular el promedio de ventas netas por hora trabajada

promedio_ventas_por_hora <- datos_sin_outliers %>%
  group_by(HTrabajo_Dia) %>%
  summarise(Promedio_VentasN_Diarias = mean(VentasN.Diarias, na.rm = TRUE))
print(promedio_ventas_por_hora)
## # A tibble: 12 × 2
##    HTrabajo_Dia Promedio_VentasN_Diarias
##           <dbl>                    <dbl>
##  1            5                     40  
##  2            6                     40  
##  3            7                     52.2
##  4            8                    100. 
##  5            9                     91.5
##  6           10                     73.1
##  7           11                    112. 
##  8           12                     80.2
##  9           13                    140  
## 10           14                     85.7
## 11           15                     98.8
## 12           16                     87.5

Relación de horas trabajo dia con la edad

grafico_jitter_densidad = ggplot(datos_sin_outliers, aes(x = Edad, y = HTrabajo_Dia)) +
  geom_jitter(aes(color = GENERO), size = 2, alpha = 0.7) +
  geom_density_2d(color = "blue") + scale_x_continuous(breaks = seq(1, 75, by = 20)) +  
  labs(title = " ", y = "Horas de Trabajo por Dia", x = "Edad", color = "Genero") +
  theme_minimal() +
  theme(legend.position = "bottom",  
        legend.title = element_text(size = 10), legend.text = element_text(size = 8))    
print(grafico_jitter_densidad)

Grafico polar

datos_sin_outliers$Edad_Grupo <- cut(datos_sin_outliers$Edad, breaks = seq(0, 80, by = 5), right = FALSE)
grafico_barras_polar <- ggplot(datos_sin_outliers, aes(x = Edad_Grupo, y = HTrabajo_Dia, fill = GENERO)) +
  geom_bar(stat = "identity", position = "stack", alpha = 0.8) + coord_polar(start = 0) +  
  labs(title = " ", y = "Horas Dia", x = "Grupo de Edad", fill = "Genero") +
  scale_fill_manual(values = c("F" = "pink", "M" = "blue")) +  
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        legend.position = "bottom",  
        legend.title = element_text(size = 10),
        legend.text = element_text(size = 8))
print(grafico_barras_polar)

Cuento o determino de forma visual la edad y determina un rango dond emayor se concentra los datos.

filtro_edad_horas = datos_sin_outliers %>%
  filter(Edad >= 45, Edad <= 50, HTrabajo_Dia >= 8, HTrabajo_Dia <= 12) # 40 a 50 años entre 8 a 12 horas
conteo_genero <- filtro_edad_horas %>%
  group_by(GENERO) %>%
  summarise(Conteo = n())
print(conteo_genero)
## # A tibble: 2 × 2
##   GENERO Conteo
##   <chr>   <int>
## 1 F          10
## 2 M          37

Piramide poblacional

piramide_data = datos_sin_outliers %>%
  group_by(Edad, GENERO) %>%
  summarise(Conteo = n()) %>%
  ungroup()
## `summarise()` has grouped output by 'Edad'. You can override using the
## `.groups` argument.
piramide_data = piramide_data %>%
  mutate(Conteo = ifelse(GENERO == "F", -Conteo, Conteo)) 

piramide_plot = ggplot(piramide_data, aes(x = Edad, y = Conteo, fill = GENERO)) +
  geom_bar(stat = "identity") +
  scale_y_continuous(labels = abs) +  labs(title = "Piramide Poblacional por Edad y Genero",
       x = "Edad",
       y = "Cantidad de Personas",
       fill = "Genero") +
  theme_minimal() + scale_fill_manual(values = c("F" = "pink", "M" = "blue"))
print(piramide_plot)

## Los CIIU que generan mayores ingresos netos y empleos

ciu_empleos_ventas <- datos_sin_outliers %>%
  group_by(CIU) %>%
  summarise(
    Total_Empleados = mean(Empleados, na.rm = TRUE),  
    Total_VentasNetasDiarias = mean(VentasN.Diarias, na.rm = TRUE)
  ) %>%
  arrange(desc(Total_Empleados))

top_ciu_empleos <- ciu_empleos_ventas %>%
  arrange(desc(Total_Empleados)) %>%
  top_n(5, Total_Empleados)
print("CIU que generan más empleos:")
## [1] "CIU que generan más empleos:"
print(top_ciu_empleos)
## # A tibble: 5 × 3
##     CIU Total_Empleados Total_VentasNetasDiarias
##   <dbl>           <dbl>                    <dbl>
## 1  4663           10                         80 
## 2  4661            8                         80 
## 3  1081            5.5                      225 
## 4  4731            5.5                       80 
## 5  5511            5.05                     110.
top_ciu_ventas <- ciu_empleos_ventas %>%
  arrange(desc(Total_VentasNetasDiarias)) %>%
  top_n(5, Total_VentasNetasDiarias)
print("CIU que generan más ingresos por ventas netas diarias:")
## [1] "CIU que generan más ingresos por ventas netas diarias:"
print(top_ciu_ventas)
## # A tibble: 5 × 3
##     CIU Total_Empleados Total_VentasNetasDiarias
##   <dbl>           <dbl>                    <dbl>
## 1  1081            5.5                       225
## 2  4512            2                         200
## 3  3110            4.67                      160
## 4  4711            1.86                      160
## 5  2431            2                         135

Agrupar por CIU y calcular la frecuencia, promedio de ventas netas diarias, y promedio de empleados.

clasificacion_completa = datos_sin_outliers %>%
  group_by(CIU) %>%
  summarise(
    Cantidad_Negocios = n(),
    Promedio_VentasN_Diarias = mean(VentasN.Diarias, na.rm = TRUE),  
    Promedio_Empleados = mean(Empleados, na.rm = TRUE)  
  ) %>%
  arrange(desc(Cantidad_Negocios))
print(as.data.frame(clasificacion_completa))
##     CIU Cantidad_Negocios Promedio_VentasN_Diarias Promedio_Empleados
## 1     0                45                 54.11111          0.1333333
## 2  4520                35                103.28571          3.3428571
## 3  5511                22                109.54545          5.0454545
## 4  5611                18                116.11111          3.8888889
## 5  5613                15                 49.00000          0.7333333
## 6  4530                12                105.00000          1.6666667
## 7  4542                 7                 83.57143          2.0000000
## 8  4711                 7                160.00000          1.8571429
## 9  4541                 6                120.83333          2.0000000
## 10 4719                 6                116.66667          0.5000000
## 11 4721                 6                116.66667          1.5000000
## 12 4771                 5                 84.00000          2.0000000
## 13 5630                 5                106.00000          2.2000000
## 14 3110                 3                160.00000          4.6666667
## 15 4690                 3                120.00000          1.0000000
## 16 9602                 3                 24.33333          0.6666667
## 17 1081                 2                225.00000          5.5000000
## 18 2431                 2                135.00000          2.0000000
## 19 3314                 2                 80.00000          0.5000000
## 20 4731                 2                 80.00000          5.5000000
## 21 4752                 2                 35.00000          2.0000000
## 22 4512                 1                200.00000          2.0000000
## 23 4649                 1                 50.00000          1.0000000
## 24 4653                 1                 80.00000          4.0000000
## 25 4661                 1                 80.00000          8.0000000
## 26 4663                 1                 80.00000         10.0000000
## 27 4729                 1                100.00000          2.0000000
## 28 4741                 1                 30.00000          0.0000000
## 29 4761                 1                 30.00000          0.0000000
## 30 4773                 1                 80.00000          0.0000000
## 31 7310                 1                 80.00000          0.0000000
## 32 9200                 1                 80.00000          1.0000000

Filtrar a las personas con ingresos por debajo de 1 millon, es decir 33,333 pesos diarios

personas_con_ingresos_bajos = datos_sin_outliers %>%
  filter(VentasN.Diarias < 33.33) %>%  
  select(CIU, Ambulante, CabezaFamilia, VentasN.Diarias)
print(as.data.frame(personas_con_ingresos_bajos))
##     CIU Ambulante CabezaFamilia VentasN.Diarias
## 1  4761        No            No              30
## 2  4520        No            Si              25
## 3     0        Si            No              25
## 4  4520        No            Si              20
## 5  5611        No            Si              10
## 6     0        Si            Si              20
## 7  5613        No            Si              20
## 8  4520        No            Si              30
## 9  5611        No            Si              20
## 10 9602        No            No               8
## 11 5611        No            No              20
## 12 4752        No            Si              30
## 13    0        Si            Si               5
## 14 4741        No            Si              30
## 15    0        Si            No              30
## 16    0        Si            Si              25
## 17    0        Si            Si              15
## 18    0        Si            Si              30
## 19    0        Si            Si              30
## 20 9602        No            Si               5
## 21 4721        Si            Si              20
## 22 4719        No            Si              20
## 23    0        No            Si              15
## 24    0        Si            Si              25
## 25    0        Si            Si              30
## 26    0        Si            Si              20
## 27    0        Si            Si              20
## 28    0        Si            Si              15
## 29 4542        No            Si              15
## 30    0        Si            Si              30
## 31    0        Si            Si              30
## 32    0        Si            Si              30
## 33    0        Si            No              30
## 34    0        Si            Si              30

Filtrar a las personas con ingresos por debajo de 1 millon, es decir 33,333 pesos diarios con miembros del hogar

personas_con_ingresos_bajos = datos_sin_outliers %>%
  filter(VentasN.Diarias < 33.33) %>%  
  select(CIU, Ambulante, CabezaFamilia, VentasN.Diarias, Miembros)
print(as.data.frame(personas_con_ingresos_bajos))
##     CIU Ambulante CabezaFamilia VentasN.Diarias Miembros
## 1  4761        No            No              30        2
## 2  4520        No            Si              25        3
## 3     0        Si            No              25        0
## 4  4520        No            Si              20        5
## 5  5611        No            Si              10        1
## 6     0        Si            Si              20        5
## 7  5613        No            Si              20        4
## 8  4520        No            Si              30        5
## 9  5611        No            Si              20        4
## 10 9602        No            No               8        1
## 11 5611        No            No              20        4
## 12 4752        No            Si              30        2
## 13    0        Si            Si               5        2
## 14 4741        No            Si              30        4
## 15    0        Si            No              30        2
## 16    0        Si            Si              25        9
## 17    0        Si            Si              15        9
## 18    0        Si            Si              30        3
## 19    0        Si            Si              30        4
## 20 9602        No            Si               5        2
## 21 4721        Si            Si              20        1
## 22 4719        No            Si              20        2
## 23    0        No            Si              15        3
## 24    0        Si            Si              25        1
## 25    0        Si            Si              30        2
## 26    0        Si            Si              20        6
## 27    0        Si            Si              20        5
## 28    0        Si            Si              15        4
## 29 4542        No            Si              15        3
## 30    0        Si            Si              30        3
## 31    0        Si            Si              30        7
## 32    0        Si            Si              30        6
## 33    0        Si            No              30        2
## 34    0        Si            Si              30        3

Obtener el CIIU que más se repite

rentabilidad_por_miembro <- datos_sin_outliers %>%
  filter(CabezaFamilia == "Si" & VentasN.Diarias < 33.33) %>%  
  mutate(Rentabilidad_Por_Miembro = VentasN.Diarias / Miembros) %>%  
  select(CIU, VentasN.Diarias, Miembros, Rentabilidad_Por_Miembro, CabezaFamilia, Ambulante)
print(as.data.frame(rentabilidad_por_miembro))
##     CIU VentasN.Diarias Miembros Rentabilidad_Por_Miembro CabezaFamilia
## 1  4520              25        3                 8.333333            Si
## 2  4520              20        5                 4.000000            Si
## 3  5611              10        1                10.000000            Si
## 4     0              20        5                 4.000000            Si
## 5  5613              20        4                 5.000000            Si
## 6  4520              30        5                 6.000000            Si
## 7  5611              20        4                 5.000000            Si
## 8  4752              30        2                15.000000            Si
## 9     0               5        2                 2.500000            Si
## 10 4741              30        4                 7.500000            Si
## 11    0              25        9                 2.777778            Si
## 12    0              15        9                 1.666667            Si
## 13    0              30        3                10.000000            Si
## 14    0              30        4                 7.500000            Si
## 15 9602               5        2                 2.500000            Si
## 16 4721              20        1                20.000000            Si
## 17 4719              20        2                10.000000            Si
## 18    0              15        3                 5.000000            Si
## 19    0              25        1                25.000000            Si
## 20    0              30        2                15.000000            Si
## 21    0              20        6                 3.333333            Si
## 22    0              20        5                 4.000000            Si
## 23    0              15        4                 3.750000            Si
## 24 4542              15        3                 5.000000            Si
## 25    0              30        3                10.000000            Si
## 26    0              30        7                 4.285714            Si
## 27    0              30        6                 5.000000            Si
## 28    0              30        3                10.000000            Si
##    Ambulante
## 1         No
## 2         No
## 3         No
## 4         Si
## 5         No
## 6         No
## 7         No
## 8         No
## 9         Si
## 10        No
## 11        Si
## 12        Si
## 13        Si
## 14        Si
## 15        No
## 16        Si
## 17        No
## 18        No
## 19        Si
## 20        Si
## 21        Si
## 22        Si
## 23        Si
## 24        No
## 25        Si
## 26        Si
## 27        Si
## 28        Si

ciiu_mas_repetido <- rentabilidad_por_miembro %>%
  count(CIU) %>%
  arrange(desc(n)) %>%
  slice(1)
total_cabeza_familia <- rentabilidad_por_miembro %>%
  summarise(Numero_CabezaFamilia = sum(CabezaFamilia == "Si"))
total_ambulantes <- rentabilidad_por_miembro %>%
  summarise(Numero_Ambulantes = sum(Ambulante == "Si"))
print("CIIU que más se repite:")
## [1] "CIIU que más se repite:"
print(ciiu_mas_repetido)
## # A tibble: 1 × 2
##     CIU     n
##   <dbl> <int>
## 1     0    16
print("Número de Cabezas de Familia:")
## [1] "Número de Cabezas de Familia:"
print(total_cabeza_familia)
## # A tibble: 1 × 1
##   Numero_CabezaFamilia
##                  <int>
## 1                   28
print("Número de Ambulantes:")
## [1] "Número de Ambulantes:"
print(total_ambulantes)
## # A tibble: 1 × 1
##   Numero_Ambulantes
##               <int>
## 1                16

Filtrar personas que son cabeza de familia y tienen ventas netas diarias por debajo de 33.33

rentabilidad_por_miembro_mensual <- datos_sin_outliers %>%
  filter(CabezaFamilia == "Si" & VentasN.Diarias < 33.33) %>%  
  mutate(Rentabilidad_Por_Miembro_Mensual = (VentasN.Diarias / Miembros) * 30) %>%
  select(CIU, VentasN.Diarias, Miembros, Rentabilidad_Por_Miembro_Mensual, CabezaFamilia, Ambulante, GENERO)  
print(as.data.frame(rentabilidad_por_miembro_mensual))
##     CIU VentasN.Diarias Miembros Rentabilidad_Por_Miembro_Mensual CabezaFamilia
## 1  4520              25        3                        250.00000            Si
## 2  4520              20        5                        120.00000            Si
## 3  5611              10        1                        300.00000            Si
## 4     0              20        5                        120.00000            Si
## 5  5613              20        4                        150.00000            Si
## 6  4520              30        5                        180.00000            Si
## 7  5611              20        4                        150.00000            Si
## 8  4752              30        2                        450.00000            Si
## 9     0               5        2                         75.00000            Si
## 10 4741              30        4                        225.00000            Si
## 11    0              25        9                         83.33333            Si
## 12    0              15        9                         50.00000            Si
## 13    0              30        3                        300.00000            Si
## 14    0              30        4                        225.00000            Si
## 15 9602               5        2                         75.00000            Si
## 16 4721              20        1                        600.00000            Si
## 17 4719              20        2                        300.00000            Si
## 18    0              15        3                        150.00000            Si
## 19    0              25        1                        750.00000            Si
## 20    0              30        2                        450.00000            Si
## 21    0              20        6                        100.00000            Si
## 22    0              20        5                        120.00000            Si
## 23    0              15        4                        112.50000            Si
## 24 4542              15        3                        150.00000            Si
## 25    0              30        3                        300.00000            Si
## 26    0              30        7                        128.57143            Si
## 27    0              30        6                        150.00000            Si
## 28    0              30        3                        300.00000            Si
##    Ambulante GENERO
## 1         No      M
## 2         No      M
## 3         No      M
## 4         Si      F
## 5         No      F
## 6         No      M
## 7         No      F
## 8         No      F
## 9         Si      M
## 10        No      M
## 11        Si      F
## 12        Si      F
## 13        Si      F
## 14        Si      M
## 15        No      F
## 16        Si      M
## 17        No      F
## 18        No      M
## 19        Si      M
## 20        Si      M
## 21        Si      M
## 22        Si      M
## 23        Si      F
## 24        No      M
## 25        Si      M
## 26        Si      F
## 27        Si      M
## 28        Si      M

Definir las líneas de pobreza

linea_pobreza <- 435.375
linea_pobreza_extrema <- 218.846
rentabilidad_por_miembro_mensual <- datos_sin_outliers %>%
  filter(CabezaFamilia == "Si" & VentasN.Diarias < 33.33) %>% 
  mutate(Rentabilidad_Por_Miembro_Mensual = (VentasN.Diarias / Miembros) * 30) %>%  # Calcular la rentabilidad diaria neta por miembro y multiplicarla por 30
  mutate(Estado_Pobreza = case_when(
    Rentabilidad_Por_Miembro_Mensual < linea_pobreza_extrema ~ "Pobreza Extrema",
    Rentabilidad_Por_Miembro_Mensual < linea_pobreza ~ "Pobreza",
    TRUE ~ "No Pobreza" )) %>%  
  select(CIU, VentasN.Diarias, Miembros, Rentabilidad_Por_Miembro_Mensual, Estado_Pobreza, CabezaFamilia, Ambulante)  

conteo_pobreza <- rentabilidad_por_miembro_mensual %>%
  group_by(Estado_Pobreza) %>%
  summarise(Conteo = n())
print(as.data.frame(rentabilidad_por_miembro_mensual))
##     CIU VentasN.Diarias Miembros Rentabilidad_Por_Miembro_Mensual
## 1  4520              25        3                        250.00000
## 2  4520              20        5                        120.00000
## 3  5611              10        1                        300.00000
## 4     0              20        5                        120.00000
## 5  5613              20        4                        150.00000
## 6  4520              30        5                        180.00000
## 7  5611              20        4                        150.00000
## 8  4752              30        2                        450.00000
## 9     0               5        2                         75.00000
## 10 4741              30        4                        225.00000
## 11    0              25        9                         83.33333
## 12    0              15        9                         50.00000
## 13    0              30        3                        300.00000
## 14    0              30        4                        225.00000
## 15 9602               5        2                         75.00000
## 16 4721              20        1                        600.00000
## 17 4719              20        2                        300.00000
## 18    0              15        3                        150.00000
## 19    0              25        1                        750.00000
## 20    0              30        2                        450.00000
## 21    0              20        6                        100.00000
## 22    0              20        5                        120.00000
## 23    0              15        4                        112.50000
## 24 4542              15        3                        150.00000
## 25    0              30        3                        300.00000
## 26    0              30        7                        128.57143
## 27    0              30        6                        150.00000
## 28    0              30        3                        300.00000
##     Estado_Pobreza CabezaFamilia Ambulante
## 1          Pobreza            Si        No
## 2  Pobreza Extrema            Si        No
## 3          Pobreza            Si        No
## 4  Pobreza Extrema            Si        Si
## 5  Pobreza Extrema            Si        No
## 6  Pobreza Extrema            Si        No
## 7  Pobreza Extrema            Si        No
## 8       No Pobreza            Si        No
## 9  Pobreza Extrema            Si        Si
## 10         Pobreza            Si        No
## 11 Pobreza Extrema            Si        Si
## 12 Pobreza Extrema            Si        Si
## 13         Pobreza            Si        Si
## 14         Pobreza            Si        Si
## 15 Pobreza Extrema            Si        No
## 16      No Pobreza            Si        Si
## 17         Pobreza            Si        No
## 18 Pobreza Extrema            Si        No
## 19      No Pobreza            Si        Si
## 20      No Pobreza            Si        Si
## 21 Pobreza Extrema            Si        Si
## 22 Pobreza Extrema            Si        Si
## 23 Pobreza Extrema            Si        Si
## 24 Pobreza Extrema            Si        No
## 25         Pobreza            Si        Si
## 26 Pobreza Extrema            Si        Si
## 27 Pobreza Extrema            Si        Si
## 28         Pobreza            Si        Si
print(as.data.frame(conteo_pobreza))
##    Estado_Pobreza Conteo
## 1      No Pobreza      4
## 2         Pobreza      8
## 3 Pobreza Extrema     16

Definir las líneas de pobreza.

linea_pobreza = 435.375
linea_pobreza_extrema = 218.846
rentabilidad_por_miembro_mensual = datos_sin_outliers %>%
  filter(CabezaFamilia == "Si" & VentasN.Diarias < 33.33) %>% 
  mutate(Rentabilidad_Por_Miembro_Mensual = (VentasN.Diarias / Miembros) * 30) %>%  # Calcular la rentabilidad diaria neta por miembro y multiplicarla por 30
  mutate(Estado_Pobreza = case_when(
    Rentabilidad_Por_Miembro_Mensual < linea_pobreza_extrema ~ "Pobreza Extrema",
    Rentabilidad_Por_Miembro_Mensual < linea_pobreza ~ "Pobreza",
    TRUE ~ "No Pobreza")) %>%  
  select(CIU, GENERO, Ambulante, VentasN.Diarias, Miembros, Rentabilidad_Por_Miembro_Mensual, Estado_Pobreza, CabezaFamilia)
conteo_pobreza_por_genero_ambulante <- rentabilidad_por_miembro_mensual %>%
  group_by(Estado_Pobreza, GENERO, Ambulante) %>%
  summarise(Conteo = n())
## `summarise()` has grouped output by 'Estado_Pobreza', 'GENERO'. You can
## override using the `.groups` argument.
print(as.data.frame(rentabilidad_por_miembro_mensual))
##     CIU GENERO Ambulante VentasN.Diarias Miembros
## 1  4520      M        No              25        3
## 2  4520      M        No              20        5
## 3  5611      M        No              10        1
## 4     0      F        Si              20        5
## 5  5613      F        No              20        4
## 6  4520      M        No              30        5
## 7  5611      F        No              20        4
## 8  4752      F        No              30        2
## 9     0      M        Si               5        2
## 10 4741      M        No              30        4
## 11    0      F        Si              25        9
## 12    0      F        Si              15        9
## 13    0      F        Si              30        3
## 14    0      M        Si              30        4
## 15 9602      F        No               5        2
## 16 4721      M        Si              20        1
## 17 4719      F        No              20        2
## 18    0      M        No              15        3
## 19    0      M        Si              25        1
## 20    0      M        Si              30        2
## 21    0      M        Si              20        6
## 22    0      M        Si              20        5
## 23    0      F        Si              15        4
## 24 4542      M        No              15        3
## 25    0      M        Si              30        3
## 26    0      F        Si              30        7
## 27    0      M        Si              30        6
## 28    0      M        Si              30        3
##    Rentabilidad_Por_Miembro_Mensual  Estado_Pobreza CabezaFamilia
## 1                         250.00000         Pobreza            Si
## 2                         120.00000 Pobreza Extrema            Si
## 3                         300.00000         Pobreza            Si
## 4                         120.00000 Pobreza Extrema            Si
## 5                         150.00000 Pobreza Extrema            Si
## 6                         180.00000 Pobreza Extrema            Si
## 7                         150.00000 Pobreza Extrema            Si
## 8                         450.00000      No Pobreza            Si
## 9                          75.00000 Pobreza Extrema            Si
## 10                        225.00000         Pobreza            Si
## 11                         83.33333 Pobreza Extrema            Si
## 12                         50.00000 Pobreza Extrema            Si
## 13                        300.00000         Pobreza            Si
## 14                        225.00000         Pobreza            Si
## 15                         75.00000 Pobreza Extrema            Si
## 16                        600.00000      No Pobreza            Si
## 17                        300.00000         Pobreza            Si
## 18                        150.00000 Pobreza Extrema            Si
## 19                        750.00000      No Pobreza            Si
## 20                        450.00000      No Pobreza            Si
## 21                        100.00000 Pobreza Extrema            Si
## 22                        120.00000 Pobreza Extrema            Si
## 23                        112.50000 Pobreza Extrema            Si
## 24                        150.00000 Pobreza Extrema            Si
## 25                        300.00000         Pobreza            Si
## 26                        128.57143 Pobreza Extrema            Si
## 27                        150.00000 Pobreza Extrema            Si
## 28                        300.00000         Pobreza            Si
print(as.data.frame(conteo_pobreza_por_genero_ambulante))
##     Estado_Pobreza GENERO Ambulante Conteo
## 1       No Pobreza      F        No      1
## 2       No Pobreza      M        Si      3
## 3          Pobreza      F        No      1
## 4          Pobreza      F        Si      1
## 5          Pobreza      M        No      3
## 6          Pobreza      M        Si      3
## 7  Pobreza Extrema      F        No      3
## 8  Pobreza Extrema      F        Si      5
## 9  Pobreza Extrema      M        No      4
## 10 Pobreza Extrema      M        Si      4

CIIU con mayores ventas y empelos grafica

library(ggplot2)
library(dplyr)
library(gridExtra)
## 
## Adjuntando el paquete: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
promedio_ventas_empleados_por_ciu = datos_sin_outliers %>%
  group_by(CIU) %>%
  summarise(
    Promedio_VentasNetasDiarias = mean(VentasN.Diarias, na.rm = TRUE),
    Promedio_Empleados = mean(Empleados, na.rm = TRUE)
  ) %>%
  arrange(desc(Promedio_VentasNetasDiarias))

top_ciu_ventas <- promedio_ventas_empleados_por_ciu %>%
  top_n(5, Promedio_VentasNetasDiarias)

grafico_dispersión_ventas <- ggplot(top_ciu_ventas, aes(x = Promedio_Empleados, y = Promedio_VentasNetasDiarias, label = CIU)) +
  geom_point(size = 5, color = "blue", alpha = 0.7) +
  geom_text(vjust = -1, size = 3.5) +
  labs(title = "Top 5 CIUs en Ventas Netas Diarias Promedio",
       x = "Promedio de Empleados",
       y = "Promedio de Ventas Netas Diarias") +
  theme_minimal()

promedio_ventas_empleados_por_ciu <- datos_sin_outliers %>%
  group_by(CIU) %>%
  summarise(
    Promedio_VentasNetasDiarias = mean(VentasN.Diarias, na.rm = TRUE),
    Promedio_Empleados = mean(Empleados, na.rm = TRUE)
  ) %>%
  arrange(desc(Promedio_Empleados))

top_ciu_empleados <- promedio_ventas_empleados_por_ciu %>%
  top_n(5, Promedio_Empleados)

grafico_dispersión_empleados <- ggplot(top_ciu_empleados, aes(x = Promedio_Empleados, y = Promedio_VentasNetasDiarias, label = CIU)) +
  geom_point(size = 5, color = "green", alpha = 0.7) +
  geom_text(vjust = -1, size = 3.5) +
  labs(title = "Top 5 CIUs en Promedio de Empleados",
       x = "Promedio de Empleados",
       y = "Promedio de Ventas Netas Diarias") +
  theme_minimal()
grid.arrange(grafico_dispersión_ventas, grafico_dispersión_empleados, ncol = 2)

Calcular las ventas netas por género, si son vendedores ambulantes y si son cabeza de familia

ventas_net_ambulante <- datos_sin_outliers %>%
  filter(Ambulante == "Si") %>% 
  group_by(GENERO, CabezaFamilia) %>%
  summarise(VentasN_Diarias_Total = mean(VentasN.Diarias, na.rm = TRUE)) %>%
  ungroup()
## `summarise()` has grouped output by 'GENERO'. You can override using the
## `.groups` argument.
print(ventas_net_ambulante)
## # A tibble: 4 × 3
##   GENERO CabezaFamilia VentasN_Diarias_Total
##   <chr>  <chr>                         <dbl>
## 1 F      No                             40  
## 2 F      Si                             49.3
## 3 M      No                             65  
## 4 M      Si                             68.4

promedio de empelados y total por condicion.

empleados_por_ambulante = datos_sin_outliers %>%
  group_by(Ambulante) %>%  
  summarise(Total_Empleados = sum(Empleados, na.rm = TRUE), Promedio_Empleados = mean(Empleados, na.rm = TRUE))
print(as.data.frame(empleados_por_ambulante))
##   Ambulante Total_Empleados Promedio_Empleados
## 1        No             472           2.826347
## 2        Si              13           0.250000

Grafico de bigote de empleados por condición de ambulantes

grafico_caja_bigote <- ggplot(datos_sin_outliers, aes(x = Ambulante, y = Empleados, fill = Ambulante)) +
  geom_boxplot(alpha = 0.7) + 
  labs(title = " ",
       y = "Numero de Empleados",
       x = "Es Ambulante") +
  scale_fill_manual(values = c("No" = "green", "Si" = "blue")) + 
  theme_minimal() +
  theme(legend.position = "none",  
        axis.text.x = element_text(size = 10), 
        axis.text.y = element_text(size = 10)) 
print(grafico_caja_bigote)

#lo hice para determinar datos atipicos, pero a consideración mia estos datos con atipicos se puede dejar.

Saber cuantas personas mayores de 60 años

conteo_por_genero <- datos_sin_outliers %>%
  group_by(GENERO) %>%
  summarise(Total_Personas = n())
conteo_mayores_60 = datos_sin_outliers %>%
  filter(Edad > 60) %>%
  group_by(GENERO) %>%
  summarise(Mayores_60 = n())
print("Total de personas por género:")
## [1] "Total de personas por género:"
print(conteo_por_genero)
## # A tibble: 2 × 2
##   GENERO Total_Personas
##   <chr>           <int>
## 1 F                  81
## 2 M                 138
print("Personas mayores de 60 años por género:")
## [1] "Personas mayores de 60 años por género:"
print(conteo_mayores_60)
## # A tibble: 2 × 2
##   GENERO Mayores_60
##   <chr>       <int>
## 1 F               8
## 2 M              16

Estadisticas de la edad por genero en condición de ambulante

ambulantes <- datos_sin_outliers %>%
  filter(Ambulante == "Si")
estadisticas_edad_genero <- ambulantes %>%
  group_by(GENERO) %>%
  summarise(
    Total = n(),
    Promedio_Edad = mean(Edad, na.rm = TRUE),
    Mediana_Edad = median(Edad, na.rm = TRUE),
    Desviacion_Estandar = sd(Edad, na.rm = TRUE),
    Edad_Minima = min(Edad, na.rm = TRUE),
    Edad_Maxima = max(Edad, na.rm = TRUE)
  )
print(estadisticas_edad_genero)
## # A tibble: 2 × 7
##   GENERO Total Promedio_Edad Mediana_Edad Desviacion_Estandar Edad_Minima
##   <chr>  <int>         <dbl>        <dbl>               <dbl>       <dbl>
## 1 F         18          37.7         37                  12.8          19
## 2 M         34          46.6         45.5                15.3          23
## # ℹ 1 more variable: Edad_Maxima <dbl>

Calcular el número de personas que no saben leer y escribir, clasificado por género.

personas_no_letradas_por_genero = datos_sin_outliers %>%
  filter(Letrado == "No") %>%  
  group_by(GENERO) %>%  
  summarise(Conteo_Personas = n())
print(as.data.frame(personas_no_letradas_por_genero))
##   GENERO Conteo_Personas
## 1      F               3
## 2      M              17
grafico_barras_letrados = ggplot(personas_no_letradas_por_genero, aes(x = GENERO, y = Conteo_Personas, fill = GENERO)) + geom_bar(stat = "identity", alpha = 0.7) + geom_text(aes(label = Conteo_Personas), vjust = -0.5, color = "black", size = 3.5) +  labs(title = "Numero de Personas que No Saben Leer y Escribir por Genero",
       x = "Genero",
       y = "Cantidad de Personas") + theme_minimal() + scale_fill_manual(values = c("M" = "blue", "F" = "pink"))  
print(grafico_barras_letrados)

Calcular el número de personas que no saben leer y escribir, clasificado por género y si son ambulantes

personas_no_letradas_por_genero_y_ambulante <- datos_sin_outliers %>%
  filter(Letrado == "No") %>% # No es de que no saben escribir ni leer
  group_by(GENERO, Ambulante) %>% 
  summarise(Conteo_Personas = n())
## `summarise()` has grouped output by 'GENERO'. You can override using the
## `.groups` argument.
personas_no_letradas_por_genero_y_ambulante
## # A tibble: 3 × 3
## # Groups:   GENERO [2]
##   GENERO Ambulante Conteo_Personas
##   <chr>  <chr>               <int>
## 1 F      No                      3
## 2 M      No                     12
## 3 M      Si                      5

GRAFICO DE BIGOTES PARA EL ANTES Y EL DESPUES DE LA ELIMINACIÓN DE LOS OUTLIERS EN VENTAS

library(dplyr)
library(tidyr)
## 
## Adjuntando el paquete: 'tidyr'
## The following object is masked from 'package:magrittr':
## 
##     extract
library(gridExtra)
mark_outliers_na <- function(x) {
  Q1 <- quantile(x, 0.25, na.rm = TRUE)
  Q3 <- quantile(x, 0.75, na.rm = TRUE)
  IQR <- Q3 - Q1
  lower_bound <- Q1 - 1.5 * IQR
  upper_bound <- Q3 + 1.5 * IQR
  x <- ifelse(x < lower_bound | x > upper_bound, NA, x)
  return(x)
}

datos_con_outliers = datos %>%
  select(CabezaFamilia, VentasDiarias, VentasN.Diarias) %>%
  mutate(Outliers = "Con Outliers")

datos_sin_outliers = datos %>%
  mutate(VentasDiarias = mark_outliers_na(VentasDiarias),
         VentasN.Diarias = mark_outliers_na(VentasN.Diarias)) %>%
  select(CabezaFamilia, VentasDiarias, VentasN.Diarias) %>%
  mutate(Outliers = "Sin Outliers")

datos_combinados = bind_rows(datos_sin_outliers, datos_con_outliers)

datos_largos = datos_combinados %>%
  pivot_longer(cols = c(VentasDiarias, VentasN.Diarias), names_to = "Tipo_Venta", values_to = "Ventas")

grafico_cajas = ggplot(datos_largos, aes(x = CabezaFamilia, y = Ventas, fill = CabezaFamilia)) + geom_boxplot(alpha = 0.7) + facet_wrap(~ Tipo_Venta + Outliers, scales = "free_y", ncol = 2) +
  labs(title = "", x = "Cabeza de Familia", y = "Ventas",
       fill = "Cabeza de Familia") + theme_minimal()
print(grafico_cajas)
## Warning: Removed 46 rows containing non-finite outside the scale range
## (`stat_boxplot()`).