class: center, middle, inverse, title-slide .title[ # VisualizaciĆ³n de datos con
{ggplot2}
] .subtitle[ ##
] .author[ ###
] --- ## ĀæQuĆ© vimos? <br> ā Conceptos bĆ”sicos de R <br> ā Pensar un proyecto de datos con R <br> ā Procesamiento de datos con `{tidyverse}` --- ## Hoja de Ruta <br> š ĀæPor quĆ© visualizar datos? š GramĆ”tica de los grĆ”ficos y `{ggplot2}` - Capas y el operador `+` (mĆ”s) š Armando un grĆ”fico de barras (columnas) - FunciĆ³n `geom_col()` š Chapa y pintura de un grĆ”fico (atributos) --- ## ConfiguraciĆ³n para esta clase <br> - Armar un proyeto de trabajo nuevo o abrir aquel con el que venĆamos trabajando - Cargar la base que surge del procesamiento del Ćndice [**(click acĆ” para descarga)**](https://estacion-r.github.io/intro_r_aaip/datos/output_visualizaciones_2024-07-23.xlsx) y chequear que estĆ© en la carpeta `datos` - Crear un **script** de trabajo - Carga la librerĆa `{tidyverse}` --- class: middle, center, logo-hide # ĀæPor quĆ© visualizar datos? <html> <hr color='#EB811B' size=1px width=1600px> </html> --- ## ĀæPor quĆ© visualizar? <br> - _"La visualizaciĆ³n es el proceso de hacer visibles los contrastes, ritmos y eventos que los datos expresan, que no podemos percibir cuando vienen en forma de Ć”ridas listas de nĆŗmeros y categorĆas."_ [^1] <br> - Interpretar / decodificar la informaciĆ³n de forma visual <br> - Guiar hacia el hallazago <br> [^1]: https://bitsandbricks.github.io/ciencia_de_datos_gente_sociable/visualizacion.html --- class: center, middle, logo-hide # ggplot2 <html> <p style="color:grey;" align:"left">Una forma de visualizar</p> </html> --- ## __ĀæQuĆ© es `{ggplot2}`?__ <br> - Una implementaciĆ³n del sistema **Grammar of graphics** (Wilkinson, 2005). <br> - Un esquema pensado en capas (datos --> plano (ejes **x** e **y**) --> geometrĆas) <br> - Un paquete de funciones de aplicaciĆ³n intuitiva. --- ## __ĀæPor quĆ© `{ggplot2}`?__ - Tiene un marco de referencia (El grammar of graphics) -- - Flexible, con especificaciones a nivel de capas. -- - Sistema de `themes`, que permiten _pulir_ la apariencia del grĆ”fico -- - Decenas de extensiones para ampliar la potencia del paquete -- - Comunidad activa y con mucha predisposiciĆ³n a ayudar. --- # ĀæA dĆ³nde vamos? ``` r library(tidyverse) library(rio) library(janitor) # Importo base base_reclamos <- import(here::here("datos/reclamos_28-10-2024.csv")) %>% clean_names() ``` ``` r head(base_reclamos) orden agente desde vence dias estado situacion_actual 1 1 27/11/2017 01/10/2018 - Cerrado Finalizado 2 2 29/11/2017 01/12/2018 - Cerrado Finalizado 3 3 30/11/2017 13/01/2018 - Cerrado Finalizado 4 4 01/12/2017 16/01/2018 - Cerrado Finalizado 5 5 01/12/2017 16/01/2018 - Cerrado Finalizado 6 6 05/12/2017 18/01/2018 - Cerrado Finalizado reclamante n_expediente 1 Emiliano Donadio EX-2017-29999784-APN-AAIP 2 Arsenio Ruppel EX-2017-30439758-APN-AAIP 3 Emiliano Donadio EX-2017-30671310-APN-AAIP 4 Miguel Angel BOLAĆOS EX-2017-30837261-APN-AAIP 5 Yrenarco Fernandez EX-2017-30827262-APN-AAIP 6 Miguel Angel BOLAĆOS EX-2017-31370134-APN-AAIP sujeto_obligado 1 AdministraciĆ³n de Parques Nacionales 2 Registro Nacional de Puertos 3 AdministraciĆ³n de Parques Nacionales 4 Edesur S.A 5 GendarmerĆa Nacional 6 Edesur S.A ministerio_orbita ingreso provincia 1 Ministerio de Ambiente y Desarrollo Sostenible E-MAIL NeuquĆ©n 2 Ministerio de Transporte E-MAIL Santa Fe 3 Ministerio de Ambiente y Desarrollo Sostenible E-MAIL NeuquĆ©n 4 Empresa E-MAIL Buenos Aires 5 Ministerio de Seguridad PAPEL Formosa 6 Empresa E-MAIL Buenos Aires motivo_del_reclamo sintesis_del_reclamo n_de_reclamo 1 Silencio NA 2 Silencio NA 3 Silencio NA 4 Silencio NA 5 Silencio NA 6 Silencio NA n_expediente_solicitud fecha_br_nota_traslado n_nota_traslado 1 EX-2017-29999784-APN-AAIP PV-2017-30415871-APN-AAIP 2 EX-2018-752574-APN-AAIP IF-2017-30633781-APN-AAIP 3 EX-2017-30671310-APN-AAIP IF-2017-30678310-APN-AAIP 4 SIN GDE NO 2017-31365223-APN-AAIP 5 SIN GDE NO-2017-30879963-APN-AAIP 6 SIN GDE NO 2017-31373951-APN-AAIP vencimiento_br_descargo n_nota_descargo n_de_prorroga requerimiento 1 2017-07-12 NA NA 2 2017-07-12 NA NA 3 2017-07-12 NA NA 4 14/12/2017 NA NA 5 2017-08-12 NA NA 6 14/12/2017 NA NA pase_a_dnpdp n_acto_administrativo resumen acto_administrativo 1 IF-2017-1809923-APN-AAIP Archivo 10/01/2018 2 IF-2018-01606094-APN-AAIP Archivo 09/01/2018 3 IF-2017-33505235-APN-AAIP Archivo 18/12/2017 4 IF-2018-01605640-APN-AAIP Archivo 09/01/2018 5 RESOL 2018-2-APN-AAIP IntimaciĆ³n 15/01/2018 6 IF-2018-01605943-APN-AAIP Archivo 09/01/2018 sintesis_de_resolucion 1 Archivo por ampliacion de respuesta 2 Archivo por ampliacion de respuesta 3 Archivo por ampliacion de respuesta 4 Archivo por ampliacion de respuesta 5 IntimaciĆ³n por denegatoria injustificada 6 Archivo por ampliacion de respuesta observaciones 1 Se cerro declarando abstracto el reclamo por haberse contestado al requirente fuera de plazo al momento de solicitar el descargo 2 Se cerro declarando abstracto el reclamo por haberse contestado al requirente fuera de plazo al momento de solicitar el descargo 3 Se cerro declarando abstracto el reclamo por haberse contestado al requirente fuera de plazo al momento de solicitar el descargo 4 Se cerro declarando abstracto el reclamo por haberse contestado al requirente fuera de plazo al momento de solicitar el descargo 5 Se hizo lugar el reclamo intimando a la entrega de la informaciĆ³n.Por NO-2018-03301230-APN-SSAJ#MSG se informa que el 17/1 GendarmerĆa enviĆ³ documentaciĆ³n al requirente. ESTA NOTA QUE MENCIONAN NO ESTĆ AGREGADA AL EXPEDIENTE, POSTEIROR A LA REOSLUCIĆN SOLO ESTĆ LA NOTIFICACIĆN PERO NO HAY RTA AGREGADA A LA INTIMACIĆN NI INFORME DE CIERRE 6 Se cerro declarando abstracto el reclamo por haberse contestado al requirente fuera de plazo al momento de solicitar el descargo notificacion 1 GENE00028 2 3 18/12 se notificĆ³ por mail al requirente 4 12/1/18 se notificĆ³ al reclamante y al sujeto obligado 5 Por NO-2018-02771178-APN-AAIP el 17 /1 se notificĆ³ resoluciĆ³n a Seguridad 6 12/1/18 se notificĆ³ al reclamante y al sujeto obligado fecha_br_notificacion vencimiento_br_resolucion 1 2 3 4 5 6 n_nota_cumplimiento 1 ASETTE 2 3 4 5 Por Nota 2018-03301230APN-SSAJ#MSG contestan que gendarmerĆa entrego informaciĆ³n 6 informe_de_cierre audiencias n_de_acta resultado_intimacion 1 No NA 2 No NA 3 No NA 4 No NA 5 No NA 6 No NA registro_de_acceso 1 No 2 No 3 No 4 No 5 No 6 No ``` --- ## Preparo los datos - Calculo el promedio total de los Ćndices para todos los organismos ``` r base_grafico <- base_reclamos |> clean_names() %>% select(desde, sujeto_obligado, estado) %>% mutate(anio = substr(desde, 7, 12)) %>% filter(anio == 2024) %>% group_by(estado) %>% summarise(cant_reclamos = n()) ``` ``` r base_grafico # A tibble: 2 Ć 2 estado cant_reclamos <chr> <int> 1 Cerrado 429 2 En trĆ”mite 65 ``` --- ## Armo grĆ”fico <img src="data:image/png;base64,#03-visualizacion_de_datos_files/figure-html/unnamed-chunk-7-1.png" width="60%" style="display: block; margin: auto;" /> --- ## El cĆ³digo ``` r ggplot(data = base_grafico, mapping = aes(x = estado, y = cant_reclamos)) + geom_col(aes(fill = estado)) + geom_hline(yintercept = 0) + ## Etiquetas geom_text(aes(label = round(cant_reclamos, 1), vjust = -0.5)) + ### Titulos labs(title = "Cantidad de reclamos por estado del reclamos", subtitle = "Argentina, aƱo 2024", x = "Estado del reclamo", y = "Cantidad de reclamos", caption = "Fuente: AAIP") + ## Estetica theme_minimal() + theme(legend.position = "none") ``` --- # ĀæPor dĆ³nde empezamos? ## Cargamos el paquete ``` r library(ggplot2) ``` <br> o... <br> ``` r library(tidyverse) ``` --- ## GrĆ”fico en clave de capas <br> 3 Capas son las indispensables al pensar nuestro grĆ”fico: --- ## GrĆ”fico en clave de capas - Los **datos** (argumento: `data =`): - El dataframe que sirve de insumo <br> --- ## GrĆ”fico en clave de capas - Los **datos** (argumento: `data =`): - El dataframe que sirve de insumo <br> - Las **aesthetics** (funciĆ³n `aes()`: - Defino el vĆnculo entre los datos y las propiedades visuales (ejes x e y, por ej.) --- ## GrĆ”fico en clave de capas - Los **datos** (argumento: `data =`): - El dataframe que sirve de insumo <br> - Las **aesthetics** (funciĆ³n `aes()`: - Defino el vĆnculo entre los datos y las propiedades visuales (ejes x e y, por ej.) <br> - Las **geometrĆas** (funciĆ³n `geom_*()`: - La geometrĆa con la que se representan los datos --- ## GrĆ”fico en clave de capas <br> - **Pregunta-problema: Quiero representar la cantidad de reclamos segĆŗn el estado del reclamo, para el aƱo 2024:** ### Variables - AƱo (`anio`) - la construĆmos a partir de la base - Estado del reclamo (`estado`) - Ya se encuentra en la base - Cantidad de reclamos (`cant_reclamos`) - la construĆmos a partir de la base --- ## GrĆ”fico en clave de capas - Preparo los datos: ``` r library(tidyverse) library(rio) library(janitor) base_reclamos <- import(here::here("datos/reclamos_28-10-2024.csv")) base_grafico <- base_reclamos |> clean_nameS() %>% select(desde, sujeto_obligado, estado) %>% mutate(anio = substr(desde, 7, 12)) %>% filter(anio == 2024) %>% group_by(estado) %>% summarise(cant_reclamos = n()) ``` --- ## GrĆ”fico en clave de capas <br> - AsĆ queda nuestra tabla: ``` r base_grafico # A tibble: 2 Ć 2 estado cant_reclamos <chr> <int> 1 Cerrado 429 2 En trĆ”mite 65 ``` --- ## GrĆ”fico en clave de capas ``` r ggplot(data = base_grafico, aes(x = estado, y = cant_reclamos)) ``` <img src="data:image/png;base64,#03-visualizacion_de_datos_files/figure-html/ggplot-aesthetics-outside-1.png" width="300" /> --- ## GrĆ”fico en clave de capas ``` r ggplot(data = base_grafico, aes(x = estado, y = cant_reclamos)) + geom_col() ``` <img src="data:image/png;base64,#03-visualizacion_de_datos_files/figure-html/ggplot-aesthetics-outside-geom-1.png" width="300" /> --- class: center, middle, logo-hide # Chapa y pintura --- ## Chapa y pintura - Relleno ``` r ggplot(data = base_grafico, aes(x = estado, y = cant_reclamos)) + geom_col(fill = "red") ``` <img src="data:image/png;base64,#03-visualizacion_de_datos_files/figure-html/ggplot-aesthetics-outside-fill-1.png" width="300" /> --- ## Chapa y pintura - Relleno ``` r ggplot(data = base_grafico, aes(x = estado, y = cant_reclamos)) + geom_col(aes(fill = estado)) ``` <img src="data:image/png;base64,#03-visualizacion_de_datos_files/figure-html/ggplot-aesthetics-outside-fill-aes-1.png" width="300" /> --- ## Chapa y pintura - Contorno ``` r ggplot(data = base_grafico, aes(x = estado, y = cant_reclamos)) + geom_col(aes(fill = estado), color = "black") ``` <img src="data:image/png;base64,#03-visualizacion_de_datos_files/figure-html/ggplot-aesthetics-outside-color-1.png" width="300" /> --- ## Chapa y pintura - Referencias ``` r ggplot(data = base_grafico, aes(x = estado, y = cant_reclamos)) + geom_col(aes(fill = estado), color = "black") + labs(title = "Cantidad de reclamos por estado del reclamos") ``` <img src="data:image/png;base64,#03-visualizacion_de_datos_files/figure-html/ggplot-aesthetics-outside-labs1-1.png" width="300" /> --- ## Chapa y pintura - Referencias ``` r ggplot(data = base_grafico, aes(x = estado, y = cant_reclamos)) + geom_col(aes(fill = estado), color = "black") + labs(title = "Cantidad de reclamos por estado del reclamos", subtitle = "Argentina, aƱo 2024", x = "Estado del reclamo", y = "Cantidad de reclamos", caption = "Fuente: AAIP") ``` <img src="data:image/png;base64,#03-visualizacion_de_datos_files/figure-html/ggplot-aesthetics-outside-labs2-1.png" width="300" /> --- ## Chapa y pintura - theme ``` r ggplot(data = base_grafico, aes(x = estado, y = cant_reclamos)) + geom_col(aes(fill = estado), color = "black") + labs(title = "Cantidad de reclamos por estado del reclamos", subtitle = "Argentina, aƱo 2024", x = "Estado del reclamo", y = "Cantidad de reclamos", caption = "Fuente: AAIP") + theme_minimal() ``` <img src="data:image/png;base64,#03-visualizacion_de_datos_files/figure-html/ggplot-aesthetics-outside-theme-1.png" width="300" /> --- ## Chapa y pintura - theme ``` r ggplot(data = base_grafico, aes(x = estado, y = cant_reclamos)) + geom_col(aes(fill = estado), color = "black") + labs(title = "Cantidad de reclamos por estado del reclamos", subtitle = "Argentina, aƱo 2024", x = "Estado del reclamo", y = "Cantidad de reclamos", caption = "Fuente: AAIP") + theme_minimal() + theme(legend.position = "none") ``` <img src="data:image/png;base64,#03-visualizacion_de_datos_files/figure-html/ggplot-aesthetics-outside-theme2-1.png" width="300" />