-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.Rmd
8907 lines (5806 loc) · 233 KB
/
index.Rmd
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
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
---
title: "Analizando datos, visualizando información, contando historias"
subtitle: "Curso de la ECI 2022"
author:
- "Autores: Javier Álvarez Liébana y Gabriel Valverde Castilla"
institute: "Facultad de Estudios Estadísticos (UCM)"
date: "31/01/2022 - 04/02/2022 (actualizado: `r Sys.Date()`)"
output:
xaringan::moon_reader:
self_contained: false
lib_dir: libs
css: [default, style.css]
nature:
# beforeInit: "stylejs.js"
slideNumberFormat: "%current%"
highlightStyle: github
highlightLines: true
ratio: 16:9
countIncrementalSlides: true
---
```{r settings, include = FALSE}
options(htmltools.dir.version = FALSE)
knitr::opts_chunk$set(fig.retina = 3, out.width = "100%", cache = FALSE,
comment = ">", echo = TRUE, message = FALSE,
warning = FALSE, hiline = TRUE, dpi = 100)
# xaringan Extra
# devtools::install_github("gadenbuie/xaringanExtra")
library(xaringanExtra)
use_xaringan_extra(c("tile_view", "animate_css", "tachyons"))
use_tile_view() # panel
# xaringanExtra::use_scribble() # scribble
use_extra_styles(hover_code_line = TRUE,
mute_unhighlighted_code = FALSE) # Hover triangle code line
use_clipboard( # About clipboard
button_text = "Click para copiar código",
success_text = "Código copiado",
error_text = "Ctrl+C para copiar"
)
use_freezeframe() # restarting gifs
use_animate_all("fade") # animates
use_panelset() # panels
```
class: inverse center middle
# PRESENTACIÓN DEL CURSO
$$\\[2.7in]$$
.left[Pulsa <kbd-black>O</kbd-black> para ver el panel de diapositivas]
.left[Pulsa <kbd-black>H</kbd-black> para ver otros atajos]
---
# Material del curso
<img src = "https://raw.githubusercontent.com/dadosdelaplace/slides-ECI-2022/main/img/imagen_curso.jpeg" alt = "course-ECI" align = "right" width = "360" style = "margin-top: 20vh;margin-right: 0.5rem;margin-left: 1rem;">
- **Web** del curso:
<https://dadosdelaplace.github.io/curso-dataviz-ECI-2022>
- **Diapositivas** del curso ([**código R de las diapositivas**](https://github.com/dadosdelaplace/slides-ECI-2022)):
<https://dadosdelaplace.github.io/slides-ECI-2022>
- **Manual** del curso ([**código R del manual**](https://github.com/dadosdelaplace/courses-ECI-2022)):
<https://dadosdelaplace.github.io/courses-ECI-2022>
- **Scripts** del curso:
<https://github.com/dadosdelaplace/courses-ECI-2022/tree/main/scripts>
- **Canal de Teams** para dudas, preguntas y demás cosicas
---
# Objetivos
<img src = "https://raw.githubusercontent.com/dadosdelaplace/slides-ECI-2022/main/img/imagen_curso.jpeg" alt = "course-ECI" align = "right" width = "360" style = "margin-top: 20vh;margin-right: 0.5rem;margin-left: 1rem;">
¡Bienvenidos/as/es!
Tomen asiento, entren a la secta del **software libre** y dejen sus Excel en la entrada
El **objetivo** del curso no es ser un/a sesudo/a programador/a de `R`, sino adquirir los suficientes conocimientos como para lograr 5 objetivos:
- **Perder el miedo** a programar.
- Entender los [**conceptos básicos de R**](https://cran.rstudio.com/), lenguaje estadístico por excelencia, desde cero.
- Dotarnos de **autonomía en el análisis** de datos.
- Crear programas y flujos de trabajo **reproducibles** y mantenibles.
- Adquirir habilidades en la **visualización de datos** en `R` (haciendo uso también de otras herramientas como [**Datawrapper**](https://www.datawrapper.de/)), incluyendo la visualización de datos en **mapas**.
📚 Estas **diapositivas** han sido elaboradas con el propio `R` haciendo uso del paquete `{xaringan}`
y `{xaringanExtra}`.
---
class: inverse middle
### BLOQUE I. Introducción a R desde cero
* Instalación de R y RStudio. Primeros pasos. Tipos de datos.
* Datos estructurados: matrices y data.frame
* Extras: estructuras de control, proyectos
### BLOQUE II. Introducción a tidyverse
* Funciones
* Tibbles y tidy data
* Introducción a tidyverse. Relacionando datos (joins).
### BLOQUE III. Introducción al dataviz en R
* Dataviz: introducción histórica.
* Introducción a ggplot2
* Dataviz: la importancia de visualizar datos.
* Profundizando en ggplot2
### BLOQUE IV. Comunicando resultados
* Introducción a rmarkdown.
En el curso se profundizó además en la visualización y análisis de datos electorales, aprendimos a conectar `R` con datawrapper, y visualizamos datos en mapas vectoriales y raster.
---
class: inverse center middle
# Bloque I: introducción a R desde cero.
### [Instalación y primeros pasos](#instalacion-primeros-pasos)
### [Celdas: tipos de datos](#tipos-datos)
### [Columnas: vectores](#vectores)
### [Tablas: estructuras de datos](#matrices-dataframes)
### [Extras: estructuras de control](#estructuras)
---
name: instalacion-primeros-pasos
class: center, middle
# Instalación y primeros pasos
## **Instalación de R**
Programaremos como escribimos un libro: necesitamos una **gramática** (`R`) y un **Word** (`RStudio`).
---
# Requisitos del curso
Para el presente curso los únicos **requisitos** serán:
1. **Conexión a internet** (para la descarga de algunos datos y paquetes).
2. **Instalar R**: será nuestro **lenguaje**, nuestro **castellano** para poder «comunicarnos con el ordenador. La descarga la haremos (gratuitamente) desde <https://cran.r-project.org/>
3. **Instalar R Studio**. De la misma manera que podemos escribir castellano en un ordenador, en un Word, en un papel o en un tuit, podemos usar distintos IDE (entornos de desarrollo integrados, nuestro Office), para que el trabajo sea más cómodo. Nuestro **Word** para nosotros será **RStudio**.
.left[
<img src = "https://raw.githubusercontent.com/dadosdelaplace/slides-ECI-2022/main/img/cran-R.jpg" alt = "cran-R" align = "left" width = "500" style = "margin-top: 5vh">
]
.right[
<img src = "https://raw.githubusercontent.com/dadosdelaplace/slides-ECI-2022/main/img/R-studio.jpg" alt = "RStudio" align = "right" width = "500" style = "margin-top: 5vh;">
]
---
# Instalación de R
El **lenguaje de programación R** será nuestra **gramática**, nuestra ortografía y nuestro diccionario
<img src = "https://dadosdelaplace.github.io/courses-ECI-2022/img/pantalla1_cran.jpg" alt = "cran-R" align = "right" width = "500" style = "margin-top: 10vh;margin-right: 0.5rem;margin-left: 1rem;">
* **Paso 1**: entra en la [web oficial de R](https://cran.r-project.org/) y selecciona la instalación acorde a tu sistema operativo.
* **Paso 2**: para **Mac** basta con que hacer click en el archivo **.pkg**, y abrirlo una vez descargado. Para sistemas **Windows**, debemos clickar en `install R for the first time` y en la siguiente pantalla hacer click en `Download R for Windows`. Una vez descargado, **abrirlo como cualquier archivo de instalación**.
* **Paso 3**: abrir el **ejecutable** de tu escritorio o en tu Launchap (en Windows puede que tengas dos ejecutables i386 y x64, la versión de 32 y de 64 bits; haz click preferiblemente en el de x64).
---
# Primera operación
Para comprobar que se ha instalado correctamente, tras abrir `R`, deberías ver una **pantalla blanca** similar a esta (en realidad se llama **consola**)
<img src = "https://dadosdelaplace.github.io/courses-ECI-2022/img/cranR.jpg" alt = "consola" align = "left" width = "350" style = "margin-top: 5vh;margin-right: 3rem;">
Vamos a escribir **nuestra primera operación** en la consola:
* Una variable llamada `a` le asignaremos el valor `1`. En `R` asignaremos valores con `<-`, como una flecha: `a <- 1` significa que a una variable que llamamos a le asignamos el valor 1.
* Una variable llamada `b` le asignaremos el valor `2`.
* **Sumamos las variables** haciendo `a + b`.
```{r eval = FALSE}
# Primera operación
a <- 1 # Una variable a con valor --> 1
b <- 2 # Una variable b con valor --> 2
a + b #<<
```
El **resultado** que nos devuelve la consola será 3 (2 + 1).
```{r echo = FALSE}
a <- 1
b <- 2
a + b
```
---
# Instalación de R Studio
El **Word** que usaremos para trabajar y escribir en nuestro lenguaje será **RStudio** (lo que se conoce como un IDE: entorno integrado de desarrollo).
<img src = "https://dadosdelaplace.github.io/courses-ECI-2022/img/pantalla_rstudio.jpg" alt = "RStudio" align = "right" width = "450" style = "margin-top: 10vh;margin-right: 2rem;">
* **Paso 1**: entra la [web oficial de RStudio](https://www.rstudio.com/products/rstudio/download/#download) y selecciona la descarga gratuita.
* **Paso 2**: selecciona el ejecutable que te aparezca acorde a tu sistema operativo.
* **Paso 3**: tras descargar el ejecutable, hay que abrirlo como otro cualquier otro ejecutable y dejar que termine la instalación.
---
# Organización de RStudio
<img src = "https://dadosdelaplace.github.io/courses-ECI-2022/img/inicio_rstudio_2.jpg" alt = "Rstudio" align = "left" width = "333" style = "margin-top: 3vh;margin-right: 2rem;margin-bottom: 1vh;">
<img src = "https://dadosdelaplace.github.io/courses-ECI-2022/img/inicio_rstudio_3.jpg" alt = "Rstudio" align = "left" width = "283" style = "margin-top: 3vh;margin-right: 2rem;margin-bottom: 1vh;">
<img src = "https://dadosdelaplace.github.io/courses-ECI-2022/img/inicio_rstudio_4.jpg" alt = "Rstudio" align = "left" width = "298" style = "margin-top: 3vh;margin-right: 2rem;margin-bottom: 1vh;">
* **Consola**: es el nombre para llamar a la ventana grande que te ocupa buena parte de tu pantalla. Prueba a escribir el mismo código que antes (la suma) en ella. La consola será donde **ejecutaremos órdenes y mostraremos resultados**.
* **Environment (entorno de variables)**: la pantalla pequeña (puedes ajustar los márgenes con el ratón a tu gusto) que tenemos en la parte superior derecha. Nos mostrará las **variables que tenemos definidas, el tipo y su valor**.
* **Panel multiusos**: la ventana que tenemos en la parte inferior derecha no servirá para buscar **ayuda de funciones**, además de para **visualizar gráficos**.
---
# Tips de RStudio: modo oscuro
<img src = "https://dadosdelaplace.github.io/courses-ECI-2022/img/menu_1.jpg" alt = "Rstudio" align = "left" width = "300" style = "margin-top: 3vh;margin-right: 2rem;">
<img src = "https://dadosdelaplace.github.io/courses-ECI-2022/img/menu_2.jpg" alt = "Rstudio" align = "left" width = "350" style = "margin-top: 3vh;margin-right: 2rem;">
**Consejo**: cambiar en tu `RStudio` la tonalidad del fondo de tu programa, en tonos oscuros y no blancos.
---
# ¿Qué es R?
<img src = "https://logos.turbio.repl.co/rlang.svg" alt = "Rstudio" align = "left" width = "350" style = "margin-top: 3vh;margin-right: 2rem;">
`R` es un **lenguaje estadístico**, creado por y para la estadística, con 4 ventajas fundamentales:
* **Software libre** (como C++, Python, Fortran, y otros tantos lenguajes). El software libre no solo tiene una ventaja evidente (es gratis, ok) sino que permite **acceder libremente a código ajeno**.
* **Lenguaje modular**: en la instalación que hemos realizado no se han instalado todas las funcionalidades, solo el mínimo para poder funcionar, de forma que se ahorra espacio en disco y en memoria. Al ser software libre, existen trozos de **código hechos por otras personas llamados paquetes**, que podemos ir instalando a nuestro gusto según los vayamos necesitando.
--
* **Gran comunidad de usuarios**: `R` tiene una comunidad de usuarios gigante para hacer estadística (Python tiene una enorme comunidad pero más enfocada al Machine Learning), con más de 18 000 paquetes.
--
* **Lenguaje de alto nivel**. Los lenguajes de alto nivel, como `R` o `Python`, facilitan la programación al usuario, teniendo que preocuparte solo de la tarea de programar. Son lenguajes con una menor curva de aprendizaje aunque suelen ser más lentos en su ejecución en comparación con lenguajes de bajo nivel (`C`, `C++` o `Fortran`).
---
class: inverse center middle
COMPRAR un libro --> instalar un paquete (una sola vez) `install.packages()`
<figure>
<img src = "https://cdn.cienradios.com/wp-content/uploads/sites/14/2020/09/Book-Depository-2.jpg" alt = "comprar-libros" align = "middle" width = "480" style = "margin-top: 1vh;">
</figure>
SELECCIONAR un libro (ya comprado) --> acceder a un paquete ya instalado (en cada sesión que queramos usarlo) `library()`
<figure>
<img src = "https://cdn.sincroguia.tv/uploads/programs/l/a/-/la-biblioteca-de-los-libros-rechazados-704306_SPA-77.jpg" alt = "comprar-libros-2" align = "middle" width = "480" style = "margin-top: 1vh;">
</figure>
---
# Paquetes en R
Como hemos mencionado, existen trozos de **código hechos por otras personas llamados paquetes**, que podemos ir instalando a nuestro gusto según los vayamos necesitando.
A lo largo del curso usaremos varios de esos paquetes, pero el más importante para nuestro objetivo es el paquete `{ggplot2}`, un paquete para la **elaboración de visualizaciones de datos**. Vamos a instalarlo (necesitamos internet para ello) con la orden `install.packages("ggplot")`
```{r eval = FALSE}
install.packages("ggplot2")
```
La **instalación de un paquete** es el equivalente a comprar a un libro: solo lo debemos hacer **la primera vez** que lo usemos en un ordenador (descargándose los archivos del paquete a nuestro local). Una vez que tenemos comprado nuestro libro, para poder usarlo, simplemente debemos **indicar al programa que nos lo acerque de la estantería** con `library(ggplot2)`.
```{r eval = FALSE}
library(ggplot2)
```
---
class: center middle
# ¿Por qué no usar Excel?
![](./img/meme_barco.jpg)
---
class: inverse center middle
# ¿Por qué no usar Excel?
<img src = "https://upload.wikimedia.org/wikipedia/commons/9/92/Soup_Spoon.jpg" alt = "cuchara" align = "middle" width = "600" style = "margin-top: 3vh;">
Excel es una excelente cuchara: puedes ser el mejor partiendo un filete con una cuchara, pero seguirás siendo una persona comiendo filete con cuchara.
---
# ¿Por qué no usar Excel?
Excel es una **hoja de cálculo**, ni más ni menos, y el propio **Microsoft desaconseja el uso de Excel para el análisis de datos**. El Excel es una herramienta maravillosa para ser usada como una sencilla hoja de cálculo:
* Llevar las cuentas de tu familia.
* Una declaración de Renta sencilla.
* Planificar viajes
**NO ESTÁ DISEÑADO** para ser una base de datos, y muchos menos pensado para generar un entorno flexible para el análisis estadístico y la visualización de datos, con algunas desventajas:
* **Software de pago** (bien por el usuario, bien por la administración o empresa).
* **Software cerrado**: solo podemos hacer lo que Excel ha creído que interesante que podamos hacer. Incluso con la programación de macros, las funcionalidades de Excel siguen siendo mucho más limitadas
* **Alto consumo de memoria**.
* **No es universal**: no solo es de pago sino que además, dependiendo de la versión que tengas de Excel, tendrá un formato distinto para datos como fechas, teniendo incluso extensiones distintas.
---
# Epic fails en Excel
.pull-left[<img src = "https://dadosdelaplace.github.io/courses-ECI-2022/img/excel_genes.jpg" alt = "Rstudio" align = "left" width = "250">
<img src = "https://dadosdelaplace.github.io/courses-ECI-2022/img/excel_uk.jpg" alt = "Rstudio" align = "left" width = "250">
<img src = "https://dadosdelaplace.github.io/courses-ECI-2022/img/excel_edades.jpg" alt = "Rstudio" align = "left" width = "250">]
.pull-right[
## Problemas de **versiones**
## Problemas de **memoria**
## Problemas de **codificación**
]
---
# Incel vs excel
```{r echo = FALSE, out.width = '85%', fig.align = "center"}
knitr::include_graphics("./img/incel.jpg")
```
---
# Primeros pasos en R: calculadora
Empecemos por lo sencillo: **¿cómo usar R como una calculadora?** Si escribimos `2 + 1` en la consola y pulsamos ENTER, la consola nos mostrará el resultado de la suma.
```{r}
2 + 1
```
--
Si dicha suma la quisiéramos utilizar para un segundo cálculo: ¿y si la **almacenamos en alguna variable**? Por ejemplo, vamos a guardar la suma en una variable `x`
```{r}
x <- 2 + 1 #<<
```
--
Si te fijas ahora `x` aparece definida en nuestro **panel `environment`**, y puede ser usada de nuevo
```{r}
x + 3
```
<img src = "https://dadosdelaplace.github.io/courses-ECI-2022/img/environment_1.jpg" alt = "environment" align = "right" width = "450">
---
# Primeros pasos en R: calculadora
### Multiplicación
```{r eval = FALSE}
x * y
```
### Elevar al cuadrado
```{r eval = FALSE}
x^2
```
### Valor absoluto
```{r eval = FALSE}
abs(x)
```
--
## Errores
Durante tu aprendizaje va a ser **muy habitual que las cosas no salgan a la primera**, ni siquiera a la décima, apareciendo en consola mensajes en un color rojo. A **programar se aprende programando**, así que haz las pruebas que quieras: lo peor que puede pasar es que tengas que reiniciar `R`.
---
# Mensajes de «error»
* **Mensajes de ERROR**: irán precedidos de la frase **«Error in…»**, y serán aquellos **fallos que impidan la ejecución del código** (un error muy habitual es intentar acceder a funciones de algún paquete sin tenerlo instalado: estás intentando leerte un libro de tu biblioteca pero ni siquiera has ido a la tienda a «comprarlo»). Veamos un ejemplo intentando **sumar un número a un texto**.
```{r error = TRUE}
"a" + 1
```
* Mensajes **WARNING**: irán precedidos de la frase **«Warning in…»**, y son los fallos más delicados ya que son posibles incoherencias pero que no van a hacer que tu código deje de ejecutarse.
```{r warning = TRUE}
sqrt(-1)
```
**¿Ha ejecutado la orden?** Sí, pero te advierte de que el resultado de la operación es un NaN, **Not A Number**, un valor que no existe (al menos dentro de los números reales).
---
# ¿Dónde programamos? Script
Un **script** será el documento en el que programamos, nuestro equivalente a un archivo `.doc`, pero aquí será un archivo con extensión `.R`, donde escribiremos las órdenes.
Es **importante no abusar de la consola**: todo lo que no escribas en un script, cuando cierres `RStudio`, lo habrás perdido (cómo si en lugar de escribir en un Word y guardarlo, nunca guardases el documento).
Para **abrir nuestro primero script**, haz click en el menú superior en `File << New File << R Script`.
<img src = "https://dadosdelaplace.github.io/courses-ECI-2022/img/inicio_rstudio_5.jpg" alt = "environment" align = "right" width = "450">
---
# Ejecutar nuestros scripts
Ahora tenemos una **cuarta ventana**: la ventana donde **escribiremos nuestros códigos**
### **¿Cómo ejecutar nuestro script?**
<img src = "https://dadosdelaplace.github.io/courses-ECI-2022/img/inicio_rstudio_6.jpg" alt = "environment" align = "left" width = "500" style = "margin-top: 3vh;margin-right: 2rem;">
1. Escribimos el código que queremos ejecutar (en este caso, la suma de antes).
2. Guardamos el archivo `.R` haciendo click en el botón de guardar (`Save current document`)
3. El código **no se ejecuta salvo que se lo indiquemos**. Tenemos tres opciones:
- **Copiar y pegar en consola** el código.
- **Seleccionar las líneas de código** a ejecutar y clickar en `Run` (o con su atajo).
- Activar el cuadrado `Source on save` a la **derecha del botón de guardar**: no solo se nos guarda sino que se ejecuta el código completo.
---
# Primeros ejercicios: trasteando con la consola
.panelset[
.panel[.panel-name[Ejercicios]
* 📝 **Ejercicio 1**: el código inferior define una variable `a` al que le asigna el valor `2`. Añade debajo otra línea para definir una variable `b` con el valor `5`. Tras asignarles valores, multiplica los números en consola.
```{r}
a <- 2
```
* 📝 **Ejercicio 2**: modifica el código inferior para definir dos variables `c` y `d`, con valores 3 y -1.
```{r eval = FALSE}
c <- # deberías asignarle el valor 3
d <- # deberías asignarle el valor -1
```
* 📝 **Ejercicio 3**: con las variables `a` y `b` del ejercicio 1, crea una nueva variable `e` guardando el resultado de su multiplicación `a * b`. Escribe `e` en consola para ver su resultado
]
.panel[.panel-name[Solución ej. 1]
```{r}
# Para poner comentarios en el código se usa #
# Definición de variables
a <- 2
b <- 5
# Multiplicación
a * b
```
]
.panel[.panel-name[Solución ej. 2]
```{r}
# Definición de variables
c <- 3
d <- -1
```
]
.panel[.panel-name[Solución ej. 3]
```{r}
# Variables
a <- 2
b <- 5
# Resultado
e <- a * b
# Muestro en consola
e
```
Tienes todos los scripts en <https://github.com/dadosdelaplace/courses-ECI-2022/blob/main/scripts/> (el `script01.R` en concreto en <https://github.com/dadosdelaplace/courses-ECI-2022/blob/main/scripts/script01.R>
]
]
---
name: tipos-datos
class: center, middle
# Tipos de datos
## **De la celda a la tabla**
¿De qué tipo pueden ser los datos que tenemos contenidos en cada celda de una «tabla»?
---
# Datos: de la celda a la tabla
<img src = "https://raw.githubusercontent.com/dadosdelaplace/slides-ECI-2022/main/img/celdas.jpg" alt = "celdas" align = "center" width = "850" style = "margin-top: 1vh;">
* **Celda**: un **dato individual** de un tipo concreto.
* **Variable**: **concatenación de datos** del mismo tipo.
* **Matriz**: **concatenación de variables** del **mismo tipo** y longitud.
* **Tabla**: **concatenación de variables** de **distinto tipo** pero igual longitud.
---
# Celdas: tipos de datos individuales
**¿Existen variables más allá de los números?**
Piensa por ejemplo en los **datos guardados de una persona**:
* La edad o el peso será un **número**.
* Su nombre será una cadena de **texto**.
* Su fecha de nacimiento será precisamente eso, una **fecha**.
* A la pregunta «¿está usted soltero/a?» la respuesta será lo que llamamos una **variable binaria o lógica** (`TRUE` si está soltero/a o `FALSE` en otro caso).
<img src = "https://raw.githubusercontent.com/dadosdelaplace/slides-ECI-2022/main/img/celdas.jpg" alt = "celdas" align = "center" width = "600" style = "margin-top: 1vh;">
---
# Variables numéricas
El **dato más sencillo**, dato que ya hemos usado en nuestros primeros pasos como calculadora.
```{r eval = FALSE}
a <- 1
b <- 2
a + b
```
En el código anterior, tanto `a` como `b`, como la suma `a + b` **son de tipo numérico** (podemos comprobarlo con `class()`)
```{r}
# Clase de las variables
class(a) #<<
```
**Operaciones**: con los datos numéricos podemos realizar todas las **operaciones aritméticas** que se nos ocurriría hacer en una **calculadora**.
```{r}
b <- 5
b^3
```
---
# Variables de texto
No solo de números viven los datos: imagina que además de la edad de una persona queremos **guardar su nombre**.
```{r}
edad <- 32
nombre <- "Javier" #<<
```
La variable `nombre` es de **tipo caracter**: una **cadena de texto** (conocido en otros lenguajes como string o char) que va **SIEMPRE ENTRE comillas**.
```{r}
class(nombre) #<<
```
Las cadenas de texto son un **tipo especial de dato** con los que obviamente no podremos hacer operaciones aritméticas, pero si podemos hacer **otras operaciones** como pegar cadenas de texto o localizar patrones de letras dentro de ellas.
---
# Nuestra primera función: paste
Una **función** es un **trozo de código encapsulado bajo un nombre**, en función de unos **argumentos de entrada**. Nuestra primera función será `paste()`: dadas **dos cadenas de texto como argumento de entrada** nos permite pegarlas, indicándole en el **argumento** `sep = ` el caracter que queremos entre medias.
```{r}
# todo junto, sin espacios, igual a paste0("Javier", "Álvarez")
paste("Javier", "Álvarez", sep = "")
```
```{r}
paste("Javier", "Álvarez") # separados por un espacio
```
```{r}
paste("Javier", "Álvarez", sep = ".") # separados por un punto .
```
**Argumentos por defecto**: `paste(nombre, apellido)` es equivalente a `paste(nombre, apellido, sep = " ")`. El argumento `sep` tiene un **valor por defecto** `sep = " "`: si no se le asigna otro, tomará ese por defecto.
---
# Nuestro primer paquete: glue
Otra forma **más intuitiva de trabajar con textos** es usar el **paquete** `{glue}`.
```{r eval = FALSE}
install.packages("glue") # solo la primera vez
library(glue)
```
```{r echo = FALSE}
library(glue)
```
Recuerda que `install.packages()` es solo necesario la primera que «compramos el libro»: cada vez que queramos usarlo bastará con `library()`.
Con dicho paquete podemos **usar variables dentro de cadenas de texto**. Por ejemplo, vamos a crear «la edad es de ... años», donde la edad concreta la tenemos guardada en una variable `edad`.
```{r}
edad <- 32
glue("La edad es de {edad} años")
```
---
# Variables lógicas
Una **variable lógica, binaria o booleana** es aquella que **solo puede tomar dos valores** (en realidad pueden tomar un tercer valor, ausente):
* `TRUE`, **verdadero**, guardado internamente como un 1.
* `FALSE`, **falso**, guardado internamente como un 0.
```{r}
soltero <- TRUE # ¿Es soltero? --> SÍ
class(soltero)
```
**NO son variables de texto**: "TRUE" es un texto (como rojo o azul), `TRUE` es una valor lógico.
```{r error = TRUE}
TRUE + 1
"TRUE" + 1
```
---
# Condiciones lógicas
Los valores lógicos suelen ser **resultado de evaluar condiciones lógicas**. Por ejemplo, imaginemos que queremos comprobar si una persona está o no soltero, con el **operador lógico** `==` (¿lo de la izquierda es igual a lo de la derecha) y su opuesto `!=` (distinto de).
```{r}
soltero <- TRUE # persona soltera
soltero == TRUE # ¿está soltero?
soltero != TRUE # ¿no está soltero?
```
Es importante **distinguir** una asignación con `<-` (una variable pasará a tener almacenado dicho valor) a una **comparación lógica** con `==` (no estamos asignando nada, estamos preguntando si la parte de la izquierda es igual a la de la derecha).
---
# Condiciones lógicas
Por el mismo razonamiento podemos **comparar si una variable numérica** cumple una condición.
**¿Tiene la persona menos de 32 años?**
```{r}
edad <- 38 #<<
edad < 32 # ¿Es la edad menor de 32 años?
```
Además de las comparaciones «igual a» frente «distinto», también comparaciones de orden como `<, <=, > o >=`.
```{r}
edad <= 38
edad > 38
```
---
# Combinar condiciones lógicas
Las **condiciones lógicas pueden ser combinadas**, principalmente de dos maneras:
* **Intersección**: **todas** las condiciones concatenadas se deben cumplir (conjunción y, operador `&`) para devolver un `TRUE`.
* **Unión**: basta con que **una** de las condiciones concatenadas se cumpla (conjunción o, operador `|`) para devolver un `TRUE`.
Ejemplo: podríamos preguntarnos si la persona tiene menos de 32 años y está soltero (AMBAS deben cumplirse).
```{r}
edad < 32 & soltero
```
El resultado es `FALSE` ya que solo se cumple una de las condiciones. Si nos bastase con una («¿está soltero y/o tiene menos de 32 años?»), el valor devuelto sería `TRUE`
```{r}
edad < 32 | soltero
```
---
# Variables de tipo fecha
Las **variables de tipo fecha** son de un tipo muy especial: no son una simple cadena de texto "2021-04-21", representan un **instante temporal**.
```{r error = TRUE}
# Cadena de texto
fecha_char <- "2021-04-21"
fecha_char + 1
```
Para **convertirlo a una fecha** podemos usar la función `as.Date()`
```{r}
fecha_date <- as.Date("2021-04-21")
fecha_date
fecha_date + 1
```
Dado que internamente es un número, **podemos restar fechas** (días entre ambas), podemos sumar números a fechas (fecha días después), etc.
```{r}
as.Date("2021-04-21") - as.Date("2021-02-15")
```
---
# Funcionalidades de fechas
**¿Cómo obtener automáticamente la fecha de hoy?**
```{r}
Sys.Date()
```
**¿Cómo convertir una cadena de texto a fecha?** Basta usar la función `as.Date()`, pasándole como argumento la fecha y su formato .
```{r}
as.Date("10-03-2020", "%d-%m-%Y") # con día-mes-año (4 cifras)
as.Date("10-03-20", "%d-%m-%y") # con día-mes-año (2 cifras)
```
Dentro del **paquete `{lubridate}` tenemos bastantes **funciones útiles** para trabajar con fechas como las siguientes.
---
# Paquete lubridate: fechas
En `R` tenemos un paquete muy útil para el manejo de fechas, el paquete `{lubridate}`
```{r eval = FALSE}
install.packages("lubridate") # solo la primera vez
library(lubridate)
```
```{r echo = FALSE}
library(lubridate)
```
Con `today()` por ejemplo podemos obtener directamente la fecha actual.
```{r}
today()
```
Con `now()` puedes obtener la fecha y hora actual.
```{r}
now()
```
---
# Paquete lubridate: fechas
Con `year()`, `month()` o `day()` podemos extraer el año, mes y día de un dato en tipo fecha.
```{r}
fecha <- today()
year(fecha)
month(fecha)
day(fecha)
```
También tenemos funciones como `ymd()` o `my()` para **convertir texto o números** a datos de tipo **fecha**.
```{r}
ymd(20170131)
my("jan-2021")
```
---
# Paquete lubridate: fechas
```{r lubridate-cht, echo = FALSE, out.width = "97%", fig.align = "center", fig.cap = "Imagen extraída de https://lubridate.tidyverse.org/"}
knitr::include_graphics("https://raw.githubusercontent.com/rstudio/cheatsheets/main/pngs/thumbnails/lubridate-cheatsheet-thumbs.png")
```
---
# Paquete stringr
El **paquete `{stringr}`** permite un **manejo más complejo de cadenas de texto** (como el uso de **expresiones regulares**).
```{r stringr-cht, echo = FALSE, out.width = "87%", fig.align = "center", fig.cap = "Imagen extraída de https://stringr.tidyverse.org/"}
knitr::include_graphics("https://dadosdelaplace.github.io/courses-ECI-2022/img/stringr.png")
```
---
# Tips
Si haces click en la consola y pulsas la flecha «arriba» del teclado, te irá apareciendo todo el **historial de órdenes ejecutadas**. Es una manera de ahorrar tiempo para ejecutar órdenes similares a las ya ejecutadas. Si empiezas a escribir el nombre de una variable pero no te acuerdas exactamente de su nombre, pulsando tabulador te autocompletará solo.
Siempre que veas el símbolo `>` como última línea en la consola significa que está listo para que le escribamos otra orden.