class: center, middle, inverse, title-slide .title[ # Procesamiento de datos con {tidyverse} ] .subtitle[ ##
] .author[ ###
] --- # ¿Qué vimos? <br> ✅ Conceptos básicos de R (valores, vectores, data.framtes, funciones, objetos) <br> ✅ Cómo armar y organizar un proyecto de trabajo <br> ✅ Qué son los paquetes (o librerías) --- ## Hoja de Ruta .pull-left[ 📌 Flujo de trabajo en el Procesamiento de Datos <br> 📦 Paquete `{dplyr}` ``` 🔧 `select()` 🔧 `filter()` 🔧 `mutate()` 🔧 `rename()` 🔧 `arrange()` 🔧 `group_by()` 🔧 `summarise()` 🔧 `joins` ``` ] .pull-right[ 📌 La pipa (`|>` o `%>%`) <br> 📦 Paquete `{tidyr}` ``` 🔧 `pivot_longer()` 🔧 `pivot_wider()` ``` ] --- ## Configuración para esta clase <br> - Armar un proyeto de trabajo nuevo - Crear una carpeta en el llamada `datos` - Descargar la base de juguete [**relevamiento_indice_transparencia_2024.xlsx**](file:///home/pablote/Pablo/Proyectos/Estaci%C3%B3n%20R/Consultor%C3%ADa/intro_r_aaip/docs/datos/relevamiento_indice_transparencia_2024.xlsx) (Argentina) y ubicarla en la carpeta `datos` - Crear un **script** de trabajo. --- class: center, middle, inverse, hide-logo # Flujo de trabajo en el Procesamiento de Datos --- ## Flujo de trabajo en el Procesamiento de Datos <img src="data:image/png;base64,#../img/clase_3/proceso_ciencia_datos.jpg" width="60%" style="display: block; margin: auto;" /> --- class: center, middle, inverse, hide-logo # `{tidyverse}` --- ## ¿Qué es `{tidyverse}`? - Una colección de paquetes. - Comparten una filosofía acerca de los datos y la programación en R ("*tidy*" -*ordenado*-). - Tienen una coherencia para ser utilizados en conjunto. - Orientado a ser leído y escrito por y para seres humanos. - Una comunidad, basada en los principios del código abierto y trabajo colaborativo. --- ## ¿Qué es `{tidyverse}`? <img src="data:image/png;base64,#../img/clase_3/circuito_del_dato_tidy.png" width="60%" style="display: block; margin: auto;" /> --- ## `{tidyverse}` <br> - Instalación: ``` r install.packages("tidyverse") ``` --- ## `{tidyverse}` <br> - Cargo el paquete: ``` r library(tidyverse) ``` --- ## `{tidyverse}` - Nos evita tener que instalar uno por uno a cada paquete: ``` r install.packages("dplyr") install.packages("tidyr") install.packages("ggplot2") ``` <br> - Como también tener que convocarlos de a uno: ``` r library(dplyr) library(tidyr) library(ggplot2) ``` --- class: center, middle, hide-logo ![](data:image/png;base64,#../img/clase_3/logo dplyr.png) --- ## Funciones del paquete dplyr: <br> | **Función** | **Acción** | |:--------------|--------------------------------------:| | `select()` | *selecciona o descarta variables* | | `filter()` | *selecciona filas* | | `mutate()` | *crea / edita variables* | | `rename()` | *renombra variables* | | `group_by()` | *segmenta en funcion de una variable* | | `summarize()` | *genera una tabla de resúmen* | --- class: center, middle, inverse, hide-logo # **select()** <html><hr color='#EB811B' size=1px width=1600px></html> <html><p style="color:white;" align:"left">Elige o descarta columnas de una base de datos</p></html> --- ## `select()` <br> - La función tiene la siguiente estructura: - Escribo la función --> Doy el primer argumento: la `base de datos` ``` r select(`base_de_datos`, variable1, variable2) ``` -- - Indico el segundo conjunto de argumentos: las `variables (columnas)` a seleccionar ``` r select(base_de_datos, `variable1, variable2`) ``` --- ## `select()` ``` r select(base_de_datos, * id, nombre) ``` <img src="data:image/png;base64,#../img/clase_3/select_presentacion.png" width="65%" style="display: block; margin: auto;" /> --- ## Caso práctico ```r # Cargo paquete library(rio) # Importo datos base_ind_transp <- import("datos/relevamiento_indice_transparencia_2024.xlsx") ``` <br> ``` r # Exploro la base colnames(base_ind_transp) [1] "Marca temporal" [2] "Período" [3] "Tipo de organismo" [4] "Universidades:" [5] "Empresas y Entes del Sector Público Nacional" [6] "Organismos descentralizados" [7] "Administración central y desconcentrada" [8] "1.a) ¿Informa al menos uno de los elementos solicitados? (misión, objetivos, o ambos)" [9] "1.b) ¿La información está actualizada? \n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [10] "1.c) ¿La información está disponible en la pestaña de transparencia?" [11] "2.a) ¿Informa los servicios y/o trámites que presta a la ciudadanía? (nombre, descripción y vínculo o link)\n\n- Si (servicios y/o trámites con los 3 requisitos)\n- Parcialmente (servicios y/o trámites con al menos 1 requisito)\n- No (no presenta información)\n- No corresponde (aclara que no cuenta con servicios y/o trámites)" [12] "2.b) ¿La información está actualizada?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [13] "2.c) ¿La información está disponible en la pestaña de transparencia?" [14] "3.i.a) ¿Está completa la información sobre los 3 niveles de autoridades? (con nombre y apellido, cargo o función, DNI o CUIL)\n\n- Si (3 niveles jerárquicos con todos los requisitos)\n- Parcialmente (cumple con al menos un nivel de autoridad y/o requisito)\n- No (no presenta información)" [15] "3.i.b) ¿Está actualizada la información sobre las autoridades?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [16] "3.i.c) ¿Está disponible en la pestaña de transparencia?" [17] "3.ii.a) ¿El organismo presenta las designaciones de las autoridades de al menos 3 niveles jerárquicos?\n\n- Si (junto con todos los requisitos)\n- Parcialmente (al menos un nivel de autoridad y/o requisito)\n- No (no presenta información)" [18] "3.ii.b) ¿Las designaciones están actualizadas?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [19] "3.ii.c) ¿Las designaciones se encuentran disponibles en la pestaña de transparencia, y se pueden descargar o acceder al enlace de consulta?" [20] "4.i.a) ¿La planilla de personal está completa? (nombre y apellido, DNI o CUIL, escalafón, y modalidad de contratación - o redirige a la BIEP en forma completa)\n\n- Si (presenta una planilla con todos los requisitos)\n- Parcialmente (planilla con al menos uno de los campos requeridos)\n- No (no presenta planilla de personal / no funciona la BIEP)" [21] "4.i.b) ¿La planilla de personal está actualizada? \n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [22] "4.i.c) ¿La planilla de personal se encuentra disponible en la pestaña de transparencia y publicada en formato abierto y reutilizable?\n\n- Si (si cumple con ambos requisitos)\n- Parcialmente (al menos un requisito)\n- No (no presenta información)" [23] "4.ii.a) ¿Presenta un organigrama con la estructura del organismo? (formato .pdf, .jpg, imagen, o en el Mapa del Estado)" [24] "4.ii.b) ¿El organigrama se encuentra actualizado?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [25] "4.ii.c) ¿El organigrama se encuentra disponible en la pestaña de transparencia?" [26] "5.a) ¿El organismo presenta un listado con las DDJJ de 3 niveles de funcionarios/as? (deben estar bien rotuladas con nombre, apellido y cargo que desempeña). En caso que redirija a la Oficina Anticorrupción (OA) se tilda la opción \"Parcialmente\".\n\n- Si (de 3 niveles jerárquicos bien rotulados)\n- Parcialmente (al menos 1 nivel de autoridad / algún componente del rótulo / redirige a la Oficina Anticorrupción)\n- No (no presenta información / información con más de 3 años de antigüedad)" [27] "5.b) ¿Las DDJJ están actualizadas?\n\n- Actualizado (3 niveles de autoridades con DDJJ vigentes)\n- Parcialmente (1 o 2 niveles con DDJJ vigentes)\n- Desactualizado (ningún nivel de DDJJ vigentes)\n- Valor nulo (redirige la Oficina Anticorrupción)" [28] "5.c) ¿Están disponibles en la pestaña de transparencia y se pueden descargar?\n\n- Si (cumple con ambos requisitos)\n- Parcialmente (al menos 1 requisito)\n- No (no presenta información / redirige a la OA o se debe completar algún formulario de solicitud)" [29] "6.a) ¿La asignación mensual bruta y los convenios laborales están publicados?\n\n- Si (cumple la información solicitada)\n- Parcialmente (falta algún convenio o escala)\n- No (no presenta información / más de 3 años desactualizado)" [30] "6.b) ¿Están actualizadas?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [31] "6.c) ¿Se encuentran disponibles en la pestaña de transparencia, y a su vez, se pueden descargar?\n\n- Si (cumple con ambos requisitos)\n- Parcialmente (al menos 1 requisito)\n- No (no presenta información)" [32] "7.a) ¿La información está completa? (presupuesto del año vigente y de dos años previos, junto con la ejecución presupuestaria)\n\n- Si (información completa)\n- Parcialmente (al menos 1 requisito)\n- No (no presenta información)" [33] "7.b) ¿Presenta la ejecución presupuestaria del último trimestre?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [34] "7.c) ¿El presupuesto se encuentra disponible en la pestaña de transparencia y descargable en formato abierto?\n\n- Si (cumple con ambos requisitos)\n- Parcialmente (al menos 1 requisito)\n- No (no presenta información)" [35] "8.a) ¿Las transferencias muestran toda la información que requiere este apartado?\n\n- Si (cumple con todos los requisitos)\n- Parcialmente (cumple con al menos 1 requisito)\n- No (no presenta información)\n- No corresponde (se explicita que no realiza transferencias)" [36] "8.b) ¿Esta sección está actualizada?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [37] "8.c) ¿La información se encuentra disponible en la pestaña de transparencia, y descargable en formato abierto y reutilizable?\n\n- Si (cumple con todos los requisitos)\n- Parcialmente (al menos 1 requisito)\n- No (no presenta información)" [38] "9.a) ¿Redirige al portal de compras y contrataciones del organismo? Organismos de la Adm. Central, Desconcentrada, y Descentralizada deben presentar a su vez el código del SAF para puntaje completo.\n\n- Si (cumple con toda la información)\n- Parcialmente (cumple con parte de la información)\n- No (no presenta información)" [39] "9.b) ¿La información está actualizada?\n\n- Actualizado (hasta 6 meses inclusive)\n- Parcialmente (mayor a 6 meses y hasta 1 año inclusive)\n- Desactualizado (mayor a 1 año / no hay fecha de actualización)" [40] "9.c) ¿La información se encuentra disponible en la pestaña de transparencia y se puede descargar en formato abierto?\n\n- Si (cumple con todos los requisitos)\n- Parcialmente (al menos 1 requisito)\n- No (no presenta información)" [41] "10.i.a) ¿Están publicados los informes de auditorías del año vigente y de dos años anteriores?\n\n- Si (cumple con todos los requisitos)\n- Parcialmente (al menos 1 año de informes)\n- No (no presenta información / redirige a SIGEN o formulario para completar)" [42] "10.i.b) ¿La información está actualizada?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [43] "10.i.c) ¿La información se encuentra disponible en la pestaña de transparencia y se puede descargar en formato abierto?\n\n- Si (cumple con todos los requisitos)\n- Parcialmente (al menos 1 requisito)\n- No (no cumple algún requisito)" [44] "10.ii.a) ¿Presenta informes de evaluación?" [45] "10.ii.b) ¿La información está actualizada en forma anual?\n\n- Actualizado (hasta 1 año inclusive)\n- Desactualizado (mayor a 1 año / no hay fecha de actualización)" [46] "10.ii.c) ¿La información se encuentra disponible en la pestaña de transparencia y se puede descargar en formato abierto?\n\n- Si (cumple con ambos requisitos)\n- Parcialmente (al menos 1 requisito)\n- No (no cumple con ningún requisito)" [47] "11.a) ¿Cumple con todos los requisitos para solicitar información?\n\n- Si (cumple con la información solicitada)\n- Parcialmente (al menos 1 requisito)\n- No (no presenta información)" [48] "11.b) ¿La información está actualizada?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [49] "11.c) ¿La información está disponible en la pestaña de transparencia?" [50] "12.a) ¿Hay información del Responsable de Políticas de Transparencia?\n\n- Si (cumple con la información solicitada)\n- Parcialmente (al menos 1 requisito)\n- No (no presenta información)" [51] "12.b) ¿La información está actualizada?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [52] "12.c) ¿La información está disponible en la pestaña de transparencia?" [53] "13.a) ¿Hay información acerca de espacios de participación ciudadana?" [54] "13.b) ¿La información está actualizada?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [55] "13.c) ¿La información está disponible en la pestaña de transparencia?" [56] "14.a) ¿Se informa acerca de la dotación óptima del organismo?" [57] "14.b) ¿La información está actualizada?\n\n- Actualizado (hasta 1 año inclusive)\n- Desactualizado (mayor a 1 año / no hay fecha de actualización)" [58] "14.c) ¿La información se encuentra disponible en la pestaña de transparencia?" [59] "15.a) ¿Presenta información sobre las políticas de integridad?" [60] "15.b) ¿La información está actualizada?\n\n- Actualizado (hasta 1 año inclusive)\n- Desactualizado (mayor a 1 año / no hay fecha de actualización)" [61] "15.c) ¿La información está disponible en la pestaña de transparencia, y se puede descargar en formato abierto?\n\n- Si (cumple con ambos requisitos)\n- Parcialmente (al menos un requisito)\n- No (no cumple)" [62] "16.a) ¿Presenta información sobre la planificación estratégica del organismo?" [63] "16.b)¿La información está actualizada?\n\n- Actualizado (hasta 1 año inclusive)\n- Desactualizado (mayor a 1 año / no hay fecha de actualización)" [64] "16.c) ¿La información está disponible en la pestaña de transparencia, y se puede descargar en formato abierto?\n\n- Si (cumple con ambos requisitos)\n- Parcialmente (al menos un requisito)\n- No (no cumple)" [65] "17.a) ¿Hay datos estadísticos publicados?" [66] "17.b) ¿La información está actualizada?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [67] "17.c) ¿La información está disponible en la pestaña de transparencia?" [68] "18.a) ¿Se informan las metas del organismo?" [69] "18.b) ¿La información está actualizada?\n\n- Actualizado (hasta 1 año inclusive)\n- Desactualizado (mayor a 1 año / no hay fecha de actualización)" [70] "18.c) ¿La información está disponible en la pestaña de transparencia?" [71] "19.a) ¿Están publicados los informes de gestión?" [72] "19.b) ¿La información está actualizada?\n\n- Actualizado (hasta 1 año inclusive)\n- Desactualizado (mayor a 1 año / no hay fecha de actualización)" [73] "19.c) ¿La información está disponible en la pestaña de transparencia, y se puede descargar en formato abierto?\n\n- Si (cumple con ambos requisitos)\n- Parcialmente (al menos un requisito)\n- No (no cumple)" [74] "El organismo relevado pertenece a:" [75] "20.a).[A] ¿Presenta información sobre las políticas prioritarias del organismo?" [76] "20.b).[A] ¿La información está actualizada?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [77] "20.c).[A] ¿La información está disponible en la pestaña de transparencia?" [78] "20.a).[E] ¿Presenta información sobre la autonomía financiera? Reflejado esquemáticamente como el % de dependencia de fondos estatales." [79] "20.b).[E] ¿La información está actualizada?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [80] "20.c).[E] ¿La información está disponible en la pestaña de transparencia?" [81] "20.a).[U] ¿La universidad explica su forma de gobierno?" [82] "20.b).[U] ¿La información está actualizada?\n\n- Actualizado (hasta 1 año inclusive)\n- Desactualizado (mayor a 1 año / no hay fecha de actualización)" [83] "20.c).[U] ¿La información está disponible en la pestaña de transparencia?" [84] "Link del sitio web" [85] "Nombre y apellido de quien relevó" [86] "Fecha del relevamiento" ``` --- ## Caso práctico <br> - **Pedido:** Me han solicitado una base que contenga las variables de tiempo e identificacion del tipo de organismo <br> - Variables de trabajo: - *Marca temporal* - *Período* - *Tipo de organismo* --- ## Caso práctico - Selecciono las 3 columnas de interés ``` r library(tidyverse) *select(base_ind_transp, * "Marca temporal", "Período", "Tipo de organismo") Marca temporal Período 1 2024-04-17 11:13:21 ABRIL (Enero - Marzo 2024) 2 2024-04-17 11:30:18 ABRIL (Enero - Marzo 2024) 3 2024-04-17 11:41:42 ABRIL (Enero - Marzo 2024) 4 2024-04-17 12:07:43 ABRIL (Enero - Marzo 2024) 5 2024-04-17 12:16:02 ABRIL (Enero - Marzo 2024) 6 2024-04-18 10:43:08 ABRIL (Enero - Marzo 2024) 7 2024-04-18 13:28:00 ABRIL (Enero - Marzo 2024) 8 2024-04-18 15:15:45 ABRIL (Enero - Marzo 2024) 9 2024-04-18 15:43:58 ABRIL (Enero - Marzo 2024) 10 2024-04-18 16:17:35 ABRIL (Enero - Marzo 2024) 11 2024-04-18 16:22:17 ABRIL (Enero - Marzo 2024) 12 2024-04-19 11:52:02 ABRIL (Enero - Marzo 2024) 13 2024-05-17 15:43:45 ABRIL (Enero - Marzo 2024) 14 2024-05-24 15:08:49 ABRIL (Enero - Marzo 2024) 15 2024-06-04 17:24:11 JULIO (Abril - Junio 2024) 16 2024-06-05 14:31:24 JULIO (Abril - Junio 2024) 17 2024-06-25 17:21:51 1° Trimestre 2024 (Enero - Marzo) 18 2024-06-25 18:07:55 1° Trimestre 2024 (Enero - Marzo) 19 2024-06-26 13:03:55 1° Trimestre 2024 (Enero - Marzo) 20 2024-06-26 13:14:29 1° Trimestre 2024 (Enero - Marzo) 21 2024-06-26 16:40:46 1° Trimestre 2024 (Enero - Marzo) 22 2024-06-26 17:15:20 1° Trimestre 2024 (Enero - Marzo) 23 2024-06-28 09:37:02 1° Trimestre 2024 (Enero - Marzo) 24 2024-06-28 10:13:57 1° Trimestre 2024 (Enero - Marzo) 25 2024-06-28 11:02:31 1° Trimestre 2024 (Enero - Marzo) 26 2024-06-28 11:23:52 1° Trimestre 2024 (Enero - Marzo) 27 2024-06-28 13:22:24 1° Trimestre 2024 (Enero - Marzo) 28 2024-06-28 13:50:04 1° Trimestre 2024 (Enero - Marzo) 29 2024-06-28 15:46:03 1° Trimestre 2024 (Enero - Marzo) 30 2024-06-28 15:47:36 1° Trimestre 2024 (Enero - Marzo) 31 2024-06-28 16:00:41 1° Trimestre 2024 (Enero - Marzo) 32 2024-06-28 16:01:12 1° Trimestre 2024 (Enero - Marzo) 33 2024-06-28 16:48:30 1° Trimestre 2024 (Enero - Marzo) 34 2024-06-28 16:52:27 1° Trimestre 2024 (Enero - Marzo) 35 2024-06-28 17:37:29 1° Trimestre 2024 (Enero - Marzo) Tipo de organismo 1 Administración Central y Desconcentrada 2 Administración Central y Desconcentrada 3 Administración Central y Desconcentrada 4 Administración Central y Desconcentrada 5 Administración Central y Desconcentrada 6 Administración Central y Desconcentrada 7 Administración Central y Desconcentrada 8 Administración Central y Desconcentrada 9 Administración Central y Desconcentrada 10 Administración Central y Desconcentrada 11 Administración Central y Desconcentrada 12 Organismos Descentralizados 13 Universidades 14 Universidades 15 Empresas y Entes del Sector Público Nacional 16 Empresas y Entes del Sector Público Nacional 17 Organismos Descentralizados 18 Administración Central y Desconcentrada 19 Administración Central y Desconcentrada 20 Organismos Descentralizados 21 Organismos Descentralizados 22 Administración Central y Desconcentrada 23 Organismos Descentralizados 24 Organismos Descentralizados 25 Organismos Descentralizados 26 Organismos Descentralizados 27 Organismos Descentralizados 28 Empresas y Entes del Sector Público Nacional 29 Empresas y Entes del Sector Público Nacional 30 Universidades 31 Empresas y Entes del Sector Público Nacional 32 Organismos Descentralizados 33 Organismos Descentralizados 34 Administración Central y Desconcentrada 35 Administración Central y Desconcentrada ``` --- class: center, middle, inverse, hide-logo # La pipa --- ## Un operador llamado `pipa` <br> <br> .pull-left[ <br> ``` r base_de_datos |> funcion1 |> funcion2 |> funcion3 ``` ] .pull-right[ ![](data:image/png;base64,#../img/clase_3/pipa.gif) ] --- ## Un operador llamado `pipa` <br> - Pipa de **R base**: `|>` <br> - Pipa de **{magritr}**: `%>%` --- ## `select()` + La `pipa` #### Antes ``` r select(`base_ind_transp`, "Marca temporal", "Período", "Tipo de organismo") ``` -- #### Después ``` r `base_ind_transp` %>% select("Marca temporal", "Período", "Tipo de organismo") ``` --- class: middle, center, inverse, hide-logo # PREGUNTA --- ## Pregunta <br> * Cuál es la diferencia entre esta sentencia: ``` r select(base_ind_transp, "Marca temporal", "Período", "Tipo de organismo") ``` -- * Y esta sentencia: ``` r base_ind_transp_seleccion <- select(base_ind_transp, "Marca temporal", "Período", "Tipo de organismo") ``` --- ## Pregunta <br> * Cuál es la diferencia entre esta sentencia: ``` r select(base_ind_transp, "Marca temporal", "Período", "Tipo de organismo") ``` * Y esta sentencia: ``` r `base_ind_transp_seleccion` <- select(base_ind_transp, "Marca temporal", "Período", "Tipo de organismo") ``` --- ## Caso práctico - Selecciono las 3 columnas de interés ``` r library(tidyverse) base_ind_trans_seleccion <- base_ind_transp |> select("Marca temporal", "Período", "Tipo de organismo") ``` <br> - Chequeo las columnas del nuevo objeto ``` r colnames(base_ind_transp_seleccion) [1] "Marca temporal" "Período" "Tipo de organismo" ``` --- ## `select()` - *por posición* <br> 2. Selecciono ``` r base_ind_transp_seleccion_1 <- base_ind_transp |> select(1, 2, 3) ``` --- ## `select()` - *por posición* <br> 3. Chequeo ``` r colnames(base_ind_transp_seleccion_1) [1] "Marca temporal" "Período" "Tipo de organismo" ``` --- ## `select()` - *por posición (columnas consecutivas)* <br> ``` r base_ind_transp_seleccion_2 <- base_ind_transp |> select(1:3) ``` --- ## `select()` - *por posición (columnas consecutivas)* <br> ``` r base_ind_transp_seleccion_2 <- base_ind_transp |> select(1:3) ``` <br> ``` r colnames(base_ind_transp_seleccion_2) [1] "Marca temporal" "Período" "Tipo de organismo" ``` --- class: center, middle ![](data:image/png;base64,#https://imgs.search.brave.com/Frz7Kuv_uvyXQb269pQbZ2-UxWSZ-oIPOgfP4lTWmmU/rs:fit:860:0:0/g:ce/aHR0cHM6Ly9naWZk/Yi5jb20vaW1hZ2Vz/L2hpZ2gvc2FjaGEt/YmFyb24tY29oZW4t/dmVyeS1uaWNlLXFq/N2x5YXFudXBueTl6/ODAuZ2lm.gif) --- ## `select()` - *Por patrones de texto* <br> **Funciones auxiliares:** - `starts_with()` --\> *empieza con...* - `ends_with()` --\> *termina con...* - `contains()` --\> *contiene...* --- ## `select()` + `starts_with()` <br> ``` r base_ind_transp_patron1 <- base_ind_transp |> select(starts_with("20")) ``` -- - Chequeo ``` r colnames(base_ind_transp_patron1) [1] "20.a).[A] ¿Presenta información sobre las políticas prioritarias del organismo?" [2] "20.b).[A] ¿La información está actualizada?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [3] "20.c).[A] ¿La información está disponible en la pestaña de transparencia?" [4] "20.a).[E] ¿Presenta información sobre la autonomía financiera? Reflejado esquemáticamente como el % de dependencia de fondos estatales." [5] "20.b).[E] ¿La información está actualizada?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [6] "20.c).[E] ¿La información está disponible en la pestaña de transparencia?" [7] "20.a).[U] ¿La universidad explica su forma de gobierno?" [8] "20.b).[U] ¿La información está actualizada?\n\n- Actualizado (hasta 1 año inclusive)\n- Desactualizado (mayor a 1 año / no hay fecha de actualización)" [9] "20.c).[U] ¿La información está disponible en la pestaña de transparencia?" ``` --- ## `select()` + `starts_with()` <br> --- ## `select()` + `ends_with()` <br> ``` r base_ind_transp_patron2 <- base_ind_transp |> select(ends_with("actualización)")) ``` -- - Chequeo ``` r colnames(base_ind_transp_patron2) [1] "1.b) ¿La información está actualizada? \n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [2] "2.b) ¿La información está actualizada?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [3] "3.i.b) ¿Está actualizada la información sobre las autoridades?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [4] "3.ii.b) ¿Las designaciones están actualizadas?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [5] "4.i.b) ¿La planilla de personal está actualizada? \n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [6] "4.ii.b) ¿El organigrama se encuentra actualizado?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [7] "6.b) ¿Están actualizadas?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [8] "7.b) ¿Presenta la ejecución presupuestaria del último trimestre?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [9] "8.b) ¿Esta sección está actualizada?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [10] "9.b) ¿La información está actualizada?\n\n- Actualizado (hasta 6 meses inclusive)\n- Parcialmente (mayor a 6 meses y hasta 1 año inclusive)\n- Desactualizado (mayor a 1 año / no hay fecha de actualización)" [11] "10.i.b) ¿La información está actualizada?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [12] "10.ii.b) ¿La información está actualizada en forma anual?\n\n- Actualizado (hasta 1 año inclusive)\n- Desactualizado (mayor a 1 año / no hay fecha de actualización)" [13] "11.b) ¿La información está actualizada?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [14] "12.b) ¿La información está actualizada?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [15] "13.b) ¿La información está actualizada?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [16] "14.b) ¿La información está actualizada?\n\n- Actualizado (hasta 1 año inclusive)\n- Desactualizado (mayor a 1 año / no hay fecha de actualización)" [17] "15.b) ¿La información está actualizada?\n\n- Actualizado (hasta 1 año inclusive)\n- Desactualizado (mayor a 1 año / no hay fecha de actualización)" [18] "16.b)¿La información está actualizada?\n\n- Actualizado (hasta 1 año inclusive)\n- Desactualizado (mayor a 1 año / no hay fecha de actualización)" [19] "17.b) ¿La información está actualizada?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [20] "18.b) ¿La información está actualizada?\n\n- Actualizado (hasta 1 año inclusive)\n- Desactualizado (mayor a 1 año / no hay fecha de actualización)" [21] "19.b) ¿La información está actualizada?\n\n- Actualizado (hasta 1 año inclusive)\n- Desactualizado (mayor a 1 año / no hay fecha de actualización)" [22] "20.b).[A] ¿La información está actualizada?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [23] "20.b).[E] ¿La información está actualizada?\n\n- Actualizado (hasta 3 meses inclusive)\n- Parcialmente (mayor a 3 meses y hasta 6 meses inclusive)\n- Desactualizado (mayor a 6 meses / no hay fecha de actualización)" [24] "20.b).[U] ¿La información está actualizada?\n\n- Actualizado (hasta 1 año inclusive)\n- Desactualizado (mayor a 1 año / no hay fecha de actualización)" ``` ## `select()` + `starts_with()` <br> --- class: center, middle ![](data:image/png;base64,#https://media0.giphy.com/media/v1.Y2lkPTc5MGI3NjExbjEzMW15cWk3bXJ5MzQ0aXQwd2IwenIyN3JseTlucW9nc2R0enY4NCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/Lk023zZqHJ3Zz4rxtV/giphy.gif) --- ## `select()` + `contains()` <br> ``` r base_ind_transp_patron3 <- base_ind_transp |> select(contains("[U]")) ``` -- - Chequeo ``` r colnames(base_ind_transp_patron3) [1] "20.a).[U] ¿La universidad explica su forma de gobierno?" [2] "20.b).[U] ¿La información está actualizada?\n\n- Actualizado (hasta 1 año inclusive)\n- Desactualizado (mayor a 1 año / no hay fecha de actualización)" [3] "20.c).[U] ¿La información está disponible en la pestaña de transparencia?" ``` --- class: center, middle ![](data:image/png;base64,#https://media3.giphy.com/media/v1.Y2lkPTc5MGI3NjExYXprbDVsM2l1MmF5dDRjMGY1N2xiNW52dmFscHNsM3NhbDZ5eXc5NSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/NEvPzZ8bd1V4Y/giphy.gif) --- class: middle, center, inverse, hide-logo # LA COMBINACIÓN FINAL --- ## `select()` <br> ``` r base_ind_transp_tuto <- base_ind_transp |> select(Período, 4, starts_with("Link")) ``` -- ``` r colnames(base_ind_transp_tuto) [1] "Período" "Universidades:" "Link del sitio web" ``` --- class: center, middle, hide-logo ![](data:image/png;base64,#../img/clase_3/explode.gif) --- class: middle, center, inverse, hide-logo # Ejercitación grupal --- ## Ejercitación - Crear un objeto en donde importamos la base de datos del relevamiento de sujetos obligados - Seleccionar 3 variables de la base según el nombre de las mismas y guardar en otro objeto. - Seleccionar 3 variables de la base según la posición de las mismas y guardar en otro objeto. - Seleccionar todas las variables que **empiecen** con un patrón de texto (a elegir). --- class: middle, center, inverse, hide-logo # **filter()** <html><hr color='#EB811B' size=1px width=1600px></html> <html><p style="color:white;" align:"left">Elige o descarta columnas de una base de datos</p></html> --- ## `filter()` <br> - La función tiene la siguiente estructura: ``` r filter(base_de_datos, condicion) ``` <img src="data:image/png;base64,#../img/clase_3/filter_presentacion.png" width="65%" style="display: block; margin: auto;" /> --- ## `filter()` <br> - `Con pipe`, la función tiene la siguiente estructura: ``` r base_de_datos |> filter(Edad > 65) ``` <img src="data:image/png;base64,#../img/clase_3/filter_presentacion.png" width="65%" style="display: block; margin: auto;" /> --- ## Caso práctico - Debo realizar un análisis de la base de datos sólo para los sujetos obligados de tipo `Universidades`. <br> **Universo de análisis / Población de estudio:** - `Universidades` --- ## Caso práctico - Chequeo qué tipo de organismos existen en la base de trabajo -- ``` r unique(base_ind_transp$`Tipo de organismo`) [1] "Administración Central y Desconcentrada" [2] "Organismos Descentralizados" [3] "Universidades" [4] "Empresas y Entes del Sector Público Nacional" ``` --- ## Caso práctico - Aplico filtro ``` r library(tidyverse) base_filtrada <- base_ind_transp |> filter(`Tipo de organismo` == "Universidades") ``` -- - Chequeo filtro ``` r unique(base_filtrada$`Tipo de organismo`) [1] "Universidades" ``` --- ## `filter()` - Otra forma de chequeo: Contar casos ``` r base_ind_transp %>% count(`Tipo de organismo`) Tipo de organismo n 1 Administración Central y Desconcentrada 16 2 Empresas y Entes del Sector Público Nacional 5 3 Organismos Descentralizados 11 4 Universidades 3 ``` -- ``` r base_filtrada %>% count(`Tipo de organismo`) Tipo de organismo n 1 Universidades 3 ``` --- ## `filter()` .pull-left[ | Condición | Acción | |:----------|:--------------------| | `==` | *igual* | | `%in%` | *incluye* | | `!=` | *distinto* | | `>` | *mayor que* | | `<` | *menor que* | | `>=` | *mayor o igual que* | | `<=` | *menor o igual que* | ] .pull-right[ | Operador | Descripción | |:---------|:--------------------------------------------| | `&` | *y* - Cuando se cumplen ambas condiciones | | `┃` | *o* - Cuando se cumple una u otra condición | ] --- ## Caso práctico - Filtro múltiple <br> - Debo realizar un análisis de la base de datos para los sujetos obligados de tipo `Universidades` y `Organismos Descentralizados`. <br> --- ## Caso práctico - Filtro múltiple - Chequeo qué tipo de organismos existen en la base de trabajo -- ``` r unique(base_ind_transp$`Tipo de organismo`) [1] "Administración Central y Desconcentrada" [2] "Organismos Descentralizados" [3] "Universidades" [4] "Empresas y Entes del Sector Público Nacional" ``` --- ## Caso práctico - Filtro múltiple - Aplico filtro ``` r base_filtrada <- base_ind_transp |> filter(`Tipo de organismo` == "Universidades" | `Tipo de organismo` == "Organismos Descentralizados") ``` -- - Chequeo filtro ``` r unique(base_filtrada$`Tipo de organismo`) [1] "Organismos Descentralizados" "Universidades" ``` --- ## Caso práctico - Filtro múltiple - Operador `%in%` - Aplico filtro ``` r base_filtrada_operador_in <- base_ind_transp |> filter(`Tipo de organismo` %in% c("Universidades", "Organismos Descentralizados")) ``` -- - Chequeo filtro ``` r unique(base_filtrada_operador_in$`Tipo de organismo`) [1] "Organismos Descentralizados" "Universidades" ``` --- class: middle, center, inverse, hide-logo # **mutate()** <html><hr color='#EB811B' size=1px width=1600px></html> <html><p style="color:white;" align:"left">Crea / edita variables (columnas)</p></html> --- ## `mutate()` <br> - La función tiene la siguiente estructura: <br> ``` r base_de_datos %>% mutate(`var_nueva` = var_1 + var_2) ``` --- ## Caso práctico - Tenemos la siguiente tabla con los valores del **Índice de Transparencia**... - Queremos redondear los valores, para poder presentarlos ``` sujeto_obligado indice_transparencia 1 Instituto Nacional del Teatro 2.56560 2 Instituto Nacional del Cáncer 76.23423 3 Agencia de Planificación (APLA) 32.12312 4 Oficina Anticorrupción 89.10000 5 Fundación Miguel Lillo 65.21331 ``` --- ## Caso práctico ``` r base_resultados %>% mutate(redondeo = round(indice_transparencia, digits = 1)) ``` ``` sujeto_obligado indice_transparencia redondeo 1 Instituto Nacional del Teatro 2.56560 2.6 2 Instituto Nacional del Cáncer 76.23423 76.2 3 Agencia de Planificación (APLA) 32.12312 32.1 4 Oficina Anticorrupción 89.10000 89.1 5 Fundación Miguel Lillo 65.21331 65.2 ``` --- ## Caso práctico ``` r base_resultados %>% mutate(indice_transparencia = round(indice_transparencia, digits = 1)) ``` ``` sujeto_obligado indice_transparencia 1 Instituto Nacional del Teatro 2.6 2 Instituto Nacional del Cáncer 76.2 3 Agencia de Planificación (APLA) 32.1 4 Oficina Anticorrupción 89.1 5 Fundación Miguel Lillo 65.2 ``` --- ## `mutate()` + `case_when()` - `case_when()` = _"Siempre que..."_ - Quiero determinado valor en mi nueva variable, _siempre que_ ocurra cierta condición -- <br> ``` r base_de_datos %>% mutate(var_nueva = case_when(var_vieja == "a" `~` contenido_a, var_vieja == "b" `~` contenido_b)) ``` --- ## `mutate()` + `case_when()` - Recodificar variable `Periodo`: ``` r unique(base_ind_transp$Período) [1] "ABRIL (Enero - Marzo 2024)" "JULIO (Abril - Junio 2024)" [3] "1° Trimestre 2024 (Enero - Marzo)" ``` ``` r base_recod <- base_ind_transp %>% mutate(Período = case_when(Período == "ABRIL (Enero - Marzo 2024)" ~ "1er Trim", Período == "1° Trimestre 2024 (Enero - Marzo)" ~ "1er Trim", Período == "JULIO (Abril - Junio 2024)" ~ "2do Trim")) ``` -- ``` r unique(base_recod$Período) [1] "1er Trim" "2do Trim" ``` --- ## Limpieza de datos ``` r library(janitor) base_limpia <- base_ind_transp %>% select(`Universidades:`, `1.a) ¿Informa al menos uno de los elementos solicitados? (misión, objetivos, o ambos)`) %>% rename("universidades" = `Universidades:`, "1.a" = `1.a) ¿Informa al menos uno de los elementos solicitados? (misión, objetivos, o ambos)`) ``` -- ``` r colnames(base_limpia) [1] "universidades" "1.a" ``` --- class: middle, center, inverse, hide-logo # **group_by() + summarise()** <html><hr color='#EB811B' size=1px width=1600px></html> <html><p style="color:white;" align:"left">Agrupamiento / Cálculos</p></html> --- # `summarise()` - Caso: Quiero sumar el puntaje total para el ítem **1.a (_"¿Informa al menos uno de los elementos solicitados?"_)** -- Primero: Conocer la variable sobre la cuál voy a trabajar: - ¿Es numérica? - Está preparada para calcular? (recodificación, valores de texto o outliers, etc.) Veamos: --- # `summarise()` 1. Recodifico el nombre de la variable, para hacerla más amena de trabajar en el código ``` r base_trabajo <- base_ind_transp %>% select(Período, `Tipo de organismo`, `1.a) ¿Informa al menos uno de los elementos solicitados? (misión, objetivos, o ambos)`) %>% rename( "periodo" = Período, "tipo_organismo" = `Tipo de organismo`, "item_1a" = `1.a) ¿Informa al menos uno de los elementos solicitados? (misión, objetivos, o ambos)`) head(base_trabajo) periodo tipo_organismo item_1a 1 ABRIL (Enero - Marzo 2024) Administración Central y Desconcentrada Si 2 ABRIL (Enero - Marzo 2024) Administración Central y Desconcentrada Si 3 ABRIL (Enero - Marzo 2024) Administración Central y Desconcentrada Si 4 ABRIL (Enero - Marzo 2024) Administración Central y Desconcentrada Si 5 ABRIL (Enero - Marzo 2024) Administración Central y Desconcentrada Si 6 ABRIL (Enero - Marzo 2024) Administración Central y Desconcentrada No ``` --- # `summarise()` 2. Chequeo qué valores figuran en la variable: ``` r unique(base_trabajo$item_1a) [1] "Si" "No" ``` --- # `summarise()` 4. Recodifico la variable de texto a número (códigos), donde: "Si" == 1 y "No" == 2 ``` r base_trabajo <- base_trabajo %>% mutate(item_1a = case_when(item_1a == "Si" ~ 1, item_1a == "No" ~ 0)) unique(base_trabajo$item_1a) [1] 1 0 ``` --- # `summarise()` - ¡Todo listo para calcular! -- ``` r base_trabajo %>% summarise(suma_item = sum(item_1a)) suma_item 1 29 ``` -- ``` r base_trabajo %>% summarise(suma_item = sum(item_1a), media_item = mean(item_1a)) suma_item media_item 1 29 0.8285714 ``` --- # `group_by()` - Agrupa un data.frame por las categorías de una variable -- - Proteínas para el `summarise()` ``` r base_trabajo %>% group_by(variable) ``` --- # `group_by()` ``` r base_trabajo %>% group_by(tipo_organismo) %>% #<-- summarise(suma_item = sum(item_1a), media_item = mean(item_1a)) # A tibble: 4 × 3 tipo_organismo suma_item media_item <chr> <dbl> <dbl> 1 Administración Central y Desconcentrada 15 0.938 2 Empresas y Entes del Sector Público Nacional 4 0.8 3 Organismos Descentralizados 9 0.818 4 Universidades 1 0.333 ``` --- class: middle, center, logo-hide ## `tidyverse en acción` --- # `tidyverse` en acción ``` r base_trabajo <- base_ind_transp %>% select(Período, `Tipo de organismo`, `1.a) ¿Informa al menos uno de los elementos solicitados? (misión, objetivos, o ambos)`) %>% rename( "periodo" = Período, "tipo_organismo" = `Tipo de organismo`, "item_1a" = `1.a) ¿Informa al menos uno de los elementos solicitados? (misión, objetivos, o ambos)`) %>% mutate(item_1a = case_when(item_1a == "Si" ~ 1, item_1a == "No" ~ 0)) %>% group_by(tipo_organismo) %>% #<-- summarise(suma_item = sum(item_1a), media_item = mean(item_1a)) ``` --- # `tidyverse` en acción ``` r base_trabajo # A tibble: 4 × 3 tipo_organismo suma_item media_item <chr> <dbl> <dbl> 1 Administración Central y Desconcentrada 15 0.938 2 Empresas y Entes del Sector Público Nacional 4 0.8 3 Organismos Descentralizados 9 0.818 4 Universidades 1 0.333 ``` ---