Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Análisis y Visualización de Datos en R—Módulo2

Análisis y Visualización de Datos en R—Módulo2

Por qué es importante la limpieza de datos y cómo se hace en R.

xihh87

May 28, 2021
Tweet

More Decks by xihh87

Other Decks in Programming

Transcript

  1. Análisis y Visualización de datos en R Módulo 2: Limpieza

    de Datos Guillermo González Jorge Ruiz Joshua Haase 2021-05-28 1
  2. Para limpiar datos, usaremos estos paquetes install.packages(c( 'readr', # para

    leer archivos fácilmente 'tidyr', # para limpiar datos 'dplyr', # para transformar formato de datos 'magrittr' # para hacer composición de funciones )) ## Installing magrittr [2.0.1] ... ## OK [linked cache] ## Installing readr [1.4.0] ... ## OK [linked cache] ## Installing dplyr [1.0.6] ... ## OK [linked cache] ## Installing tidyr [1.1.3] ... ## OK [linked cache] 2
  3. También necesitaremos descargar la información de ENCOVID # Si este

    comando no funciona, # sigue alguno de estos instructivos: # - https://stackoverflow.com/a/54086635 # - https://stat545.com/make-windows.html # system('make') system('make datos docs') 3
  4. La recolección y limpieza de datos toma el 80% del

    tiempo en un proyecto de datos (Osborne 2013) Figure 1: Proceso simplificado de análisis (Wickham and Grolemund 2016) 4
  5. ”Muéstrame tus diagramas de flujo y oculta tus tablas, así

    seguiré confundido. Muéstrame tus tablas y casi nunca necesitaré tus diagramas de flujo; serán obvios.” Frederick Brooks, Jr 6
  6. ”Regla 5. La información domina. Si eliges las estructuras de

    datos correctas y organizas bien las cosas, los algoritmos serán casi siempre evidentes. Las estructuras de datos, no los algoritmos, son lo central de la programación.” Rob Pike 7
  7. ”Los programadores malos se preocupan por el código. Los buenos

    se preocupan por las es- tructuras de datos y sus relaciones. De hecho, propongo que la diferencia entre un buen y un mal programador, es si considera más importante su código o sus estructuras de datos.” Linus Torvalds 8
  8. Recuerda que si entra basura, sale basura Figure 2: La

    primera calculadora mecánica. A.K.A. «La máquina» ”En dos ocasiones me preguntaron «Si pones información errónea en la máquina ¿te dará las respuestas correctas?» No soy capaz de entender qué confusión de ideas podría provocar tal pregunta.” Charles Babbage 9
  9. Usar una variable por columna, una observación por fila, un

    valor por celda (Wickham 2014) Figure 3: Así debe verse la información que analizas (Wickham and Grolemund 2016) 10
  10. Conservar únicamente los datos que necesitas para resolver la pregunta

    (Fry 2008) “La ingeniería de características tiene más impacto en la precisión predictiva que cualquier cosa que hagas en la fase de modelado.” Maciek Wasiak 11
  11. Los datos pueden ser difíciles de usar porque se optimizan

    para su procesamiento en cerebros y no en computadoras 12
  12. Los datos pueden ser difíciles porque surgieron de la facilidad

    de una hoja de cálculo y no se optimizaron para su análisis 13
  13. Los datos pueden ser difíciles de usar porque se optimizan

    para su almacenamiento y no su análisis • Se codifican para ocupar menos espacio (0,1,2,3,4 < “MALO,” “MEDIOCRE,” “BUENO,” “MUY BUENO,” “EXCELENTE”) 14
  14. Los datos pueden ser difíciles de usar porque se optimizan

    para su almacenamiento y no su análisis • Se codifican para ocupar menos espacio (0,1,2,3,4 < “MALO,” “MEDIOCRE,” “BUENO,” “MUY BUENO,” “EXCELENTE”) • Pero se separa los datos de su interpretación (¿1 es ROJO o AZUL?) 14
  15. Los datos pueden ser difíciles de usar porque se optimizan

    para su almacenamiento y no su análisis • Se codifican para ocupar menos espacio (0,1,2,3,4 < “MALO,” “MEDIOCRE,” “BUENO,” “MUY BUENO,” “EXCELENTE”) • Pero se separa los datos de su interpretación (¿1 es ROJO o AZUL?) • Se separan para hacer imposible la inconsistencia en los datos. 14
  16. Los datos pueden ser difíciles de usar porque se optimizan

    para su almacenamiento y no su análisis • Se codifican para ocupar menos espacio (0,1,2,3,4 < “MALO,” “MEDIOCRE,” “BUENO,” “MUY BUENO,” “EXCELENTE”) • Pero se separa los datos de su interpretación (¿1 es ROJO o AZUL?) • Se separan para hacer imposible la inconsistencia en los datos. • Pero se hace costoso unirlos. 14
  17. Los datos pueden ser difíciles de usar porque se optimizan

    para su almacenamiento y no su análisis • Se codifican para ocupar menos espacio (0,1,2,3,4 < “MALO,” “MEDIOCRE,” “BUENO,” “MUY BUENO,” “EXCELENTE”) • Pero se separa los datos de su interpretación (¿1 es ROJO o AZUL?) • Se separan para hacer imposible la inconsistencia en los datos. • Pero se hace costoso unirlos. • No se establece un buen sistema para exportar los datos a su formato correcto. 14
  18. Los datos faltantes se pueden agregar directamente en el con-

    junto de datos Supongamos que tengo 2 archivos con información similar pero de diferente fecha. datos_abril <- read_csv('data/raw/2020-04.csv') datos_abril %>% # Mucho ojo, este es el paquete magrittr mutate( `año` = '2020', `mes` = '04' ) ## # A tibble: 833 x 93 ## id sexo edad ent p1_riesgo p2_riesgo p3_riesgo ## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 1 1 47 1 1 1 2 ## 2 2 0 42 11 2 2 1 15
  19. Se pueden guardar los datos procesados directamente en la variable

    datos_mayo <- read_csv('data/raw/2020-05.csv') datos_mayo %<>% # ¿Notas la diferencia? mutate( `año` = '2020', `mes` = '05' ) datos_mayo ## # A tibble: 1,680 x 219 ## parte id sexo edad ent tam_hog tot_trab men_tr ## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <db ## 1 2 12 1 39 20 4 2 ## 2 1 25 1 57 15 3 1 16
  20. Verificamos nuestros datos # Si notaste la diferencia, eso explica

    este problema datos_abril %>% select( `año`, `mes` ) %>% table datos_mayo %>% select( `año`, `mes` ) %>% table ## mes 17
  21. Supongamos que queremos hacer sentido de la edad o la

    enti- dad datos_mayo %<>% mutate( sexo = recode( sexo, '0' = 'H', '1' = 'M' # ¿Es esto cierto? ) ) datos_mayo ## # A tibble: 1,680 x 219 ## parte id sexo edad ent tam_hog tot_trab men_tr ## <dbl> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <db ## 1 2 12 M 39 20 4 2 18
  22. Para seleccionar información de interés datos_mayo %<>% select( sexo, edad,

    p35_economia ) datos_mayo ## # A tibble: 1,680 x 3 ## sexo edad p35_economia ## <chr> <dbl> <dbl> ## 1 M 39 4 ## 2 M 57 1 ## 3 H 24 3 ## 4 M 30 4 19
  23. Para hacer más significativos los nombres datos_mayo %<>% rename( perder_empleo

    = p35_economia ) datos_mayo ## # A tibble: 1,680 x 3 ## sexo edad perder_empleo ## <chr> <dbl> <dbl> ## 1 M 39 4 ## 2 M 57 1 ## 3 H 24 3 ## 4 M 30 4 ## 5 H 60 2 ## 6 H 40 3 20
  24. Como los compañeros del EQUIDE hicieron un buen trabajo, traje

    un conjunto de datos sucio de otro lado # Tomado de https://tidyr.tidyverse.org/articles/tidy-data. incomes <- read_tsv('data/example/income.tsv') ## ## -- Column specification -------------------------------- ## cols( ## religion = col_character(), ## `<$10k` = col_double(), ## `$10-20k` = col_double(), ## `$20-30k` = col_double(), ## `$30-40k` = col_double(), ## `$40-50k` = col_double(), ## `$50-75k` = col_double(), ## `$75-100k` = col_double() 21
  25. Reacomodar los datos en caso de que no estén limpios

    # https://tidyr.tidyverse.org/reference/pivot_longer.html incomes %<>% pivot_longer( -religion, names_to = "income", values_to = "frequency" ) incomes ## # A tibble: 70 x 3 ## religion income frequency ## <chr> <chr> <dbl> ## 1 Agnostic <$10k 27 ## 2 Agnostic $10-20k 34 22
  26. Si necesitas volver a la forma original de los datos

    por alguna razón # https://tidyr.tidyverse.org/reference/pivot_wider.html incomes %>% pivot_wider( names_from=income, values_from = frequency ) ## # A tibble: 10 x 8 ## religion `<$10k` `$10-20k` `$20-30k` `$30-40k` `$40-5 ## <chr> <dbl> <dbl> <dbl> <dbl> <d ## 1 Agnostic 27 34 60 81 ## 2 Atheist 12 27 37 52 ## 3 Buddhist 27 21 30 34 ## 4 Catholic 418 617 732 670 23
  27. Si tienes más de un valor en una celda incomes

    %>% # https://tidyr.tidyverse.org/reference/extract.html extract( income, regex="([0-9]*)k?[<>-]\\$?([0-9]*)k?", into=c("min_income", "max_income"), convert = TRUE, #remove=FALSE ) %>% mutate( min_income = replace_na(min_income, 0), min_income = min_income * 1000, max_income = max_income * 1000 ) 24
  28. Ejercicio de limpieza de datos para ENCOVID system('make limpiar-datos') ¿Cómo

    podemos mejorar la limpieza de datos scripts? • TIP: Empezar por la pregunta de investigación 25
  29. Enlaces útiles para la actividad de limpieza El sitio oficial

    de ENCOVID Hoja de comandos útiles para limpiar datos en R Ejemplo de cómo limpiar datos desordenados Hoja de comandos útiles para transformar formato de datos Hoja de comandos útiles para importar datos Bonus: Una guía para organizar tus proyectos de ciencia de datos Un libro de acceso abierto acerca de la visualización 26
  30. De tarea, recomiendo instalar el tidyverse install.packages( # paquetes de

    R que usan composición de funciones # con una gramática de análisis y visualización 'tidyverse' ) ## Installing tidyverse [1.3.1] ... ## OK [linked cache] 27
  31. Referencias i Fry, Ben. 2008. Visualizing Data. Sebastopol, CA: O’Reilly

    Media, Inc. Osborne, Jason W. 2013. Best Practices in Data Cleaning: A Complete Guide to Everything You Need to Do Before and After Collecting Your Data. Thousand Oaks, Calif: SAGE. Wickham, Hadley. 2014. “Tidy Data.” Journal of Statistical Software 59 (10). https://doi.org/10.18637/jss.v059.i10. Wickham, Hadley, and Garrett Grolemund. 2016. R for Data Science: Import, Tidy, Transform, Visualize, and Model Data. First edition. Sebastopol, CA: O’Reilly. 28