+ - 0:00:00
Notes for current slide
Notes for next slide

rOpenSci

Paquete {eph}: Novedades e ideas para su uso

Carolina Pradier

2023/12/15

1 / 17

En el marco del rOpenSci Champions Program, el paquete eph atravesó el proceso de Software Peer Review

2 / 17

Bienvenides!

3 / 17

Bienvenides!

El plan para hoy:

3 / 17

Bienvenides!

El plan para hoy:

1.Les presentamos las novedades del paquete eph, cómo se mejora un paquete?

2.Dos avances gracias a eph::get_microdata() con Valentín Alvarez (EIDAES-UNSAM / FCE-UBA)

3.De la caja de herramientas en pendrive a la caja de herramientas en R: el paquete eph con Vladimiro Torres (EIDAES-UNSAM / FCE-UBA)

4.Paquete eph y CEPED-DATA: dos proyectos, una misma filosofía con Guido Weksler (CONICET / CEPED-FCE-UBA)

3 / 17

4 / 17

A. Estudiar y entender el paquete

5 / 17

A. Estudiar y entender el paquete

1 ¿Qué hacen mis funciones?

2 Dependencias

3 Experiencia del usuario

5 / 17

¿Qué hacen mis funciones?

Las funciones de nuestro paquete

  • Descarga y recodificación

get_microdata(), organize_caes(), organize_cno(), organize_labels(), organize_panels(), get_total_urbano(), get_eahu(), get_poverty_lines()

  • Procesamiento

calculate_errors(), calculate_poverty(), calculate_tabulates(), map_agglomerates()

6 / 17

¿Qué hacen mis funciones?

Las funciones de nuestro paquete

  • Descarga y recodificación

get_microdata(), organize_caes(), organize_cno(), organize_labels(), organize_panels(), get_total_urbano(), get_eahu(), get_poverty_lines()

  • Procesamiento

calculate_errors(), calculate_poverty(), calculate_tabulates(), map_agglomerates()

Son fáciles de leer? Fáciles de modificar? (¿Hay estructuras condicionales complejas?)

Los nombres de mis funciones y sus argumentos son intuitivos? Son consistentes (e.g. snake_case or camelCase)? Está bien la indentación?

Son a prueba de usuarios? Los errores y advertencias contra inputs inválidos son fáciles de entender?

6 / 17

Dependencias

El paquete tiene demasiadas dependencias? (aprox 20 máx)

Qué función depende de cada paquete?

Cuántas funciones de cada paquete usamos?

Podemos obtener el mismo resultado usando R base?

7 / 17

Dependencias

El paquete tiene demasiadas dependencias? (aprox 20 máx)

Qué función depende de cada paquete?

Cuántas funciones de cada paquete usamos?

Podemos obtener el mismo resultado usando R base?


Bonus: automatizar los pasos repetitivos!

7 / 17

Experiencia del usuarie

Los mensajes de error y advertencia son claros y útiles? (les usuaries hablan ingés?)

Documentación y sitio del paquete

Escuchar a les usuaries: hay issues? https://github.com/ropensci/eph/issues

8 / 17

B. Mejorando el paquete

9 / 17

B. Mejorando el paquete

1 Recursos útiles

2 Git branches, checks y tests

3 Mejorar las funciones

9 / 17

Git branches, checks y tests

Cómo asegurarnos de no romper nada?

1-Usando git branches para cambios grandes

2-Corriendo tests (usando testthat) y checks frecuentemente

11 / 17

Mejorar las funciones

Código elegante (e.g.: early returns)

Asegurar compatibilidad con versiones anteriores: "..."

Mejorar legibilidad: considerar nombres, comentarios, estructuras condicionales, etc.


Dejamos dos videos que explican en más profundidad de qué se tratan estas mejoras (inicial y avanzado)

12 / 17

C. Resultados: Cuáles son las novedades del paquete eph?

13 / 17

C. Resultados: Cuáles son las novedades del paquete eph?

1 Funciones nuevas

2 Código y dependencias

3 Documentación y mensajes de error

13 / 17

Funciones nuevas

Sumamos dos funciones nuevas: get_total_urbano() y get_eahu() para descargar las Encuestas Anuales de Hogares Urbanos.

14 / 17

Código y dependencias

Reestructuramos las funciones para un código más limpio, eficiente y legible. El código ahora sigue las pautas de estilo de tidyverse.

Modificamos la función get_microdata() para evitar conflictos de parámetros entre trimestre y onda.

Redujimos las dependencias, recurriendo más a R base.

15 / 17

Código y dependencias

Reestructuramos las funciones para un código más limpio, eficiente y legible. El código ahora sigue las pautas de estilo de tidyverse.

Modificamos la función get_microdata() para evitar conflictos de parámetros entre trimestre y onda.

Redujimos las dependencias, recurriendo más a R base.

Un ejemplo: glue vs sprintf


link = glue::glue("https://www.indec.gob.ar/ftp/cuadros
/menusuperior/eph/EPH_usu_{trimester}_Trim_{year}_txt.zip")
link= sprintf('https://www.indec.gob.ar/ftp/cuadros
/menusuperior/eph/EPH_usu_%s_Trim_%s_txt.zip',
trimester,year)
15 / 17

Documentación y mensajes de error

Mejoramos la documentación y el sitio web del paquete. Por otro lado, las mejoras (y traducciones) en los mensajes de error y advertencia hacen que trabajar con el paquete sea más intuitivo. Les usuaries no deberían necesitar conocimiento experto para trabajar con nuestros datasets.

16 / 17

Documentación y mensajes de error

Mejoramos la documentación y el sitio web del paquete. Por otro lado, las mejoras (y traducciones) en los mensajes de error y advertencia hacen que trabajar con el paquete sea más intuitivo. Les usuaries no deberían necesitar conocimiento experto para trabajar con nuestros datasets.

Al correr este código (la variable departamentos no existe):

calculate_tabulates(x = "departamentos", add.percentage = "col")

El mensaje de error era este:

Error in model.frame.default(formula = ~x_vec, data = base) :
invalid type (NULL) for variable 'x_vec'

Y ahora:

Error in `calculate_tabulates()`:
! La variable x no pertence a la base de datos
ℹ Puede usar names() para extraer los nombres de las variables.
16 / 17

Gracias!

17 / 17

En el marco del rOpenSci Champions Program, el paquete eph atravesó el proceso de Software Peer Review

2 / 17
Paused

Help

Keyboard shortcuts

, , Pg Up, k Go to previous slide
, , Pg Dn, Space, j Go to next slide
Home Go to first slide
End Go to last slide
Number + Return Go to specific slide
b / m / f Toggle blackout / mirrored / fullscreen mode
c Clone slideshow
p Toggle presenter mode
t Restart the presentation timer
?, h Toggle this help
Esc Back to slideshow