¿Qué es el Padrón Único de Personas Beneficiarias (PUPB) de la CDMX?

A continuación explicamos algunas aplicaciones básicas de R para realizar consulatas del PUPB.

Preparar el entorno en R .-

Para cargar el padrón de benficiarias a R necesitamos asignar el padrón a un objeto y cargarlo con la función read.csv.

padron<-read.csv("/.../padron_out.csv")

Donde /…/ corresponde a la ubicación del archivo en tu comptadora. Tardará un poco debido el tamaño del archivo; una vez cargado, si usas RStudio, aparecerá en el recuadro de Environment.

1.1 Entorno RStudio

Primeramente revisaremos funciones que el paquete Base de R puede correr y poseriormente consultas completas con ayuda de paquetes complementarios.

Consultas de Información con tidyverse .-

El script a continuación requiere de la librería tidyverse: una colección de paquetes con funciones en R para el manejo de Bases de Datos. El código que trataremos a continuación requiere a R descargar y habilitar este paquete, ésto se logra con la función:

require(tidyverse)

Las funciones de tidyverse nos permiten extraer más información de manera eficiente de las bases de datos.

Como ejemplo la función glimpse incluída en tidyverse, a comparación de names en el paquete base, no solamente nos proporciona los nombres de las columnas, sino el tipo de dato en cada columna.

names(padron) #Paquete Base
##  [1] "X"                 "id_persona"        "apellido_1"       
##  [4] "apellido_2"        "nombre"            "edad"             
##  [7] "sexo"              "alcaldia"          "cve_alcaldia"     
## [10] "colonia"           "monto_apoyo"       "tipo_apoyo"       
## [13] "nombre_programa"   "cve_programa"      "dependencia"      
## [16] "cve_dependencia"   "tipo_persona"      "tipo_beneficiario"
## [19] "tipo_programa"
glimpse(padron) #tidyverse
## Rows: 2,390,870
## Columns: 19
## $ X                 <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1…
## $ id_persona        <chr> "0000238327e75611c93d28c1cd9b1a95", "0000238327e7561…
## $ apellido_1        <chr> "SANCHEZ", "SANCHEZ", "CASTELLANOS", "CASTELLANOS", …
## $ apellido_2        <chr> "CARRILLO", "CARRILLO", "VEGA", "VEGA", "CASTELLANOS…
## $ nombre            <chr> "ELDHER JESUS", "ELDHER JESUS", "SANTIAGO", "SANTIAG…
## $ edad              <int> 15, 15, 9, 10, 9, 9, 12, 13, 12, 12, 15, 15, 15, 15,…
## $ sexo              <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ alcaldia          <chr> "COYOACAN", "COYOACAN", "VENUSTIANO CARRANZA", "VENU…
## $ cve_alcaldia      <int> 3, 3, 17, 17, 17, 17, 5, 5, 5, 5, 6, 6, 6, 7, 7, 8, …
## $ colonia           <chr> "PUEBLO PUEBLO DE SANTA URSULA COAPA", "PUEBLO PUEBL…
## $ monto_apoyo       <dbl> 1500, 1980, 1500, NA, 3300, 820, 1500, NA, 2310, 820…
## $ tipo_apoyo        <chr> "M", "M", "M", "E", "M", "M", "M", "E", "M", "M", "M…
## $ nombre_programa   <chr> "APOYO A LAS FAMILIAS DE LAS ALUMNAS Y LOS ALUMNOS I…
## $ cve_programa      <chr> "005_36PFEG_AS", "001_36PFEG_A", "005_36PFEG_AS", "0…
## $ dependencia       <chr> "FIDEICOMISO DE EDUCACIÓN GARANTIZADA DE LA CIUDAD D…
## $ cve_dependencia   <chr> "36PFEG", "36PFEG", "36PFEG", "08PDDF", "36PFEG", "0…
## $ tipo_persona      <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ tipo_beneficiario <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ tipo_programa     <int> 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1…

Algunas de funciones más útiles para ver y manejar la información de bases grandes como el padrón dentro de tidyverse son las siguientes:

  • table().- selecciona una columna regresa un objeto (tibble) con las observaciones únicas de esa columna y el número de veces que aparecen en el data.frame.

  • select().- selecciona las columnas que quieres ver o sobre las cuales operar en lugar de toda la base.

  • filter().- selecciona un filtro lógico para ver u operar sobre la base.

  • group_(), group_split().- agrupa la información de la tabla de acuerdo a los grupos de variables que tenga una columna.

  • summarise().- hace uso de la información de una o más columnas seleccionadas y crea una nueva columna con la información deseada.

Para más información sobre las funciones y distintos usos de tidyverse consuylta en su página aquí.

El poder de tidyverse es la capacidad de combinar este tipo de funciones haciendo uso del operaror pipe: %>% para hacer análisis de data frames grandes información.

Ejemplo.- Beneficiarios en Benito Juarez

A continuación se presenta un ejemplo comentado con estas funciones para analizar ver los grupos de hombres beneficiados en la alcaldía Benito Juarez por programas sociales y la suma acumulada del dinero en transferencias monetarias.

Con table podemos ver qué tipo de apoyos existen, vemos que está codificado en uno o dos caracteres, por lo que tenemos que consultar el diccionario de datos para localizar cuál es la letra que corresponde a transferencias monetarias.

En este caso la letra M corresponde a transferencias únicamente monetarias.

table(padron$tipo_apoyo) #Vemos los tipos de apoyo que existen; de acuerdo al diccionario de datos M se refiere a transferencias monetarias
## 
##       E       M      MS       S 
##  350680 2022252   17920      18

Haciendo uso de select filtramos las columnas que utilizaremos; esto optimiza los procesos posteriores del análisis. Finalmente vemos los filtros que necesitamos; hay que recordar que los filtros se aplican de manera secuencial por lo que el filtro se aplica de la siguiente manera:

  1. sexo == 0, caracteriza a los hombres de acuerdo al diccionario.
  2. alcaldia == BENITO JUAREZ, nos da aquellas obaservaciones dentro de la alcaldía.
  3. tipo_de_apoyo == M, selecciona las trasnferencias monetarias de acuerdo al diccionario.
  4. tipo_programa == 1, selecciona a los programas, no acciones sociales, dentro del padrón.
padron %>%  select(sexo,tipo_apoyo,tipo_programa,cve_alcaldia,monto_apoyo,alcaldia) %>% 
  filter(sexo==0 & alcaldia=="BENITO JUAREZ" & tipo_apoyo=="M" &  tipo_programa==1) %>% 
  head()
##   sexo tipo_apoyo tipo_programa cve_alcaldia monto_apoyo      alcaldia
## 1    0          M             1           14        3300 BENITO JUAREZ
## 2    0          M             1           14         820 BENITO JUAREZ
## 3    0          M             1           14        3300 BENITO JUAREZ
## 4    0          M             1           14         820 BENITO JUAREZ
## 5    0          M             1           14        1200 BENITO JUAREZ
## 6    0          M             1           14         720 BENITO JUAREZ

Finalmente, a esta tabla filtrada, aplicamos summarise para desplegar la suma de la columna monto_de_apoyo, removiendo aquellas columnas que puedan estar incompletas, para obtener el el monto total de programas sociales en transferencias monetarias para Benito Juarez.

padron %>%  select(sexo,tipo_apoyo,tipo_programa,cve_alcaldia,monto_apoyo,alcaldia) %>% 
  filter(sexo==0 & alcaldia=="BENITO JUAREZ" & tipo_apoyo=="M" &  tipo_programa==1) %>%  
  summarise(sum(monto_apoyo,na.rm = T)) 
##   sum(monto_apoyo, na.rm = T)
## 1                    35645350

Incluímos el código en el script lectura_beneficiarios.R para este ejemplo en expecífico y alentamos a los usuarios realizar consultas del padrón haciendo uso de R para cualquier investigación con bases grandes, no sólamente el PUDB.

Conseguir Beneficiarias Únicas.-

Un último ejemplo que puede ser de interés es el conseguir a los beneficiarias únicas de programas de la ciudad.

Por la naturaleza misma de estos programas y acciones sociales, una persona puede recibir más de un apoyo o beneficio siempre y cuando así se establezca en las reglas de operación. Entre ellas generar un subset de la base del padrón con los beneficiarias únicas. Es decir con las personas que reciben al menos un apoyo o beneficio de algún programa o acción social.

# Generar beneficiarios unicos:
BeneficiariosUnicos <- padron %>% group_by(id_persona,
                                           apellido_1,
                                           apellido_2,
                                           nombre,
                                           tipo_persona) %>% 
  summarise(Edad=round(mean(edad,na.rm = T),0),
            Registros=n())

Incluimos esta función en el script lectura_beneficiarios.R.

¡La transparencia y rendición de cuentas es labor de todos!