Introducción

Objetivos

Generales

Específicos

Fuente de datos

https://datos.sfp.gov.py/data/funcionarios/download

Gestión de datos

Cargar librerias necesarias

#install.packages("Nombre_D_libreria")

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.2     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(dplyr)
library(data.table)
## 
## Adjuntando el paquete: 'data.table'
## 
## The following objects are masked from 'package:lubridate':
## 
##     hour, isoweek, mday, minute, month, quarter, second, wday, week,
##     yday, year
## 
## The following objects are masked from 'package:dplyr':
## 
##     between, first, last
## 
## The following object is masked from 'package:purrr':
## 
##     transpose
library(ggplot2)

Lectura de datos mensual

# 
 ruta=("G:/Mi unidad/FACEN_BIGDATA/FACEN_BIG_DATA_2DO_SEM_2026/FACEN_BIG_DATA_2DO_SEM_2026/datos_funcion_publica_py/")
# 
# # cargar julio del 2015
# 
# fp2015jul = fread(paste0(ruta, "funcionarios_2015_7.csv"))
# fp2016jul = fread(paste0(ruta, "funcionarios_2016_7.csv"))
# fp2017jul = fread(paste0(ruta, "funcionarios_2017_7.csv"))
# fp2018jul = fread(paste0(ruta, "funcionarios_2018_7.csv"))
# fp2019jul = fread(paste0(ruta, "funcionarios_2019_7.csv"))
# fp2020jul = fread(paste0(ruta, "funcionarios_2020_7.csv"))
# fp2021jul = fread(paste0(ruta, "funcionarios_2021_7.csv"))
# fp2022jul = fread(paste0(ruta, "funcionarios_2022_7.csv"))
# fp2023jul = fread(paste0(ruta, "funcionarios_2023_7.csv"))
# fp2024jul = fread(paste0(ruta, "funcionarios_2024_7.csv"))
# fp2025jul = fread(paste0(ruta, "funcionarios_2025_7.csv"))
# fp2026jul = fread(paste0(ruta, "funcionarios_2026_7.csv"))

Compilado de los meses en una sola base

# codigo para juntar todos los meses

# fp=rbind(fp2015jul, fp2016jul, fp2017jul, fp2018jul, fp2019jul, fp2020jul, fp2021jul, fp2022jul, fp2023jul, fp2024jul, fp2025jul, fp2026jul)
# 
# nrow(fp)

Verificar campos

#names(fp)
#table(fp$anho)
#cbind(sort(table(fp$descripcion_entidad),decreasing= TRUE))

Filtro de la base

#fpsalud=fp[descripcion_entidad=="MINISTERIO DE SALUD PUBLICA Y BIENESTAR SOCIAL"]
#nrow(fpsalud)

guardar la base filtrada en un formato optimo

#install.packages(fst)
#library(fst)
#write_fst(fpsalud, paste0(ruta, "fpsalud_filtrada.fst"), compress = 50)

cargar la base guardada

library(fst)
fps=read_fst(paste0(ruta, "fpsalud_filtrada.fst"))
names(fps)
##  [1] "anho"                  "mes"                   "nivel"                
##  [4] "descripcion_nivel"     "entidad"               "descripcion_entidad"  
##  [7] "oee"                   "descripcion_oee"       "documento"            
## [10] "nombres"               "apellidos"             "funcion"              
## [13] "estado"                "carga_horaria"         "anho_ingreso"         
## [16] "sexo"                  "discapacidad"          "tipo_discapacidad"    
## [19] "fuente_financiamiento" "objeto_gasto"          "concepto"             
## [22] "linea"                 "categoria"             "cargo"                
## [25] "presupuestado"         "devengado"             "movimiento"           
## [28] "lugar"                 "fecha_nacimiento"      "fec_ult_modif"        
## [31] "uri"                   "fecha_acto"            "correo"               
## [34] "profesion"             "motivo_movimiento"
nrow(fps)
## [1] 1191762

revisamos los campos documento y devengado

library(data.table)
setDT(fps) # Convierte fps a data.table
str(fps$documento)
##  chr [1:1191762] "VAC985064" "VAC985065" "VAC985066" "VAC985067" ...
str(fps$devengado)
##  int [1:1191762] 0 0 0 0 0 0 0 0 0 0 ...

Calcular el salario total por persona

Eliminar las filas donde es salario es nulo

nrow(fps)
## [1] 1191762
fps=fps[devengado>0]

nrow(fps)
## [1] 1145391
# calcula la suma de los salarios en el mes para cada nro de documento

fpsd <- fps[, .(salariotot = sum(devengado)), by = .(documento, mes, anho)]
nrow(fpsd)
## [1] 507679

explorar la distribucion de salarios

summary(fpsd$salariotot)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
##        1  2850000  3861520  4930502  5689534 57030302
hist(fpsd$salariotot)

boxplot(fpsd$salariotot)

calcular la variacion interanual de los salarios individuales

# 1. Es crucial ordenar los datos cronológicamente por persona
setorder(fpsd, documento, mes, anho)

# 2. Calcular la variación ( (Salario Actual / Salario Anterior) - 1 )
fpsd[, varisal := (salariotot / shift(salariotot, type = "lag")) - 1, by = .(documento, mes)]

distribucion de los incrementos

summary(fpsd$varisal)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   -0.99   -0.02    0.00    0.07    0.08  239.96   71873

Resultados

dibujar el valor medio del incremento salarial por año

tabla de valores promedio de variacion por año

tabla1 <- fpsd[, .(varisalmedio = mean(varisal, na.rm = TRUE)), by = anho]
tabla1
##      anho varisalmedio
##     <int>        <num>
##  1:  2016          NaN
##  2:  2017  0.020919274
##  3:  2018  0.063337230
##  4:  2019  0.105013401
##  5:  2020  0.003453315
##  6:  2021  0.132835056
##  7:  2022  0.041352240
##  8:  2023  0.129581840
##  9:  2024  0.159169008
## 10:  2025  0.057148109
## 11:  2026 -0.091414759
barplot(varisalmedio ~ anho, data = tabla1)

Conclusión