-
Notifications
You must be signed in to change notification settings - Fork 2
/
01_proyectos.qmd
271 lines (177 loc) · 12.9 KB
/
01_proyectos.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
---
title: Entorno de trabajo
---
## Objetivos de aprendizaje
- Interactuar con la interfaz de RStudio para navegar archivos y directorios
- Interpretar las rutas como ubicaciones dentro de las carpetas
- Crear proyectos RStudio e identificar el directorio de trabajo
- Reconocer los paneles de la interfaz de RStudio y sus ubicaciones por defecto
## El problema
Imagina que arrancas el cuatrimestre y tenes que continuar con un proyecto de análisis de datos.
O mejor te tomaste unas largas vacaciones.
Por supuesto, todo el código y los datos están en una única carpeta y además lo publicaste en un repositorio público.
Es hora de volver a trabajar, pero ¿qué fue lo último que hiciste? ¿qué falta?.
Empezas a revisar la carpeta del proyecto y encuentras algo así.
```
/home/dorothy/Documentos/proyecto
├── resumen.R
├── correlation.png
├── datos.csv
├── datos2.csv
├── fig1.png
├── figura2(copy).png
├── figura.png
├── figura1.png
├── figura10.png
├── datos_crudos.csv
├── script.R
└── script_final.R
```
Y no tienes ni idea por donde arrancar.
Hay tres archivos `.R` que podrían ser el script con el código que escribiste, varios posibles archivos que contienen algunos "datos" no especificados y un montón de archivos de imagenes con nombres que dan poca información sobre su contenido.
Sin un archivo README (documento descriptivo) ni ninguna otra documentación que te ayude a resolver este lío, es muy posible que cueste mucho tiempo volver al punto en el que estabas y continuar con tu trabajo.
Para evitar esta situación necesitamos tener en cuenta la reproducibilidad y el desarrollo de software desde el inicio.
La reproducibilidad tiene que ver tanto con las personas que interactúan con el código como con las máquinas que deben ejecutarlo.
Hacer que tu código y análisis sea reproducible es permitir que otras personas (y vos en el futuro) puedan revisar, usar y ampliar tu trabajo.
Esto requerira aplicar distintos principios de programación y desarrollo de software que veremos a lo largo del curso.
Empecemos organizando el trabajo.
## Crear un proyecto organizado
Lo que cuenta como "organizado" es muy personal, pero lo principal es que la estructura de carpetas y los nombres de los archivos deben:
1. ser autodocumentados
2. ser útiles a la hora de escribir código
3. estar en el mismo lugar, es decir, todos los archivos necesarios están dentro de la carpeta raíz
### Archivos que se autodocumentan
Aprovechá carpetas con nombres informativos para autodocumentar las distintas partes de tu análisis.
Coloca tus datos en `datos`, los scripts de preprocesamiento en `scripts` o `preprocesamiento` y tu análisis en `analisis`.
Utiliza también subcarpetas, como `datos/crudos` para guardar los datos originales y `datos/derivados` para los datos preprocesados y depurados.
Nombrá tus archivos de modo que puedas saber que incluyen aún si pasaron 10 años desde que los creaste.
Utiliza nombres cortos, descripciones breves de lo que hay dentro.
::: ejercicio
Describi cuál crees que es el contenido de estos archivos:
- `datos/crudos/madrid_temperatura-minima.csv`
- `scripts/02_calcula_temperatura-media.R`
- `analysis/01_madrid_temperatura-minima_analisis-estadistico.Rmd`
:::
::: ejercicio
Pensá en buenos nombres de archivos y carpetas para:
- un conjunto de datos sobre gatos con columnas para el peso, la longitud, la longitud de la cola, el color o colores del pelaje, el tipo de pelaje y el nombre.
- un script que descarga datos de Spotify.
- un script que limpia los datos de Spotify.
- un script que ajusta un modelo lineal y lo guarda en un archivo.
- el archivo .Rds en el que se guarda ese modelo.
:::
::: tip
Utiliza una estructura de carpetas conocida
No existe una única estructura de carpetas objetivamente mejor.
En caso de duda, intenta seguir las convenciones de tu comunidad de investigación.
Esto minimizará cualquier fricción entre tú y tu público potencial.
:::
### Archivos con los que puedes programar
Recuerda siempre que las computadoras son bastante tontas, así que sé amable y utiliza nombres de archivo que puedan entender fácilmente.
En algunos casos, los nombres de archivo con espacios confunden a las computadoras, por lo que en general es mucho más fácil trabajar si los nombres de archivo utilizan guiones para dividir las palabras.
Del mismo modo, algunas máquinas no pueden manejar "caracteres especiales" como la "ñ" o las tildes.
También es mejor evitar algunos símbolos (".", "\*", y otros) porque tienen un significado especial en las expresiones regulares.
Algunos sistemas de archivos no distinguen entre mayúsculas y minúsculas, por lo que `Temperatura-Madrid.csv` y `temperatura-madrid.csv` pueden ser el mismo archivo.
Para evitar dolores de cabeza, es mejor y por el lado conservador y solo utilizar caracteres latinos en minúsculas, números y guiones ("\_" y "-").
Utiliza guiones como separadores.
Puedes utilizar "-" para separar palabras que formen parte del mismo concepto y "\_" para separar conceptos.
Por ejemplo `temperatura-minima_buenos-aires.csv`, en este caso `temperatura-minima` es un cocepto y `buenos-aires` otro.
Recomendamos esta convención y no al revés, porque es compatible con el formato de fecha ISO ("AAAA-MM-DD").
::: tip
Si utilizás los separadores de forma coherente e inteligente, podrás analizar los nombres de los archivos como parte de tu código.
Por ejemplo, si tienes
```{r, include=FALSE}
ciudades <- c("madrid", "buenos-aires")
variables <- c("temperatura-minima", "temperatura-maxima")
archivos <- with(expand.grid(ciudades, variables), paste0(Var1, "_", Var2))
```
```{r}
archivos
```
También podrías extraer ciudades y nombres de variables desde los nombres de los archivos
```{r}
strsplit(archivos, "_")
```
:::
Por último, intentá que tus archivos sean fácilmente ordenables.
Comezá el nombre del archivo con números (que incluya suficientes ceros a la izquierda) y, si aplica, utilizá fechas en formato AAAA-MM-DD para que el orden de los archivos por nombre coincida con el orden por fecha.
### Que tu proyecto sea autocontenido
Un aspecto importante a la hora de pensar en tu proyecto es que todos los scripts, datos, figuras y cualquier otra cosa que se necesite para (re)crear el análisis esté dentro de la misma carpeta raíz.
De ese modo te aseguras de que lo único que tienes que dar a otra persona para que ejecute correctamente tu código es esa única carpeta.
También te facilita la vida si trabajas en el mismo proyecto en distintas computadoras, ya que te permite sincronizar una única carpeta.
::: importante
Más adelante veremos como *empaquetar* código para compartirlo con otras personas.
:::
Un paso extra a tener en cuenta es que no puedes hacer que tu trabajo sea portable si tu código no lo es también.
Quizás el principal culpable de que el código no sea portable sea utilizar rutas absolutas para manipular archivos en tu código.
La siguiente línea de código lee el archivo `datos.csv`:
```{r, eval=FALSE}
read.csv("/home/dorothy/Documentos/proyectos/mitrabajo/datos/datos.csv")
```
Aunque hayas descargado correctamente la carpeta `mitrabajo` desde algún repositorio, este código va a dar error porque es poco probable que hayas guardado esa carpeta dentro de `Documentos/proyectos` y que tu nombre de usuario en la computadora sea "dorothy".
En cambio, podes utilizar una ruta relativa:
```{r, eval=FALSE}
read.csv("datos/datos.csv")
```
Esto se ejecutará independientemente de dónde se encuentre la carpeta raíz de tu proyecto ya que hace referencia solo a lo que está adentro.
Como veremos a continuación los proyectos de RStudio ayudan a definir cual es la carpeta raíz de manera automática.
## Proyectos de RStudio
RStudio proporciona una forma ordenada y estructurada de separar tus proyectos en diferentes contextos.
No ayudan estrictamente a la reproducibilidad del producto final, pero te ayudarán a agilizar tu flujo de trabajo encapsulando cosas como la lista de archivos abiertos, el historial de comandos de R y la configuración de RStudio para cada proyecto.
Abrir un proyecto de RStudio también garantiza que inicies una nueva sesión de R cada vez y establece tu directorio de trabajo en la carpeta raíz del proyecto.
::: ejercicio
Creá un nuevo proyecto de RStudio
1. Hace clic en "File" y luego en "New Project...".
2. Hace clic en "New directory".
3. Verás una lista de varias plantillas. Selecciona "New project".
4. Escribí el nombre de la carpeta raíz en la que vivirá tu proyecto y selecciona la ubicaciónn en la que quieres que se cree esta carpeta haciendo clic en "Browse".
5. Hace clic en "Create project".
- ¿Cuál es la ruta absoluta a la carpeta de tu proyecto?
- Si cerrás RStudio, ¿cómo podés asegurarte de que tu carpeta de trabajo es la carpeta de tu proyecto la próxima vez que abras RStudio?
:::
Si todo salió bien, deberías tener una nueva carpeta con el nombre que elejiste para tu proyecto.
Es una carpeta común y corriente; lo que la distingue como proyecto de RStudio es el archivo .Rproj, que contiene las opciones de RStudio específicas del proyecto, y la carpeta oculta .Rproj.user, donde se encuentran los archivos temporales específicos del proyecto.
Cada proyecto de RStudio tiene su propio conjunto de opciones que podés cambiar sin alterar las opciones globales ni las de otros proyectos.
## Abrir un proyecto
La forma más sencilla de abrir un proyecto es abrir la carpeta que lo contiene y hacer doble clic en el archivo .Rproj.
También puedes abrir rápidamente un proyecto utilizado recientemente haciendo clic en el icono de proyecto situado a la derecha de la barra de herramientas de RStudio.
Esto abrirá una nueva ventana de RStudio con su propia sesión de R y la carpeta del proyecto será el directorio o carpeta raiz.
Por defecto, también abrirá los archivos abiertos anteriormente.
Incluso conservará los cambios no guardados.
Esto ayuda a mantener tu trabajo ordenado y facilita retomar o compartir lo que has hecho más tarde.
RStudio te permite tener abiertos varios proyectos, y esto es posible porque cada proyecto tiene su propia carpeta.
Puedes trabajar con varios proyectos en paralelo sin que el código o los resultados de un análisis interfieran con los de otro.
::: ejercicio
Abrí tu proyecto
1. En tu nuevo proyecto, crea un nuevo archivo .R y escribe algo de código (por ejemplo `print("Hola!")` o `x <- 2 + 2)`, no te olvides de guardarlo.
2. Cerrá la ventana de RStudio.
3. Ahora abrí una nueva ventana de RStudio y el proyecto de RStudio que acabas de cerrar (dependiendo de tus opciones globales, puede que se abra por defecto).
:::
## Borrón y cuenta nueva... todos los días
¿Cómo garantizamos que el análisis sea realmente reproducible?
Es una pregunta bastante amplia y existen muchas herramientas para resolver este problema.
Por ahora vamos a concentrarnos en que, al menos en tu computadora, puedas repetir los cálculos o el análisis desde cero.
Y además de organizar los proyectos y no modificar los datos originales, ¿cómo podés asegurarte de guardar todo el código que estuviste usando y genera el análisis?
La forma más directa es reiniciar la sesión de R y volver a ejecutar el código, si da un error o no devuelve lo que esperabas significa que te has saltado un paso.
::: tip
Puedes reiniciar la sesión de R con el atajo de teclado Ctrl+Shif+F10.
:::
Esto puede ocurrir si, por ejemplo, lees datos en memoria ejecutando un comando en la consola.
Mientras trabajamos, R tendrá esos datos en memoria y podrás hacer cálculos y gráficos, pero tu código no será reproducible porque le falta el paso importante de leer los datos.
La mejor forma de asegurarte de que esto no ocurra es volver a ejecutar tu código en una sesión nueva de R a menudo, para asegurarte de que tu código es reproducible en cada paso del análisis.
Sin embargo, por defecto RStudio guardará el entorno en un archivo oculto llamado .RData y lo restaurará al iniciarse, de modo que los datos seguirán estando en la memoria.
Y aunque esto resulta útil para que puedas arrancar tu trabajo exactamente donde lo dejaste cada vez que abras tu proyecto, puede llevar a una situación en la que nunca te des cuenta de que se te pasó guardar una línea de código clave en tu análisis.
::: ejercicio
Configurá tu proyecto
1. Ve a "Tools" -> "Project options...".
2. En la pestaña "General"
- Destildar la opción "Restore .RData into the workspace at startup"
- "Save workspace to .RData on exit": Selecciona "Never" en el menú desplegable
:::
::: importante
Puedes cambiar estas preferencias a nivel global con "Tools" -> "Global Options" en la sección "General"
:::
### Recursos
[Estructura del proyecto - Diapositivas de Danielle Navarro](https://slides.djnavarro.net/project-structure/)
[Empaquetar el trabajo analítico de datos de forma reproducible utilizando R (y amigos)](https://peerj.com/preprints/3192v1)
[Cómo (y por qué) hacer un compendio de investigación](https://mbjoseph.github.io/intro-research-compendia/)