Spaces:
Runtime error
Runtime error
hedtorresca
commited on
Commit
•
776f39e
1
Parent(s):
9c58281
Upload Test_3 (1) (2).qmd
Browse files- src/notebooks/Test_3 (1) (2).qmd +237 -0
src/notebooks/Test_3 (1) (2).qmd
ADDED
@@ -0,0 +1,237 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
title: "Seguimiento Cifras Consumo Individual"
|
3 |
+
author: "Equipo IDN - Cristhian Buitrago"
|
4 |
+
format:
|
5 |
+
revealjs:
|
6 |
+
self-contained: true
|
7 |
+
theme: simple
|
8 |
+
css: styles.css
|
9 |
+
editor: visual
|
10 |
+
---
|
11 |
+
|
12 |
+
## Proceso
|
13 |
+
|
14 |
+
Actualmente el equipo de IDN - Gerencia de Soluciones - Subdirección Comercial consolida la información de Consumo Individual y Empresarial, ésto se realiza de acuerdo con la información que se tiene disponible en SAP4HANA.
|
15 |
+
|
16 |
+
La recopilación de este proceso se realiza de forma mensual, mes vencido y con un plazo de entrega de los equipos BI de la caja de máximo el día 25 de cada mes.
|
17 |
+
|
18 |
+
La metodología empleada para la recopilación de la información fue construida por el equipo BI.
|
19 |
+
|
20 |
+
El presente reporte ilustra el seguimiento general de cifras de Consumo Individual por UES.
|
21 |
+
|
22 |
+
|
23 |
+
```{r setup, include=FALSE}
|
24 |
+
knitr::opts_chunk$set(echo = TRUE)
|
25 |
+
|
26 |
+
source('./Setup.R')
|
27 |
+
|
28 |
+
# **NIT: `r NIT` - `r nombreEmpresa`**
|
29 |
+
|
30 |
+
```
|
31 |
+
|
32 |
+
|
33 |
+
```{r cargue_bases, eval=TRUE, message=FALSE, warning=FALSE, include=FALSE, paged.print=FALSE}
|
34 |
+
|
35 |
+
Afiliados <- readRDS(file = './Consolidada Personas/Consol_Afiliados_MHE_2021_2024.rds')
|
36 |
+
Empresas <- readRDS(file = './Consolidada Empresas/Consol_Empresas_MHE_2021_2024.rds')
|
37 |
+
|
38 |
+
```
|
39 |
+
|
40 |
+
```{r filtro_empresa,echo=FALSE}
|
41 |
+
|
42 |
+
NIT <- "NIT8600073861"
|
43 |
+
MES <- as.Date.character('2024-04-01')
|
44 |
+
|
45 |
+
Data_Empresa <- Afiliados %>%
|
46 |
+
filter(id_empresa == NIT) %>%
|
47 |
+
mutate(Date = make_date(Year, Month, 1))
|
48 |
+
|
49 |
+
```
|
50 |
+
|
51 |
+
```{r variables_basicas,echo=FALSE}
|
52 |
+
|
53 |
+
# Num.afiliados
|
54 |
+
# Num.afiliados_cat_a
|
55 |
+
# Num.afiliados_cat_b
|
56 |
+
# Num.afiliados_cat_c
|
57 |
+
# Num.afiliados_basico
|
58 |
+
# Num.afiliados_medio
|
59 |
+
# Num.afiliados_joven
|
60 |
+
# Num.afiliados_alto
|
61 |
+
# Salario_Promedio
|
62 |
+
# RazonSocial
|
63 |
+
|
64 |
+
RazonSocial <- unique(Data_Empresa$RazonSocial)
|
65 |
+
NIT <- unique(Data_Empresa$id_empresa)
|
66 |
+
|
67 |
+
## Variables auxiliares
|
68 |
+
|
69 |
+
last_date <- max(Data_Empresa$Date)
|
70 |
+
|
71 |
+
```
|
72 |
+
|
73 |
+
```{r calculo_salarios, echo=FALSE, message=FALSE, warning=FALSE, paged.print=FALSE}
|
74 |
+
|
75 |
+
library(scales)
|
76 |
+
|
77 |
+
salario_promedio <- Data_Empresa %>%
|
78 |
+
filter(Date > last_date %m-% months(36)) %>% # Filtrar los últimos 36 meses
|
79 |
+
group_by(Periodo = case_when(
|
80 |
+
Date > last_date %m-% months(12) ~ "Últimos 12 meses",
|
81 |
+
Date > last_date %m-% months(24) ~ "Últimos 24 meses",
|
82 |
+
TRUE ~ "Últimos 36 meses"
|
83 |
+
)) %>%
|
84 |
+
summarise(Salario_Promedio = mean(Salario), .groups = 'drop')
|
85 |
+
|
86 |
+
# Formatear como valor monetario en millones
|
87 |
+
Salario.Prom.12 <- dollar(salario_promedio$Salario_Promedio[salario_promedio$Periodo == "Últimos 12 meses"] / 1e6, accuracy = 0.01, suffix = "M")
|
88 |
+
Salario.Prom.24 <- dollar(salario_promedio$Salario_Promedio[salario_promedio$Periodo == "Últimos 24 meses"] / 1e6, accuracy = 0.01, suffix = "M")
|
89 |
+
Salario.Prom.36 <- dollar(salario_promedio$Salario_Promedio[salario_promedio$Periodo == "Últimos 36 meses"] / 1e6, accuracy = 0.01, suffix = "M")
|
90 |
+
|
91 |
+
|
92 |
+
```
|
93 |
+
|
94 |
+
```{r Salarios_Promedio_date, message=FALSE, warning=FALSE, include=FALSE, paged.print=FALSE}
|
95 |
+
|
96 |
+
Data_Empresa$Date <- as.Date(Data_Empresa$Date)
|
97 |
+
|
98 |
+
Salario_Promedio_Fecha <- Data_Empresa %>%
|
99 |
+
group_by(Date) %>%
|
100 |
+
summarise(Promedio_Salarial = mean(Salario, na.rm = TRUE), .groups = 'drop') %>%
|
101 |
+
mutate(Promedio_Salarial_Formateado = dollar(Promedio_Salarial / 1e6, accuracy = 0.01, suffix = "M")) %>%
|
102 |
+
arrange(Date)
|
103 |
+
|
104 |
+
# Verificar la estructura de los datos ordenados
|
105 |
+
print(Salario_Promedio_Fecha)
|
106 |
+
```
|
107 |
+
|
108 |
+
```{r plot_salarios_mes, message=FALSE, warning=FALSE, include=FALSE, paged.print=FALSE}
|
109 |
+
|
110 |
+
library(ggplot2)
|
111 |
+
|
112 |
+
library(ggplot2)
|
113 |
+
library(plotly)
|
114 |
+
library(scales)
|
115 |
+
|
116 |
+
# Crear el gráfico con ggplot
|
117 |
+
ggplot_Salarios <- ggplot(Salario_Promedio_Fecha, aes(x = Date, y = Promedio_Salarial, group = 1)) + # 'group = 1' fuerza a ggplot a considerar todo como un solo grupo
|
118 |
+
geom_line(color = "blue", size = 1) +
|
119 |
+
geom_point(color = "red", size = 2, aes(text = paste("Fecha:", format(Date, "%d-%m-%Y"), "<br>Salario Promedio:", Promedio_Salarial_Formateado))) +
|
120 |
+
labs(x = "Fecha", y = "Promedio Salarial (Millones $)", title = "Promedio Salarial por Fecha", subtitle = "Evolución del salario promedio a lo largo del tiempo") +
|
121 |
+
theme_minimal() +
|
122 |
+
theme(plot.title = element_text(hjust = 0.5))
|
123 |
+
|
124 |
+
|
125 |
+
library(plotly)
|
126 |
+
|
127 |
+
# Convertir ggplot a plotly
|
128 |
+
Plot_Salarios_Interactive <- ggplotly(ggplot_Salarios, tooltip = "text")
|
129 |
+
|
130 |
+
# Ajustar el formato de fecha en el eje x
|
131 |
+
Plot_Salarios_Interactive <- Plot_Salarios_Interactive %>%
|
132 |
+
layout(xaxis = list(tickformat = "%d-%m-%Y"))
|
133 |
+
|
134 |
+
|
135 |
+
```
|
136 |
+
|
137 |
+
|
138 |
+
```{r num.promedio_afiliados,echo=FALSE}
|
139 |
+
|
140 |
+
# Contar afiliados únicos por mes y año
|
141 |
+
Afiliados_Mes <- Data_Empresa %>%
|
142 |
+
group_by(Year, Month) %>%
|
143 |
+
summarise(Afiliados_Unicos = n_distinct(id_persona), .groups = 'drop')
|
144 |
+
|
145 |
+
Afiliados_Promedio <- Data_Empresa %>%
|
146 |
+
filter(Date > last_date %m-% months(36)) %>% # Filtrar los últimos 36 meses
|
147 |
+
group_by(Periodo = case_when(
|
148 |
+
Date > last_date %m-% months(12) ~ "Últimos 12 meses",
|
149 |
+
Date > last_date %m-% months(24) ~ "Últimos 24 meses",
|
150 |
+
TRUE ~ "Últimos 36 meses"
|
151 |
+
)) %>%
|
152 |
+
summarise(Afiliados_Promedio = mean(n_distinct(id_persona)), .groups = 'drop')
|
153 |
+
|
154 |
+
Afiliados.Prom.12 <- Afiliados_Promedio$Afiliados_Promedio[Afiliados_Promedio$Periodo=='Últimos 12 meses']
|
155 |
+
Afiliados.Prom.24 <- Afiliados_Promedio$Afiliados_Promedio[Afiliados_Promedio$Periodo=='Últimos 36 meses']
|
156 |
+
Afiliados.Prom.36 <- Afiliados_Promedio$Afiliados_Promedio[Afiliados_Promedio$Periodo=='Últimos 36 meses']
|
157 |
+
|
158 |
+
# Edad Promedio
|
159 |
+
|
160 |
+
Edad_Promedio <- Data_Empresa %>%
|
161 |
+
filter(Date > last_date %m-% months(36)) %>% # Filtrar los últimos 36 meses
|
162 |
+
group_by(Periodo = case_when(
|
163 |
+
Date > last_date %m-% months(1) ~ "Último Mes",
|
164 |
+
Date > last_date %m-% months(12) ~ "Últimos 12 meses",
|
165 |
+
Date > last_date %m-% months(24) ~ "Últimos 24 meses",
|
166 |
+
TRUE ~ "Últimos 36 meses"
|
167 |
+
)) %>%
|
168 |
+
summarise(Edad_Promedio = mean(Edad), .groups = 'drop')
|
169 |
+
|
170 |
+
Edad.Prom.1 <- round(Edad_Promedio$Edad_Promedio[Edad_Promedio$Periodo == "Último Mes"],1)
|
171 |
+
Edad.Prom.12 <- round(Edad_Promedio$Edad_Promedio[Edad_Promedio$Periodo == "Últimos 12 meses"],1)
|
172 |
+
Edad.Prom.24 <- round(Edad_Promedio$Edad_Promedio[Edad_Promedio$Periodo == "Últimos 24 meses"],1)
|
173 |
+
Edad.Prom.36 <- round(Edad_Promedio$Edad_Promedio[Edad_Promedio$Periodo == "Últimos 36 meses"],1)
|
174 |
+
|
175 |
+
```
|
176 |
+
|
177 |
+
```{r genero, echo=FALSE, message=FALSE, warning=FALSE, paged.print=FALSE}
|
178 |
+
|
179 |
+
Genero_Distribucion <- Data_Empresa %>%
|
180 |
+
group_by(Date, Genero) %>%
|
181 |
+
summarise(Count = n_distinct(id_persona), .groups = 'drop') %>%
|
182 |
+
group_by(Date) %>%
|
183 |
+
mutate(Total = sum(Count),
|
184 |
+
Porcentaje = (Count / Total) * 100,
|
185 |
+
Porcentaje_Formateado = paste0(format(round(Porcentaje, 1), nsmall = 1), "%"),
|
186 |
+
Tooltip = paste(format(Date, "%d-%m-%Y"), "\nGénero: ", Genero, "\n", Porcentaje_Formateado, " (", Count, " personas)"))
|
187 |
+
|
188 |
+
|
189 |
+
```
|
190 |
+
|
191 |
+
```{r plot_genero, message=FALSE, warning=FALSE, include=FALSE, paged.print=TRUE}
|
192 |
+
|
193 |
+
# Crear el gráfico con ggplot
|
194 |
+
ggplot_Generos <- ggplot(Genero_Distribucion, aes(x = Date, y = Porcentaje, fill = Genero, text = Tooltip)) +
|
195 |
+
geom_bar(stat = "identity", position = "fill") +
|
196 |
+
scale_fill_brewer(palette = "Set1") +
|
197 |
+
labs(x = "Fecha",
|
198 |
+
y = "Porcentaje",
|
199 |
+
title = "Distribución Porcentual por Género",
|
200 |
+
subtitle = "Distribución de género por fecha",
|
201 |
+
fill = "Género") +
|
202 |
+
theme_minimal() +
|
203 |
+
theme(plot.title = element_text(hjust = 0.5))
|
204 |
+
|
205 |
+
# Convertir ggplot a plotly con la configuración correcta de tooltips
|
206 |
+
Plot_Generos_Interactive <- plotly::ggplotly(ggplot_Generos, tooltip = "text")
|
207 |
+
|
208 |
+
# Ajustar formato de fecha en eje x y personalizar la presentación
|
209 |
+
# Plot_Generos_Interactive <- Plot_Generos_Interactive %>%
|
210 |
+
# layout(xaxis = list(tickformat = "%d-%m-%Y"))
|
211 |
+
#
|
212 |
+
|
213 |
+
```
|
214 |
+
|
215 |
+
# Datos básicos de la empresa
|
216 |
+
|
217 |
+
- Razón Social: `r RazonSocial`
|
218 |
+
- Empresa: `r NIT`
|
219 |
+
- Mes en estudio: `r MES`
|
220 |
+
- Afiliados Promedio (12 meses): `r Afiliados.Prom.12`
|
221 |
+
- Afiliados Promedio (24 meses): `r Afiliados.Prom.24`
|
222 |
+
- Salario Promedio (12 meses): `r Salario.Prom.12`
|
223 |
+
- Salario Promedio (24 meses): `r Salario.Prom.24`
|
224 |
+
- Edad Promedio: `r Edad.Prom.1`
|
225 |
+
|
226 |
+
# Promedio Salarial en el tiempo
|
227 |
+
|
228 |
+
```{r show_plot_salarios, echo=FALSE, message=FALSE, warning=FALSE, paged.print=FALSE}
|
229 |
+
|
230 |
+
# Visualizar el gráfico interactivo
|
231 |
+
Plot_Salarios_Interactive
|
232 |
+
|
233 |
+
|
234 |
+
```
|
235 |
+
|
236 |
+
|
237 |
+
|