<file_sep>---
title: "03-EJ-manipulacion"
output: html_document
---

En esta sección trabajaremos con el paquete dplyr para modificar datos. Usaremos los el dataset decisiones Perú.

Los cargamos en este bloque de código

```{r}
library(tidyverse)
decisiones <- read_csv("data/decisiones_asilo_peru.csv")
```


## Tu turno 1

Te dieron una tabla con datos de temperatura mínima y máxima para distintas estaciones meteorológicas de todo el país durante los 365 días de un año. Las columnas son: id_estacion, temperatura_maxima, temperatura_minima y provincia. En base a esos datos, te piden que computes la temperatura media anual de cada estación únicamente de las estaciones de Cusco.

¿En qué orden ejecutarías estos pasos para obtener el resultado deseado?

- usar `summarise()` para calcular la estadística mean(temperatura_media) para cada id_estacion
- usar `group_by()` para agrupar por la columna id_estacion
- usar `mutate()` para agregar una columna llamada temperatura_media que sea 
`(temperatura_minima + temperatura_maxima)/2`
- usar `filter()` para seleccionar solo las filas donde la columnas provincia es igual a "Cusco"


## Tu turno 2: verbos `select` y `filter`

1. Seleccionar solo las variables Anio, `Codigo Pais Origen`

2. Filtrar las entradas de los países Turquía y Argentina


```{r}
decisiones_2 <- select(decisiones, c(Anio, `Codigo Pais Origen`))
# la barra vertical es un "o"
decisiones_3 <- filter(decisiones, `Codigo Pais Origen` == "ARG" | `Codigo Pais Origen` == "TUR")
```

## Tu turno 3: verbo `mutate`

1. Generar una nueva columna que indique para cada fila si fueron rechazados mas pedidos que los aceptados

2. Generar una nueva columna que indique para cada fila si el tipo de procedimiento es UNHCR

3. Generar una nueva columna con la cantidad de pedidos rechazados o con proteccion complementaria

```{r}
decisiones_ind_1 <- mutate(decisiones, indicador = as.numeric(Rechazadas > Reconocidas))

decisiones_ind_2 <- mutate(decisiones, indicador = `Nombre del Procedimiento` == "UNHCR")

decisiones_ind_3 <- mutate(decisiones, indicador = Rechazadas + `Proteccion Complementaria`)
```


## Tu turno 4: verbos `dplyr`

1. Obtener una tabla con la cantidad de pedidos de asilo rechazados por Perú durante cada año

2. Ordena esta tabla de mayor a menor según la cantidad de pedidos rechazados

3. Que cantidad de pedidos fueron rechazados en total durante el período estudiado?


```{r}
decisiones_rechazados_peru <- decisiones %>%
  group_by(Anio) %>%
  summarise(total_anio_rech = sum(Rechazadas)) %>%
  arrange(desc(total_anio_rech))

total_rechazadas <- decisiones %>%
  summarise(total = sum(Rechazadas))

```
<file_sep>2 + 2

sqrt(2)

# creando variables
raiz_dos <- sqrt(2)
mi_primera_variable <- sqrt(2)

# los variables no se actualizan automaticamente como en Excel
x <- 2
y <- x + 2
x<-3
y <- x + 2

vector1 <- c(3, 5, 2)
vector1

vector2 <- 5:50
vector2

mi_media <- mean(vector2)


vector1 <- c(3, 5, 6.1, 7)
vector1[2]

vector1[4]
vector1[-4]

vector7 <- c(2, "hola")
vector7

lista1 <- list(2, "hola")

mi_agenda <- list(Carlos = c(tel = 41232342),
                  Maria = c(tel = 25362819, edad = 25))
mi_agenda$Carlos

library("readr")

install.packages("readr")

library("tidyverse")

?sum

Vector1 # error

# puedo especificar el paquete al que pertenece la funcion
stats::filter()

dplyr::filter()

filter()

# hola soy violeta

mes <- 1:30

library(readr)
decisiones_asilo_peru <- read_csv("data/decisiones_asilo_peru.csv")
View(decisiones_asilo_peru)

str(decisiones_asilo_peru)



<file_sep>---
title: "R Markdown"
output: html_document
---

Esto es un archivo RMarkdown. Contiene texto plano intercalado con bloques de código grises. Puedes usar este archivo para tomar notas y correr código. Por ejemplo, puedes escribir tu nombre en la línea de abajo (línea 7). Pruébalo:


```{r}
# Puedes escribir comentarios en los bloques de código.
# Dentro del código, "#" significa que empieza un comentario
# y lo que viene luego de "#" no se ejecuta. 
# Este bloque usa la función plot (que ya viene en R)
# y el dataset cars para hacer un gráfico.
# Para correr el código, haz click en el botón
# play verde, arriba a la derecha del bloque. Pruébalo
plot(cars)
```

Buen trabajo! Los resultados del código aparecen justo luego del bloque. Puedes presionar x sobre los resultados para cerrarlos.

# Agregar bloques

Para insertar un nuevo bloque, presiona el botón *Insert* en la parte superior de este documento hacia la derecha, luego selecciona *R*. R Markdown agregará un bloque vacío en donde se encuentre el cursor.

Prueba insertar un nuevo bloque a continuación:


Buen trabajo! Durante el taller ubicaremos todos los códigos R dentro de bloques de código.

```{r}
# A veces, querrás correr solo parte del código 
# de un bloque. Para eso, selecciona el código que quieras 
# correr y presiona Ctrl+Enter (o Command si Mac)
# Si no seleccionas ningún código, R correrá la parte del
# código en la que se encuentre el cursor. Pruébalo
# Corre mean(1:5) pero no la línea que se encuentra debajo.
mean(1:5)
warning("No debes correr esto!")
```

```{r}
# Puedes presionar la flecha apuntando hacia abajo para correr 
# todos los bloques anteriores a este. Es útil para cuando en 
# el bloque actual usas variables definidas en otros bloques.
# Sys.Date()
```

En el bloque anterior solo hay comentarios. Por eso, si lo corres nada pasará. 

Remueve el `#` de la ultima linea del bloque anterior y corre de nuevo el bloque. Puedes decir que hace la función `Sys.Date()`?

# Formateo de texto

Prueba un poco de formateo. Escribe a continuación una lista de ingredientes de tu postre favorito. Resalta con negritas los ingredientes más importantes.

# Reports

Cuando presionas el botón `knit` en la parte superior del archivo RMarkdown, R Markdown genera un output pulido de tu reporte. RStudio abrirá una copia del reporte por ti. Por ahora, solo trabajaremos con archivos HTML. Prueba presionar *Knit*!

Buen trabajo!

# Paquetes de R 

Descomenta (borra el `#` del principio del bloque) la línea de código del siguiente bloque. Presiona *Knit* nuevamente

```{r}
#ggplot(data = diamonds) + geom_point(aes(x = carat, y = price))
```

Obtenemos un error. Por que crees que se produce?<file_sep>---
title: "Manipulacion I"
date: "`r Sys.Date()`"
output:
  xaringan::moon_reader:
    css: ["default", "default-fonts", "custom.css"]
    mathjax: "https://cdn.bootcss.com/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_HTMLorMML"
    lib_dir: libs
    seal: false
    nature:
      ratio: 13:9
      highlightStyle: github
      highlightLines: true
      countIncrementalSlides: false
---

```{r setup, include=FALSE}
options(htmltools.dir.version = FALSE)
knitr::opts_chunk$set(fig.height=5) 
library(ggplot2)
library(readr)
library(here)
library(dplyr)
library(colorspace)
paleta <- rainbow_hcl(10)
print_it_rainbow <- function(palabra, paleta) {
  i_font = 1
  for (char in palabra) {
    if (char != " ") {
      cat(paste0("<font style='color:", paleta[i_font] , "'>",char,"</font>"))
      i_font = i_font %% length(paleta) + 1
    } else {
      cat(" ")
    }
  }
}
```

background-color: #272822

<br>
<br>
<br>
<br>
<br>
<br>


```{r, results='asis', echo=FALSE}
cat("<h1 style='color:white'> <center> R para contextos humanitarios de emergencia")
cat("</center></h1> \n")
cat("## <center>")
palabra = unlist(strsplit("Manipulación de datos I", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center> \n")
cat("### <center>")
fecha = as.character(Sys.Date())
palabra = unlist(strsplit("<NAME>", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center>")
```
---

background-color: #272822

<br>
<br>
<br>
<br>
<br>
<br>


```{r, results='asis', echo=FALSE}
cat("<h1 style='color:white'> <center> Abrir el archivo 03-EJ-manipulacion.Rmd")
cat("</center></h1> \n")
cat("## <center>")
palabra = unlist(strsplit("Para ir haciendo los EJ", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center> \n")
```

---
<div class="my-header"></div>
## Manipulación de datos

El paquete `dplyr` provee una enorme cantidad de funciones útiles para manipular datos

<center> <img src="img/hex-dplyr.png" alt="Hex stickers" height="100"></center>


Las funciones más comunes:

- `select()`: selecciona columnas de una tabla

- `filter()` y `slice()`: selecciona (o filtra) filas de una tabla

- `mutate()`: agrega nuevas columnas a una tabla

- `arrange()`: ordena las filas según los valores de una columna

- `group_by()`: agrupa una tabla en base al valor de una o más columnas

- `summarise()`: calcula estadísticas para cada grupo de una tabla.

---
<div class="my-header"></div>

## `dplyr` y tablas dinámicas

A rasgos generales, las operaciones de `dplyr` permiten hacer lo que se hace en tablas dinámicas (pivot tables) en Excel. 


.pull-left[
Funcion de `dplyr`
- `filter()` 
- `group_by()`
- `select()`
- `summarise()`
]

.pull-right[
Sección de tabla dinámica

- "Filtros"
- "Filas"
-  "Columnas"
- "Valores"
]

---
<div class="my-header"></div>
## Tu turno 1

Te dieron una tabla con datos de temperatura mínima y máxima para distintas estaciones meteorológicas de todo el país durante los 365 días de un año. Las columnas son: id_estacion, temperatura_maxima, temperatura_minima y provincia. En base a esos datos, te piden que computes la temperatura media anual de cada estación únicamente de las estaciones de Cusco.

¿En qué orden ejecutarías estos pasos para obtener el resultado deseado?

- usar `summarise()` para calcular la estadística mean(temperatura_media) para cada id_estacion
- usar `group_by()` para agrupar por la columna id_estacion
- usar `mutate()` para agregar una columna llamada temperatura_media que sea 
`(temperatura_minima + temperatura_maxima)/2`
- usar `filter()` para seleccionar solo las filas donde la columnas provincia es igual a "Cusco"

---
<div class="my-header"></div>
## Los datos

Retomamos el dataset sobre decisiones de Perú frente a los pedidos de asilo 

(es una traducción y simplificación del dataset de UNHCR sobre decisiones de Perú: [https://data.humdata.org/dataset/unhcr-population-data-for-per](https://data.humdata.org/dataset/unhcr-population-data-for-per))

```{r, message=FALSE}
decisiones <- read_csv("data/decisiones_asilo_peru.csv")
decisiones
```



---
<div class="my-header"></div>
## Seleccionando columnas: función `select()`

Si nos interesan menos columnas podemos usar `select()` así:

> `select(dataset, c(columna1, columna4))`

o por número de columnas `select(dataset, c(1, 4))`. También podemos excluir un conjunto de columnas:

> `select(dataset, -c(columna1, columna2))`

Supongamos que solo nos interesan: año, país de origen, decisión tomada(4)

Entonces redefinimos el dataset de la siguiente forma

```{r,}
decisiones <- select(decisiones, 
                     c(Anio, `Codigo Pais Origen`, Reconocidas, Rechazadas,
                       `Proteccion Complementaria`, `Cerradas de otra forma`))
decisiones
```
---
<div class="my-header"></div>
## Seleccionando filas: funcion `filter()`

Supongamos que solo nos interesan los pedidos provenientes de Venezuela

Podemos usar la función filter mas una condición lógica

> filter(dataset, condicion)

En este caso seria:

```{r}
decisiones_venezuela <- filter(decisiones, `Codigo Pais Origen`=="VEN")
decisiones_venezuela
```
---
<div class="my-header"></div>
## funcion `filter()`: condiciones

Las condiciones para `filter()` pueden expresarse en función de una columna del dataset o de un vector de longitud igual a la cantidad de filas del dataset.

Si quiero las decisiones tomadas después de 2010:

```{r}
decisiones_despues_2010 <- filter(decisiones, Anio > 2010)
```

Si quiero cualquier decisión menos las de los años 2010 y 2015: 

```{r}
decisiones_2010_2015 <- filter(decisiones, !(Anio %in% c(2010, 2015)))
```

Si quiero solo las entradas de donde se rechazaron más que las que se aceptaron: 

```{r}
decisiones_mas_rechazos <- filter(decisiones, Rechazadas > Reconocidas)
```

---
<div class="my-header"></div>
## Tu turno 2: verbos `select` y `filter`

1. Seleccionar solo las variables Anio, `Codigo Pais Origen `

2. Filtrar las entradas de los países Turquía y Argentina

---
<div class="my-header"></div>
## Creando nuevas variables: función `mutate()`

<center><img src="img/dplyr_mutate_es.png" alt="Hex stickers" height="450"></center>



---
<div class="my-header"></div>
## Creando nuevas variables: función `mutate()`

- Queremos agregar a `decisiones` una columna con el total de pedidos de asilo correspondientes a cada fila (mas allá de la decisión tomada). 

- Podemos definirla como la suma de las posibles decisiones

```{r}
decisiones <- mutate(decisiones,
                     total = Reconocidas + 
                       `Proteccion Complementaria` +
                       `Cerradas de otra forma` + 
                       Rechazadas)
#View(decisiones)
```

---
<div class="my-header"></div>
## Tu turno 3: verbo `mutate`

1. Generar una nueva columna que indique para cada fila si fueron rechazados mas pedidos que los aceptados

2. Generar una nueva columna que indique para cada fila si el tipo de procedimiento es UNHCR

3. Generar una nueva columna con la cantidad de pedidos rechazados o con proteccion complementaria

---
<div class="my-header"></div>
## Ordenando los datos según valores: función `arrange()`

Si quiero ordenar una tabla según los valores de una o más variables puedo

> `arrange(dataset, columna)`

Por ejemplo, si quiero saber cuales fueron los años y países con mas pedidos de asilo

```{r}
arrange(decisiones, desc(Reconocidas))
```

---
<div class="my-header"></div>
## Combinando funciones

Queremos: 

> Una tabla de las decisiones tomadas por Perú frente a pedidos de asilo, ordenada por la cantidad de total de pedidos por país cada año.

Podemos obtenerla así:

```{r}
decisiones_venezuela <- filter(decisiones, `Codigo Pais Origen` == "VEN")
decisiones_venezuela <- mutate(decisiones_venezuela,
                               total = Reconocidas + 
                                 `Proteccion Complementaria` + 
                                 `Cerradas de otra forma` + Rechazadas)
decisiones_venezuela <- arrange(decisiones_venezuela, desc(total))
```

Pero estamos repitiendo demasiadas veces la variable venezuela, existe una herramienta que nos ayuda a combinar funciones encadenadas:

<center>pipe (o tubo)</center>

---
<div class="my-header"></div>

## Combinando funciones

<img src="img/diagrama_pipe.png"  width="900">

---
<div class="my-header"></div>
## Combinando funciones con pipe

<center>
<img src="img/estoesunpipe.png" alt="Hex stickers" width="250">
</center>

Si reemplazamos los tubos por esto `%>%` obtenemos el resultado deseado

```{r}
decisiones %>%
  filter(`Codigo Pais Origen` == "VEN") %>%
  mutate(total = Reconocidas + `Proteccion Complementaria` + `Cerradas de otra forma` + Rechazadas) %>%
  arrange(desc(total))
  
```

---
<div class="my-header"></div>

**Encuesta:** [https://PollEv.com/multiple_choice_polls/pb0m4Fh9kGkLRYKSmIsCq/respond](https://PollEv.com/multiple_choice_polls/pb0m4Fh9kGkLRYKSmIsCq/respond)

Cómo modificarias `decisiones` para que contenga las decisiones correspondientes a 
pedidos de colombian@s ordenadas por cantidad de rechazos?

a)
```{r, eval=FALSE}
decisiones <- decisiones %>%
  filter(decisiones, `Codigo Pais Origen` == "COL") %>%
  arrange(decisiones, desc(Rechazadas))
```
b)
```{r, eval=FALSE}
decisiones <- decisiones %>%
  filter(`Codigo Pais Origen` == "COL") %>%
  arrange(desc(Rechazadas))
```
c)
```{r, eval=FALSE}
decisiones %>%
  filter(`Codigo Pais Origen` == "COL") %>%
  arrange(desc(Rechazadas))
```

---
<div class="my-header"></div>

## Resumir datos: `group_by` y `summarise` 

Para agrupar los datos usamos `group_by()`

Supongamos que queremos saber cuantos asilos aceptados en total corresponden a cada país de origen

.pull-left[
```{r, eval = FALSE}
decisiones 
```
.


![](img/tibblegroupby1.png)
]
.pull-right[
```{r, eval = FALSE}
decisiones %>%
  group_by(`Codigo Pais Origen`)
```

![](img/tibblegroupby2.png)
]

Los datos no se modifican, solo se agrega un indicador de que esta agrupado

---
<div class="my-header"></div>

## Resumir datos: `group_by` y `summarise` 

Una vez que están agrupados queremos elegir como resumirlo


```{r}
decisiones %>%
  group_by(`Codigo Pais Origen`) %>%
  summarise(total_aceptado = sum(Reconocidas))
```

---
<div class="my-header"></div>

## Resumir datos: `group_by` y `summarise` 

Cual es el TOP 3 de país de origen aceptado?

--

```{r}
decisiones %>%
  group_by(`Codigo Pais Origen`) %>%
  summarise(total_aceptado = sum(Reconocidas)) %>%
  arrange(desc(total_aceptado))
```

---
<div class="my-header"></div>

## `summarise` por separado

También `summarise` solo

```{r}
decisiones %>%
  summarise(total_aceptados = sum(Reconocidas))
```


---
<div class="my-header"></div>
## Tu turno 4: verbos `dplyr`

1. Obtener una tabla con la cantidad de pedidos de asilo rechazados por Perú durante cada año

2. Ordena esta tabla de mayor a menor según la cantidad de pedidos aceptados

3. Que cantidad de pedidos fueron rechazados en total durante el período estudiado?

4. Crea una nueva variable

---
<div class="my-header"></div>

## Resumen de esta sección:


- Seleccionamos variables con `select()`  
- Filtramos filas con `filter()`  
- Ordenamos tablas con `arrange()`  
- Hacemos tablas resumen con `summarise()`  
- Creamos nuevas variables con `mutate()`  
- Hacemos operaciones por grupos con `group_by()`

---
<div class="my-header"></div>

## Licencia y material usado

Licencia: [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/deed.es_ES).

Este material está inspirado y utiliza explicaciones de:

- [R para Clima](https://eliocamp.github.io/r-clima/) de Paola Corrales y Elio Campitelli

- [Master the Tidyverse](https://github.com/rstudio-education/master-the-tidyverse-instructors) de <NAME>
<file_sep>---
title: "Reportes Reproducibles en R"
author: "<NAME>"
date: "25/11/2019"
output: 
  ioslides_presentation:
    logo: assets/img/lama_gtrm.png
    css: test.css
    transition: slower
    widescreen: true
    smaller: true
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```

## ¿Qué podemos hacer con R? (I)

<br><br>

![](assets/img/Ejemplo2.png){width=103%}
**Fuente:** How to quickly produce statistical reports? The UNHCR "Cookbook" (2019). 

<br>

## ¿Qué podemos hacer con R? (II)

![](assets/img/Ejemplo1.png){ width=98% }

## ¿Qué es RMarkdown?

### 1) Estructura unificada que permite combinar:

- Código de R
- Resultados
- Comentarios (texto)
      
### 2) Los documentos R Markdown:

- Son completamente reproducibles, se pueden regenerar automáticamente al actualizar tanto códigos R o datos empleados.

- Se pueden convertir en en diferentes formatos como: HTML, PDF, documentos Word, aplicaciones web interactivas, entre otros.

<br>

## Empecemos con RMarkdown! 

### 1) File -> New File -> R Notebook

### 2) Guardar el archivo **.Rmd** en alguna carpeta o proyecto.

### 3) Seleccionar la opción **Knit** y se generará un archivo HTML.

<br>

## Título del documento

### Encabezado contiene algunos metadatos: 

- title: "Mi primer reporte en R"
- author: "<NAME>"
- date: "25/11/2019"
- output: html_document

<br>

## Texto

### Encabezados

- `#`, encabezado de nivel 1
- `##`, encabezado de nivel 2
- `###`, encabezado de nivel 3

### Listas

- Listas con viñetas, usar `*` o `-` .
- Listas enumeradas, usar los números seguidos de un punto `1.`, `2.`, ...

### Cursiva y Negrita

- Para cursiva, el texto va entre asteriscos.
- Para negrita, el texto va entre dos asteriscos.

<br>

## Códigos R (*chunks*)

#### Botón Insert -> R 

![](chunk.png) 

#### ¿Cómo controlamos un chunk?

 - `eval = FALSE`, no se evalúa el código.
 -  `include = FALSE`, evalúa el código pero no muestra los resultados.
 -  `echo = FALSE`, no muestra el código, pero sí los resultados obtenidos.
 - `message = FALSE`, evita mostrar mensajes en el documento.
 - `warning = FALSE`, evita mostrar warnings en el documento.

#### Podemos combinar código en R con texto, usar comillas simples!  

<br>

## Caso práctico

#### El flujo de personas con necesidades específicas ha aumentado drásticamente durante el mes de noviembre. Diariamente, **más de 2,000 personas esperan para poder realizar un ingreso regular a Perú**. Para responder a las necesidades de esta población, distintas organizaciones coordinan para brindar una **asistencia conjunta**. Para ello, están utilizando Kobo para hacer el registro de la asistencia entregada. Usted debe elaborar **varios reportes diarios** para informar sobre la respuesta a la emergencia. 

<br/><br/>

#### Puede entrar al link de kobo [**aquí**.](https://enketo.unhcr.org/x/#4kXNmJjb)

<br>

## ¿Cómo conectar Kobo con R? (I)

Instalamos paquetes y funciones necesarias:
```{r echo = T, results = "hide", warning=FALSE, message=FALSE}
#Si es necesario, deberán instalar los paquetes
library(devtools)
library(httr)
library(jsonlite)
library(readr)
library(dplyr)
source_url("https://raw.githubusercontent.com/ppsapkota/kobohr_apitoolbox/master/R/r_func_ps_kobo_utils.R")
```

Credenciales de la cuenta:
```{r echo = T, results = "hide", warning=FALSE, message=FALSE}
kobo_user <- "ejemplor"
kobo_pw <- "<PASSWORD>!"
```

<br>

## ¿Cómo conectar Kobo con R? (II)

Identificamos el formulario que queremos cargar:
```{r echo = T, results = "hide", warning=FALSE, message=FALSE}
url <-"https://kobocat.unhcr.org/api/v1/data.csv"
d_formlist_csv <- kobohr_getforms_csv (url,kobo_user, kobo_pw)
d_formlist_csv <- as.data.frame(d_formlist_csv)
d_formlist_csv #ver
```

Cargamos el formulario! 
```{r echo = T, results = "hide", warning=FALSE, message=FALSE}
url<- "https://kobocat.unhcr.org/api/v1/data/19694.csv"
data <- kobohr_getdata_csv(url,kobo_user,kobo_pw) 

head(data) #resultado
```

<br>

## ¿Cómo podemos realizar consultas en R? 

- Número de personas atendidas

```{r echo = T, results = "hide", warning=FALSE, message=FALSE}
nrow(data)
```

- Total de asistencia otorgada

```{r echo = T, results = "hide", warning=FALSE, message=FALSE}
sum(data$cantidad)
```

- Número de organizaciones humanitarias brindando asistencia:

```{r echo = T, results = "hide", warning=FALSE, message=FALSE}
length(unique(data$org))
```

<br>


## ¿Cómo podemos crear una tabla? 

Primero debemos organizar la información que queremos mostrar!

```{r echo = T, results = "hide", warning=FALSE, message=FALSE}
#creamos la tabla
tabla1 <- data %>% 
  group_by(distribucion) %>% 
  summarise(Total = sum(cantidad)) %>%
  mutate(Freq = Total / sum(Total))

#ordenamos la tabla de mayor a menor
tabla1 = tabla1[order(-tabla1$Total),]
tabla1
```

Usamos kable para visualizar nuestra información: 

```{r echo = T, results = "hide", warning=FALSE, message=FALSE}
knitr::kable(tabla1)
```

<br>


## ¿Qué hemos aprendido?

<br>

### - Conectar Kobo con R. 

### - Escribir un reporte con el paquete R Markdown :D.

### - Generar diferentes formatos de reportes reproducibles.

### - Entender la importancia de la **reproducibilidad** en el contexto humanitario!

<br>

## Recursos adicionales!

### - [**Sitio oficial de R Markdown**](https://rmarkdown.rstudio.com)

### - [**R Markdown: The Definitive Guide**](https://bookdown.org/yihui/rmarkdown/) 

### - [**R Markdown Cheatsheet**](https://www.rstudio.com/resources/cheatsheets/)

### - [**R Markdown Reference Guide**](https://www.rstudio.com/wp-content/uploads/2015/03/rmarkdown-reference.pdf)

<br>



<br>

#

<br><br>
<br><br>
<br><br>
<br><br>

<center> <h2> Muchas gracias! </h2> </center> 


<br><file_sep>---
title: "Proyectos y RMarkdown"
date: "`r Sys.Date()`"
output:
  xaringan::moon_reader:
    css: ["default", "default-fonts", "custom.css"]
    mathjax: "https://cdn.bootcss.com/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_HTMLorMML"
    lib_dir: libs
    seal: false
    nature:
      ratio: 13:9
      highlightStyle: github
      highlightLines: true
      countIncrementalSlides: false
---

```{r setup, include=FALSE}
options(htmltools.dir.version = FALSE)
knitr::opts_chunk$set(fig.height=5) 
library(ggplot2)
library(readr)
library(here)
library(dplyr)
library(colorspace)
paleta <- rainbow_hcl(10)
print_it_rainbow <- function(palabra, paleta) {
  i_font = 1
  for (char in palabra) {
    if (char != " ") {
      cat(paste0("<font style='color:", paleta[i_font] , "'>",char,"</font>"))
      i_font = i_font %% length(paleta) + 1
    } else {
      cat(" ")
    }
  }
}
```

background-color: #272822

<br>
<br>
<br>
<br>
<br>
<br>


```{r, results='asis', echo=FALSE}
cat("<h1 style='color:white'> <center> R para contextos humanitarios de emergencia")
cat("</center></h1> \n")
cat("## <center>")
palabra = unlist(strsplit("Proyectos y RMarkdown", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center> \n")
cat("### <center>")
fecha = as.character(Sys.Date())
palabra = unlist(strsplit("<NAME>", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center>")
```

---
background-color: #272822

<br>
<br>
<br>
<br>
<br>
<br>


```{r, results='asis', echo=FALSE}
cat("# <center>")
palabra = unlist(strsplit("Proyectos", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center>")
```

---
<div class="my-header"></div>
## Directorio de trabajo

R va a buscar en el "directorio de trabajo" por defecto cualquier archivo que le pidas leer (y va a guardarlo ahí también)

Puedes averiguar cual es:

```{r}
getwd()
```

Puedes cambiarlo también: 

```{r, eval=FALSE}
setwd("C\\Users\\violeta\\mi_carpeta_favorita")
```

Pero existe una herramienta para no tener que lidiar con esto:

<center>`r emo::ji("star")`PROYECTOS`r emo::ji("star")`</center>


---

<div class="my-header"></div>
## Siempre vamos a trabajar en proyectos
Qué es?
- Carpeta que contiene TODOS los archivos relacionados a un proyecto
  - .R (codigo en R)
  - Imagenes (.png, .pdf, etc)
  - Datos (.csv, .xls, etc)

Por qué es ventajoso trabajar en ellos?
- Es más ordenado

- Ayuda a trabajar con *paths* relativos y no absolutos

- Si quiero abrir un dato dentro de mi proyecto

> "mi_dato.csv" 

en lugar de 

> "C\\Users\\violeta\\mi_carpeta_favorita\\mi_dato.csv"

---

<div class="my-header"></div>
## Tu turno: Crea un nuevo proyecto en RStudio

1. Haz click en el menú “Archivo” (`File`) y luego en “Nuevo Proyecto” (`New Project`)

2. Haz click en “Nueva Carpeta” (`New Directory`)

3. Haz click en “Nuevo Proyecto” (`New Project`)

4. Escribe el nombre de la carpeta que alojará a tu proyecto, por ejemplo “mi_proyecto”

5. Haz click en “Crear Proyecto” (`Create Project`)

---

<div class="my-header"></div>
## Tu turno: Abre tu nuevo proyecto desde el explorador de archivos

1. Cierra RStudio

2. Desde el explorador de archivos, busca la carpeta donde creaste tu proyecto.

3. Haz doble click en el archivo que tiene el nombre de tu proyecto (y que termina con .Rproj) que encontrarás en esa carpeta.

---

<div class="my-header"></div>
## Estructura de un proyecto

- Carpeta que contiene TODOS los archivos relacionados a un proyecto

- Ordenado con sub-carpetas

- Subcarpetas que deberían estar si o si (hay que agregarlas)
  - datos (o data)
  - img

- En general hay una subcarpeta R para contener el código

- mi_proyecto/
  - datos/
      - dataset1.csv
      - dataset2.xls
  - img/
      - foto1.jpg
      - diagrama1.png
  - R/
      - limpiar_datos.R


---
<div class="my-header"></div>
## Manejo de un proyecto

Puedes crear nuevas carpetas para organizar tu proyecto en el explorador de carpetas o en la pestaña `Files` de la alacena de RStudio (abajo a la derecha)

Para guardar un archivo de código, haz como normalmente en Windows 

> File->Save/Save as->Elegir normbre si corresponde + Guardar/Save

**Tu turno:**

1. Crea una carpeta llamada R dentro del proyecto creado

1. Crea un archivo con un vector con los numeros del 1 al 30

2. Guarda el vector en una variable llamada `mes`

3. Guarda el codigo con el nombre "mes.R"

---
background-color: #272822

<br>
<br>
<br>
<br>
<br>
<br>


```{r, results='asis', echo=FALSE}
cat("# <center>")
palabra = unlist(strsplit("RMarkdown", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center>")
```
---
<div class="my-header"></div>
## RMarkdown: combinar todo junto

![](img/allisonrmarkdown.png)
<p style="color: gray; font-size:15px"> Ilustración adaptada de Allison Horst
</p>

---
<div class="my-header"></div>
## Una notebook RMarkdown

![](img/rmarkdownintro.png)
<p style="color: gray; font-size:15px"> Imagen adaptada del curso "Master the tidyverse" - <NAME> <br>
github.com/rstudio-education/master-the-tidyverse-instructors
</p>

---
<div class="my-header"></div>
## Tu turno: Crea una notebook RMarkdown

1. File > New File > RMarkdown...

2. Elegir un nombre del archivo 

3. Elegir formato deseado

4. Guardar

Se genera una plantilla con un ejemplo, extensión del archivo es ".Rmd"

Para generar el output hay que apretar el botón Knit

<center><img src="img/knit.png" height="250"></center>

---
<div class="my-header"></div>
## Estructura de un .Rmd

Cualquier archivo de este tipo tiene 3 partes principales:

- El **encabezado** o **yaml** que determina generalidades como formato de salida, etc.

- El **texto** que puede estar a lo largo de todo el documento 

- El **código en bloques** o **chuncks**

<center><img src="img/elementosRM2.png" alt="Hex stickers" height="325"></center>

---
<div class="my-header"></div>
## Markdown

Cuando escribimos el texto de nuestro archivo, podemos agregar cierta sintaxis para que el texto generado no se vea solo como un block de notas

- **negrita** usando dos asteriscos así: `**negrita**`  
- *italizada* con un asterisco de cada lado: `*italics*`

lista de elementos utilizando guiones medios

``` r
- la negrita se consigue con dos asteriscos
- la italizada con un asterisco
- y para resaltar código se usa el acento grave `
```

---
<div class="my-header"></div>
## Markdown

También:

- Títulos con distinta jerarquía agregando `#` al comienzo. Esto además define secciones dentro del documento:

```
# Título
## El primer subtítulo
### Sub con menos jerarquia, etc.
```

- Link a una página externa: "[text to show]""(http://the-web-page.com)" 

- Incluir una imagen: "!(http://url/for/file)"

---
<div class="my-header"></div>
## Posibles resultados finales de RMarkdown

- Word
- HTML
- PDF (se necesita instalar `tinytex::install_tinytex()`, no probar ahora! tarda mucho tiempo)

<center>
<img src="img/outputRMhtml.png" alt="Hex stickers" width="300">
<img src="img/outputRMword.png" alt="Hex stickers" width="300">
</center>

<center><img src="img/outputpdf.png" alt="Hex stickers" width="300"></center>

---

background-color: #272822

<br>
<br>
<br>
<br>
<br>
<br>


```{r, results='asis', echo=FALSE}
cat("# <center>")
palabra = unlist(strsplit("Ahora es tu turno!", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center> \n")
cat("## <center>")
palabra = unlist(strsplit("Abre el archivo 01-EJ-RMarkdown.Rmd", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center> \n")
cat("### <center>")
fecha = as.character(Sys.Date())
palabra = unlist(strsplit("Sigue las instrucciones", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center>")
```


---
<div class="my-header"></div>

## Licencia y material usado

Licencia: [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/deed.es_ES).

Este material está inspirado y utiliza explicaciones de:

- [R para Clima](https://eliocamp.github.io/r-clima/) de Paola Corrales y Elio Campitelli

- [Master the Tidyverse](https://github.com/rstudio-education/master-the-tidyverse-instructors) de <NAME><file_sep>---
title: "Tratar y procesar datos 5W"
author: "Equipo IM GTRM"
date: "27/11/2020"
output: 
  ioslides_presentation:
    logo: assets/img/lama_gtrm.png
    css: test.css
    transition: slower
    widescreen: true
    smaller: true
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

## PUNTOS

* **Contexto**

<br>

* **Flujo de datos**

<br>

* **Importar y validar los datos**

<br>

* **Cálculos de totales sectoriales/intersectoriales**

<br>

* **Próximos pasos**


## 1. Contexto

El GTRM Perú se encarga de la **preparación y monitoreo del Plan de Respuesta para Refugiados y Migrantes** (RMRP) de Venezuela.

<br>

En este contexto, el equipo de IM del GTRM organiza:

- Un **Análisis Conjunto de Necesidades**;
- La definición de **prioridades y objetivos operacionales**;
- La preparación de un **Marco de Monitoreo** para estos objetivos;
- El **monitoreo** de la respuesta bajo este marco.

<br>

Las rondas mensuales de 5W representan este último paso. De una perspectiva de coordinación, es esencial poder monitorear y visibilizar la respuesta en curso.


## 2. Flujo de datos

El flujo de datos para la 5W es el siguiente:

* Los **socios del GTRM** reportan sus actividades de forma mensual a través de una matriz en línea.

 ![](assets/img/5W_Form.jpg){ width=30% }

<br>

* El **equipo de manejo de información**:
  + **Descarga** la matriz;
  + **Limpia y valida** los datos;
  + **Agrega** la información para obtener totales sectoriales e intersectoriales;
  + **Comparte** la información a través de dashboards y otros productos.

## 3. Importar y validar los datos


Se importan los datos y se hace una primera ronda de limpieza:
 
```{r eval=FALSE}

library(readxl)
library(plyr)
library(tidyverse)
library(openxlsx)

LIMA <- read_excel(path=DATA_path, sheet="Lima", skip = 2)
LIMA$Departamento <- "Lima"
LIMA[,14:28] <- lapply(LIMA[,14:28], as.numeric)
LIMA$Organización <- trimws(LIMA$Organización)
...
DATA_ALL <- bind_rows(LIMA, TUMBES, TACNA, OTROS_DEP) 
DATA_ALL <- DATA_ALL %>% 
  filter(!is.na(Organización))
rm(LIMA, TUMBES, TACNA, OTROS_DEP)
```
 
## 3. Importar y validar los datos (2)

R también puede identificar errores en los datos enviados:

```{r eval=FALSE}
# El total de rangos de sexo/edad corresponde al total reportado?
DATA_ALL_CHECK <- DATA_ALL
DATA_ALL_CHECK$CA_SUM <- rowSums(DATA_ALL_CHECK[,14:17]) 
DATA_ALL_CHECK$CA_SUM_CHECK[DATA_ALL_CHECK$CA_SUM != DATA_ALL_CHECK$`TOTAL CA`] <- "ERROR" 

# Se reportó información hasta el nivel Admin2?
DATA_ALL_CHECK$PROVINCE_REPORTED[DATA_ALL_CHECK$Provincia == ""] <- "ERROR" 

# La lógica de Admin1/Admin2 es correcta?
DATA_ALL <- left_join(DATA_ALL, ADMIN2, by="Provincia")
DATA_ALL_CHECK$PROVINCE_CORRECT[DATA_ALL_CHECK$Departamento != DATA_ALL_CHECK$ADM1_ES.y] <- "ERROR" 

# Exportar el log de errores para hacer seguimiento
error_log <- list("ERRORS" = DATA_ALL_CHECK)
write.xlsx(DATA_ALL_CHECK, file="ERROR_log.xlsx")

```

*Nota: Estos pasos se pueden evitar utilizando una plataforma con reglas de validación predefinidas.*

El script exporta un archivo Excel con todos los errores identificados. A través de este registro, es posible hacer un seguimiento sistemático con cada organización.


## 4. Calcular total de beneficiarios

Desde el marco de monitoreo, se puede hacer una distinción entre los beneficiarios reportados:

* **Totales que se pueden calcular** para el total sectorial:
  + Los beneficiarios se pueden sumar entre socios (no hay duplicación);
  + Los beneficiarios no se pueden sumar entre socios (riesgo de duplicación): Se toma el MAX;
* **Totales que no se puede calcular** para el total sectorial (por ejemplo, beneficiarios indirectos):
  + No se considera la cifras de beneficiarios para el total.

```{r eval=FALSE}

DepartmentActTotal = function(df) { 
  df1 = filter(df, `Rule_BNF` == "SUM") #### Si se cuentan y se puede sumar
  df2 = ddply(df1[c(4, 7, 10, 15:29)], .(Departamento, Sector, Actividad), numcolwise(sum, na.rm=T))
  df3 <- filter(df, `Rule_BNF` == "MAX") #### Si se cuentan y NO se puede sumar
  df4 = ddply(df3[c(4, 7, 10, 15:29)], .(Departamento, Sector, Actividad), numcolwise(max, na.rm=T))
  df5 <- filter(df, `Rule_BNF` == "N/A")#### Si NO se cuentan
  df5[c(15:29)] <- 0
  df6 = ddply(df5[c(4, 7, 10, 15:29)], .(Departamento, Sector, Actividad), numcolwise(sum, na.rm=T))
  df7 = rbind(df2, df4, df6)) #### Juntando todos
  return(df7)
} 
DATA_ACT_Departamentos <- DepartmentActTotal(DATA_ALL)

```


## 4. Calcular total de beneficiarios (2)

El total de beneficiarios a nivel intersectorial se produce desde:

* Cálculo de totales sectoriales en una área geográfica;
* Selección del valor máximo entre los sectores para esta área **= total intersectorial local**
* Suma de los valores máximos entre todas las áreas geográficas **= total intersectorial nacional**

```{r eval=FALSE}
IntersectorTotal = function(df) {
  df1 = ddply(df[c(1, 6:20)], .(Departamento), numcolwise(max, na.rm=T))
  df2b = mutate(df2, `Pais` = "Nacional")
  df3 = ddply(df[c(18, 3:17)], .(Pais), numcolwise(sum, na.rm=T))
  return(df3)
} 
TOTAL_Intersector <- DepartmentTotal(Total_Sector_Departamentos) # Intersector by department (all)


```



## 4. Calcular total de beneficiarios (3)

<br>

El total de beneficiarios se prepara para las siguientes categorías:

* Total geográfico (Admin1, Admin2, Admin3);
* Total sectorial;
* Total para actividades bajo el RMRP;
* Total para actividades relacionadas al COVID

Y otras. Y combinaciones de estas categorías.

<br>

En total, se exportan casi 30 diferentes matrices desde los datos de la 5W, sin incluir los formatos regionales y otros cálculos para totales acumulados.

## 5. Los próximos pasos

<br>

El trabajo con R al momento se enfoca únicamente sobre la **transformación y agregación de datos**.

En futuro, el equipo quiere incorporar R para los siguientes pasos:

* **Descarga** de datos desde plataforma en línea
* **Visualización** de información a través de reportes y otros productos
* **Upload de datos** en plataformas en línea
* **Compartir** el código en línea


El objetivo es asegurar un control de **todo el flujo de datos** de monitoreo de forma sistemática, automatizada y transparente con todos los socios del GTRM.

<file_sep>---
title: "Visualización"
date: "`r Sys.Date()`"
output:
  xaringan::moon_reader:
    css: ["default", "default-fonts", "custom.css"]
    mathjax: "https://cdn.bootcss.com/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_HTMLorMML"
    lib_dir: libs
    seal: false
    nature:
      ratio: 13:9
      highlightStyle: github
      highlightLines: true
      countIncrementalSlides: false
---

```{r setup, include=FALSE}
options(htmltools.dir.version = FALSE)
knitr::opts_chunk$set(fig.height=5) 
library(ggplot2)
library(readr)
library(here)
library(dplyr)
library(colorspace)
paleta <- rainbow_hcl(10)
print_it_rainbow <- function(palabra, paleta) {
  i_font = 1
  for (char in palabra) {
    if (char != " ") {
      cat(paste0("<font style='color:", paleta[i_font] , "'>",char,"</font>"))
      i_font = i_font %% length(paleta) + 1
    } else {
      cat(" ")
    }
  }
}
```

background-color: #272822

<br>
<br>
<br>
<br>
<br>
<br>


```{r, results='asis', echo=FALSE}
cat("<h1 style='color:white'> <center> R para contextos humanitarios de emergencia")
cat("</center></h1> \n")
cat("## <center>")
palabra = unlist(strsplit("Visualización de datos I", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center> \n")
cat("### <center>")
fecha = as.character(Sys.Date())
palabra = unlist(strsplit("<NAME>", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center>")
```
---

background-color: #272822

<br>
<br>
<br>
<br>
<br>
<br>


```{r, results='asis', echo=FALSE}
cat("<h1 style='color:white'> <center> Abrir el archivo 04-EJ-visualizacion.Rmd")
cat("</center></h1> \n")
cat("## <center>")
palabra = unlist(strsplit("Para ir haciendo los EJ", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center> \n")
```


---

<div class="my-header"></div>
## Visualización de datos


<center><img src="img/ggplot2_obra_maestra.png"  width="750"></center>

---
<div class="my-header"></div>
## Ejemplos:

```{r, echo=FALSE, fig.height=6, fig.width=9, fig.retina=3}
plot(1:20, 2 + 1.5 * 1:20 + rnorm(20)) 
```
---
<div class="my-header"></div>
## Ejemplos:

```{r, echo = FALSE, fig.height=6, fig.width=9, fig.retina=6}
ggplot(data = NULL, aes(1:20, 2 + 1.5 * 1:20 + rnorm(20))) +
  geom_point() +
  labs(x = "x", y = "y", title = "Mi gráfico", subtitle = "Es muy lindo") +
  theme(plot.title.position = "plot", title = element_text(size = 20))
```

---
<div class="my-header"></div>
## Ejemplos:

<center><img src="img/mapa1_ejemplo.png"  height="530"></center>

---
<div class="my-header"></div>
## Ejemplos:

<center><img src="img/ggplot2-carbonprint.png"  height="530"></center>

---
<div class="my-header"></div>
## Los datos: campamentos en Haití 

Ahora vamos a trabajar un poco con el dataset de los campamentos de Haití

```{r include=FALSE}
library(readxl)
url_haiti <- "https://data.humdata.org/dataset/27baf423-2d13-49a4-bd72-cb65d8f924da/resource/9f71ab56-8a9a-4df2-be5d-f26d3600a285/download/dtm-haiti-site-assessment-round-33.xlsx"
destfile <- "dtm_haiti_site_assessment_round_33.xlsx"
curl::curl_download(url_haiti, destfile)
haiti <- read_excel(destfile, 
    col_types = c("text", "text", "text", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "text", "text", "text", "text", "text", 
        "text", "text", "text", "text"))
haiti <- slice(haiti, -1)
```

```{r}
str(haiti)
```


---
<div class="my-header"></div>
## Los datos: campamentos en Haití

Variables:

- Comuna
- Nombre del campamento
- Latitud 
- Longitud
- Cantidad de Viviendas
- Cantidad de Individuos
- Provisión de Agua
- Presencia de Sanitarios
- etc.

Que relación pensamos que debería haber entre Cantidad de Viviendas y Cantidad de Individuos?

---
<div class="my-header"></div>
## Tu turno 1: Mi primer gráfico


Corre este código en la notebook para generar el gráfico que queremos


```{r, eval = FALSE}
ggplot(data = haiti) +
  geom_point(mapping = aes(x = Households, y = Individuals))
```

---
<div class="my-header"></div>
## Código `ggplot2`

![](img/templateggplot21.png)

**Plantilla para cualquier gráfico:**

![](img/templateggplot22.png)

---
<div class="my-header"></div>
##  Algunas propiedades estéticas posibles

- Ejes (x, y,...)
- color (color de borde o de cosas sin relleno como punto o línea)
- fill (color de relleno)
- shape (por ejemplo para dispersión, círculo, triángulo, equis)
- size (tamaño)
- alpha (transparencia)

## Según el tipo de variable y de gráfico

- numérica continua
- categórica
- texto

---
<div class="my-header"></div>

##  Color

Supongamos que queremos distinguir además cuales de estos campamentos tienen Provisión de Agua

.pull-left[
<center><b>Espacio Visual</b></center>
<center>Color</center>

<br>



<center>
<p style="color:#F8766D">
rojo
</p>
</center>

<center>
<p style="color:#00BFC4">
azul</p>
</center>

]

.pull-right[
<center><b>Espacio de los datos</b></center>
<center>Provision de Agua</center>

<br>

<center>
<p>No</p>
</center>

<center>
<p>Yes</p>
</center>


]

---
<div class="my-header"></div>

##  Mapear provisión de agua

```{r,}
ggplot(data = haiti) +
  geom_point(mapping = aes(x = Households, 
                           y = Individuals,
                           color = `Water Provision`))
```

La leyenda se agrega automáticamente

---
<div class="my-header"></div>

##  Mapear provisión de agua

```{r,}
ggplot(data = haiti) +
  geom_point(mapping = aes(x = Households, 
                           y = Individuals,
                           shape = `Water Provision`))
```

La leyenda se agrega automáticamente

---
<div class="my-header"></div>

##  Mapear provisión de agua

```{r,}
ggplot(data = haiti) +
  geom_point(mapping = aes(x = Households, 
                           y = Individuals,
                           size = `Water Provision`))
```

La leyenda se agrega automáticamente

---
<div class="my-header"></div>

## Cómo hacer este gráfico?

```{r, echo = FALSE}
ggplot(data = haiti) +
  geom_point(mapping = aes(x = Households, 
                           y = Individuals),
             color = "blue")
```

---
<div class="my-header"></div>

**Encuesta:** [https://PollEv.com/multiple_choice_polls/jr8bO8kgHIN3gXi4WBsSO/respond](https://PollEv.com/multiple_choice_polls/jr8bO8kgHIN3gXi4WBsSO/respond)

a)
```{r, eval = FALSE}
ggplot(data = haiti) +
  geom_point(mapping = aes(x = Households, y = Individuals),
             color = "blue")
```

b)
```{r, eval = FALSE}
ggplot(data = haiti) +
  geom_point(mapping = aes(x = Households, y = Individuals),
             color = "red")
```

c)
```{r, eval = FALSE}
ggplot(data = haiti) +
  geom_point(mapping = aes(x = Households, y = Individuals, color = "blue")
```

d)
```{r, eval = FALSE}
ggplot(data = haiti) +
  geom_point(mapping = aes(x = Households, y = Individuals, color = "red"))
```



---
<div class="my-header"></div>

## Como hacer este gráfico?

```{r, }
ggplot(data = haiti) + 
  geom_point(mapping = aes(x = Households, 
                           y = Individuals, 
                           color = "blue"))
```

---
<div class="my-header"></div>

## Como hacer este gráfico?

Si quiero indicar una característica estética NO linkeada a variable, entonces lo indico AFUERA del aes()

```{r, }
ggplot(data = haiti) + 
  geom_point(mapping = aes(x = Households, 
                           y = Individuals), 
             color = "blue")
```

---
<div class="my-header"></div>

## Que tienen de distinto estos dos gráficos?

.pull-left[
```{r, echo=FALSE}
ggplot(data = haiti) + 
  geom_point(mapping = aes(x = Households, 
                           y = Individuals))
```

]

.pull-right[
```{r,echo=FALSE, message=FALSE }
ggplot(data = haiti) + 
  geom_smooth(mapping = aes(x = Households, 
                           y = Individuals))
```

]

---
<div class="my-header"></div>

## Que tienen de distinto estos dos gráficos?

.pull-left[
```{r, echo=FALSE}
ggplot(data = haiti) + 
  geom_point(mapping = aes(x = Households, 
                           y = Individuals))
```

]

.pull-right[
```{r,echo=FALSE, message=FALSE }
ggplot(data = haiti) + 
  geom_smooth(mapping = aes(x = Households, 
                           y = Individuals))
```

]

Mismos datos, mismo mapeo de aesthetics pero distinto geom

`geom_point` y `geom_smooth`

---
<div class="my-header"></div>

# Tu turno 2

Reproducir este histograma de la variable Households con la ayuda de la guía rápida de `ggplot2`. Usa `geom_histogram`

Ayuda: no utilizar la variable `y`

```{r,echo=FALSE}
ggplot(data = haiti) + 
  geom_histogram(mapping = aes(Individuals))
```

---
<div class="my-header"></div>

# Tu turno 3

Reproducir este gráfico de barras que grafica la cantidad de campamentos en cada comuna. Utiliza la ayuda de la guía rápida de `ggplot2`. Usa `geom_bar`

Ayuda: no utilizar la variable `y`

```{r,echo=FALSE}
ggplot(data = haiti) + 
  geom_bar(mapping = aes(x = Commune, fill = Commune))
```

---
<div class="my-header"></div>

## Gráficos de barras 


```{r}
ggplot(data = haiti) + 
  geom_bar(mapping = aes(x = Commune, color = Commune))
```

---
<div class="my-header"></div>

## Gráficos de barras


```{r}
ggplot(data = haiti) + 
  geom_bar(mapping = aes(x = Commune, fill = Commune))
```
---
<div class="my-header"></div>

# Gráficos de barras


```{r}
ggplot(data = haiti) + 
  geom_bar(mapping = aes(x = Commune, fill = Commune)) +
  coord_flip()
```

---
<div class="my-header"></div>

# Tu turno 4

Predice la salida del siguiente código

Luego, córrelo

```{r, eval = FALSE}
ggplot(data = haiti) + 
  geom_point(mapping = aes(x = Households, y = Individuals)) +
  geom_smooth(mapping = aes(x = Households, y = Individuals))
```

---
<div class="my-header"></div>

## Varias capas

Cada nuevo `geom_...` agrega una capa

```{r}
ggplot(data = haiti) + 
  geom_point(mapping = aes(x = Households, y = Individuals)) +
  geom_smooth(mapping = aes(x = Households, y = Individuals))
```

---
<div class="my-header"></div>

## Mapeos globales vs mapeos locales

Podemos mapear características estéticas para todos los geoms así

```{r}
ggplot(data = haiti, mapping = aes(x = Households, y = Individuals)) + 
  geom_point() +
  geom_smooth()
```

---
<div class="my-header"></div>

## Mapeos globales vs mapeos locales

Podemos agregar mapeos locales así

```{r}
ggplot(data = haiti, mapping = aes(x = Households, y = Individuals)) + 
  geom_point(mapping = aes(color = `Water Provision`)) +
  geom_smooth()
```

---
<div class="my-header"></div>

## Mapeos globales vs mapeos locales

Que sucede aquí?

```{r, message = FALSE}
ggplot(data = haiti, mapping = aes(x = Households, y = Individuals,
                                   color = `Water Provision`)) + 
  geom_point() +
  geom_smooth()
```

---
<div class="my-header"></div>

## Mapeos globales vs mapeos locales

Incluso, podemos hacer mapeos locales de datos:

```{r}
ggplot(data = haiti, mapping = aes(x = Households, 
                                   y = Individuals)) + 
  geom_point(aes(color = `Water Provision`)) +
  geom_smooth(data = filter(haiti, Households < 500))
```

---
<div class="my-header"></div>

## Salvar gráficos

La función `ggsave` salva el último gráfico generado

Debemos especificar el nombre del archivo

En general indicaremos un path relativo

```{r, eval=FALSE}
ggsave("data/my-plot.pdf")
ggsave("data/my-plot.png")
```

El tamaño default en general no es muy bueno. Podemos indicar las dimensiones

```{r, eval=FALSE}
ggsave("data/my-plot.pdf", width = 6, height = 6)
```

Tu turno 5: Salva tu último gráfico en la carpeta img de tu proyecto

Si por algún motivo no estás en un proyecto, vuelve al proyecto del curso


---
<div class="my-header"></div>

## Más gráficos

Volvamos a la tabla de decisiones de pedidos de asilos en Perú

```{r, include=FALSE, message = FALSE}
decisiones <- read_csv("data/decisiones_asilo_peru.csv") %>%
  mutate(total = Reconocidas + `Proteccion Complementaria` + `Cerradas de otra forma` + Rechazadas)
```


```{r}
decisiones
```

---
<div class="my-header"></div>

## Series de tiempo

Podemos graficar una variable a lo largo del tiempo para detectar tendencias, eventos y sus consecuencias

<center><img src="img/series_tiempo.png"  height="460"></center>

---
## Series de tiempo

Podemos graficar una variable a lo largo del tiempo para detectar tendencias, eventos y sus consecuencias

<center><img src="img/grafico_autoras_mujeres.jfif"  height="460"></center>

---

<div class="my-header"></div>

## Series de tiempo

Podemos graficar una variable a lo largo del tiempo con una línea 

Utilizamos `geom_line`

```{r}
decisiones %>%
  filter(`Codigo Pais Origen` == "VEN") %>%
  ggplot() +
    geom_line(aes(Anio, total))
```

---
<div class="my-header"></div>

## Para practicar luego:


Modifica el gráfico anterior para que la línea sea roja y cambia su grosor

```{r, echo = FALSE}
decisiones %>%
  filter(`Codigo Pais Origen` == "VEN") %>%
  ggplot() +
    geom_line(aes(Anio, total), color = "red", size = 4)
```

---
<div class="my-header"></div>

## Gráficos por paneles

A veces es más claro si tenemos varios paneles, uno para cada valor de una variable categórica/discreta

```{r, echo = FALSE}
decisiones %>%
  filter(`Codigo Pais Origen` %in% c("VEN", "COL", "CUB", "HTI")) %>%
  ggplot() +
    geom_line(aes(Anio, total, 
                  color = `Codigo Pais Origen`)) +
  facet_wrap(~ `Codigo Pais Origen`)
```

---
<div class="my-header"></div>

## Gráficos por paneles 


Para eso agregamos una capa llamada `facet_*`

- `facet_wrap`
- `facet_grid`

Por default las escalas son las mismas

En caso de que tenga sentido cambiarlas podemos agregar `scales="free"` como opción

---
<div class="my-header"></div>

## Gráficos por paneles 

Podemos obtener el gráfico anterior de la siguiente forma:

```{r, eval = FALSE}
decisiones %>%
  filter(`Codigo Pais Origen` %in% c("VEN", "COL", "CUB")) %>%
  ggplot() +
  geom_line(aes(Anio, total, color = `Codigo Pais Origen`)) +
  facet_wrap(~ `Codigo Pais Origen`,)
```

puedes indicar el numero de columnas y de filas

Incluso, podemos generar paneles basados en dos variables categóricas

```{r, eval = FALSE}
ggplot() +
  geom_*(aes(...)) +
  facet_grid(var1 ~ var2)
```


---
<div class="my-header"></div>

## Para practicar despues:

1. Con la ayuda de la guía rapida intenta reproducir este gráfico que indica con una línea punteada el año del importante terremoto en Haití

2. Quita la línea y modifícalo para que se vea en paneles 

```{r, echo = FALSE}
decisiones %>%
  filter(`Codigo Pais Origen` %in% c("VEN", "COL", "HTI")) %>%
  ggplot() +
    geom_area(aes(Anio, total, 
                  fill = `Codigo Pais Origen`)) +
    geom_vline(xintercept = 2010,linetype = 2) 
```

---
<div class="my-header"></div>

## Combinando gráficos: `patchwork`

El paquete patchwork es muy útil para combinar gráficos

Al igual que los datos y los vectores, los gráficos también pueden guardarse en una variable

```{r}
g1 <- decisiones %>%
  filter(`Codigo Pais Origen` == "HTI") %>%
  ggplot() +
    geom_area(aes(Anio, total), fill = "red") +
    geom_vline(xintercept = 2010,linetype = 2) 
```

```{r}
g2 <- ggplot(data = haiti) + 
  geom_bar(mapping = aes(x = Commune, fill = Commune)) +
  coord_flip() +
  theme(legend.position = "none")
```


```{r}
g3 <- ggplot(data = haiti) +
  geom_point(mapping = aes(x = Households, 
                           y = Individuals,
                           color = `Water Provision`)) 
```

---
<div class="my-header"></div>

## Combinando gráficos: `patchwork`

```{r}
#install.packages("patchwork")
library(patchwork)
g1 + g2
```

---
<div class="my-header"></div>

## Combinando gráficos: `patchwork`

```{r}
#install.packages("patchwork")
library(patchwork)
(g1 | g3) /
   g2
```

---
<div class="my-header"></div>

## DESAFIO 2 para practicar después

1. Importa el dataset `dtm3-peru` (cuidado con la primera fila, salteala)

[https://data.humdata.org/dataset/dad01c41-adde-46ee-998d-a6baf9eeb8d1/resource/538975d3-f7bb-4f0d-9111-58f7e00ee4f1/download/dtm3_version_publica_1209-1.xlsx](https://data.humdata.org/dataset/dad01c41-adde-46ee-998d-a6baf9eeb8d1/resource/538975d3-f7bb-4f0d-9111-58f7e00ee4f1/download/dtm3_version_publica_1209-1.xlsx)

2. Cuántas personas respondieron la encuesta?

3. Haz un gráfico que represente la distribución del "Número de Familias que viven en la misma carpa o techo"

5. Representa con la ayuda de la guía rápida un gráfico de barras lado a lado del "Número de Familias que viven en la misma carpa o techo" que discrimine según distrito


---
<div class="my-header"></div>
## Resumen

- elegir un dataset

**data**

- elegir un gráfico adecuado

**geom_**

- mapear las variables con las propiedades estéticas

**aes()**

---
<div class="my-header"></div>
## Para seguir

Puedo hacer muuuchas cosas con `ggplot2`

- [R para Ciencia de Datos](https://es.r4ds.hadley.nz/)

- [ggplot2: elegant graphics for data analysis](https://ggplot2-book.org/)

- [Data Visualization - A practical introduction](https://socviz.co/)

Un poco más sobre como arreglar gráficos para publicar: 

- Títulos y otros textos
- Etiquetas
- Temas
- Colores

---
<div class="my-header"></div>

## Licencia y material usado

Licencia: [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/deed.es_ES).

Este material está inspirado y utiliza explicaciones de:

- [R para Clima](https://eliocamp.github.io/r-clima/) de <NAME> y <NAME>

- [Master the Tidyverse](https://github.com/rstudio-education/master-the-tidyverse-instructors) de <NAME>
<file_sep>---
title: "Nuestras propias funciones"
date: "`r Sys.Date()`"
output:
  xaringan::moon_reader:
    css: ["default", "default-fonts", "custom.css"]
    mathjax: "https://cdn.bootcss.com/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_HTMLorMML"
    lib_dir: libs
    seal: false
    nature:
      ratio: 13:9
      highlightStyle: github
      highlightLines: true
      countIncrementalSlides: false
---

```{r setup, include=FALSE}
options(htmltools.dir.version = FALSE)
knitr::opts_chunk$set(fig.height=5) 
library(ggplot2)
library(readr)
library(here)
library(dplyr)
library(colorspace)
paleta <- rainbow_hcl(10)
print_it_rainbow <- function(palabra, paleta) {
  i_font = 1
  for (char in palabra) {
    if (char != " ") {
      cat(paste0("<font style='color:", paleta[i_font] , "'>",char,"</font>"))
      i_font = i_font %% length(paleta) + 1
    } else {
      cat(" ")
    }
  }
}
```

background-color: #272822

<br>
<br>
<br>
<br>
<br>
<br>


```{r, results='asis', echo=FALSE}
cat("<h1 style='color:white'> <center> R para contextos humanitarios de emergencia")
cat("</center></h1> \n")
cat("## <center>")
palabra = unlist(strsplit("Nuestras propias funciones", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center> \n")
cat("### <center>")
fecha = as.character(Sys.Date())
palabra = unlist(strsplit("<NAME>", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center>")
```

---
<div class="my-header"></div>
## Mini introducción a funciones

- Si te encuentras una y otra vez copiando la misma linea de código para realizar una operación entonces es hora de escribir una función que haga esa tarea por ti.

- Hasta ahora estuvimos utilizando funciones que vienen con R (lo que llamamos R base) y funciones de paquetes que están disponibles para extender las funcionalidades de R. 

- función: conjunto de comandos o líneas de código definida para usarla en el futuro, con un nombre (uno que represente la acción u operación para la cual la estamos creando), elementos de entrada y el resultado final.

---
<div class="my-header"></div>
## Definición de funciones

Supongamos que una medica desea efectuar una evaluación del índice de masa corporal en los adultos de un campamento. En base a esto se planearan acciones.

$IMC = peso (kg) / altura^2 (metros)$


```{r}
IMC <- function(peso, altura) {
  valor_IMC <- peso / altura^2
  return(valor_IMC)
}
```

Al correr estas lineas de código se generará un nuevo elemento en nuestro entorno (mesada). La función está lista para ser usada. Pero antes de probarla revisemos la receta para definir una función.

**function** indica que es una función y las **llaves delimitan** el cuerpo de la función. La función puede recibir uno o más elementos de entrada: los argumentos. En este caso recibe 2.

---
<div class="my-header"></div>
## Usando la función

Ahora probemos calcular mi índice de masa corporal utilizando la función.


```{r}
IMC(60, 1.65)
```

Los elementos de entrada en este caso son 2 números (60 y 1.65) y nos devolvió un número. Probemos con dos vectores

```{r}
peso_adultos <- c(50, 60, 45, 70, 100)
altura_adultos <- c(1.65, 1.66, 1.6, 1.61, 1.7)
IMC(peso_adultos, altura_adultos)
```
- Es importante respetar el orden! 

```{r}
IMC(altura_adultos, peso_adultos)
```


- Los vectores deben tener la misma longitud!

---
<div class="my-header"></div>
## Reflexiones sobre funciones

- Definir funciones nos abre todo un mundo de posibilidades `r emo::ji("earth")`

- Cuando tengamos varias funciones definidas para trabajar en un mismo proyecto podemos hacer nuestro propio paquete! `r emo::ji("gift")`

- Y si pensamos que le puede servir a otras personas podemos publicarlo para que sea accesible! Incluso ell@s pueden ayudarme a arreglar y extender mi paquete incorporando nuevas funcionalidades. 

---
<div class="my-header"></div>

## Licencia y material usado

Licencia: [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/deed.es_ES).

Este material está inspirado y utiliza explicaciones de:

- [R para Clima](https://eliocamp.github.io/r-clima/) de <NAME> y <NAME>

- [Master the Tidyverse](https://github.com/rstudio-education/master-the-tidyverse-instructors) de <NAME>


<file_sep>library(readxl)
DB <- read_excel("C:/Users/OIM/Desktop/Taller R - IMWG/DB.xlsx")
head(DB)
attach(DB)
str(DB)
summary(Edad)
hist(Edad)
plot(Edad, Cantidad_dias)
plot(Edad, Cantidad_dias, pch=20)

###exporting graphics

jpeg("test.jpeg") #opens a device
plot(Edad, Cantidad_dias)
dev.off() #closes the graphic device/ must do this

library(ggplot2)
# aesthetics
gr0 <- ggplot(DB, aes(x = Sexo))
gr0

# barplot
gr1 <- ggplot(DB, aes(x = Sexo)) + geom_bar()
gr1

# reduciendo el ancho de las barras

gr1 <- ggplot(DB, aes(x = Sexo)) + geom_bar(width=0.5)
gr1

# coloreando
gr1 <- ggplot(DB, aes(x = Sexo)) + geom_bar(width=0.5, colour="black", fill="blue") ##colour = border #fill=interior
gr1

# añadiendo etiquetas

gr1 <- ggplot(DB, aes(x = Sexo)) + 
  geom_bar(width=0.5, colour="black", fill="blue") +
  geom_text(aes(label=..count..),stat="count",vjust = -.25)

### change vjust por position=position_stack(0.5))

## limites a los gráficos

gr1 + scale_y_continuous(limit = c(0, 300))

#añadiendo capas para nombre de etiquetas

gr1 + xlab("Genero") + ylab ("Número de casos")# etiquetas de los ejes

#añadiendo titulos

gr1 + xlab("Sexo") + ylab ("Número de casos") + 
  ggtitle("Sexo del entrevistado")

#temas de fondo
gr1 + xlab("Sexo") + ylab ("Número de casos") + 
  ggtitle("Sexo del entrevistado") + theme_light() #theme_classic #theme_bw

#points
points<- ggplot(DB, aes(x = Edad, y = Cantidad_dias)) + 
  geom_point(aes(colour = Sexo))

points

#time-series
time<- ggplot(DB, aes(x = Fecha_llegada, y = Dinero_disponible)) +
  geom_line() +
  labs(title = "Dinero disponible por fecha de llegada",
       x = "Fecha de llegada",
       y = "Dinero disponible")
time

##con porcentajes
##Ejercicio

library(scales)

gr2 <- ggplot(DB, aes(x = Sexo)) + 
  geom_bar(aes(y = (..count..)/sum(..count..))) + 
  scale_y_continuous(labels=scales::percent, limits = c(0,1))

##Otros ejercicios
#histograma
hist <- ggplot(DB, aes(Edad)) + geom_histogram(binwidth = 10,fill="red", colour="black")
#adicional
hist + facet_grid(Sexo ~.) 

#curva de densidad
dens<-ggplot(DB, aes(Edad)) + geom_line(stat="density") + facet_grid(Sexo ~.)
dens

#juntando ambas curvas
#geom_line
dens2<-ggplot(DB, aes(Edad, colour=Sexo)) + 
  geom_line(stat="density") +
  xlim(18, 100)
dens2
#geom_density
dens3<-ggplot(DB, aes(Edad, colour=Sexo)) + 
      geom_density()
dens3

#paquetes de ayuda
#1. esquisse
install.packages("esquisse")
library(esquisse)
esquisse::esquisser() 




<file_sep>---
title: "Introducción al tidyverse"
author: "<NAME>"
date: "25/11/2019"
output: 
  ioslides_presentation:
    logo: assets/img/lama_gtrm.png
    css: test.css
    transition: slower
    widescreen: true
    smaller: true

---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```

# Transformación de datos en R

Introducción al tidyverse!


## Qué es el tidyverse?

El "tidyverse" es un grupo de paquetes utilizado (sobre todo) para la manipulación de datos en R.

 ![](assets/img/tidyverse.png) 
 
 <br>
 <br>
 Esta sesión se concentrará solo sobre algunas funcionalidades del tidyverse, en particular:
 
 - **tidyr** 
 - **dplyr**
 

## Qué vamos a aprender

- **Importar** datos
- **Sumar y agregar** datos
- **Filtrar** valores
- **Seleccionar** variables
- **Cambiar formato** de datos (ancho-largo)
- **Crear** nuevas variables
- **Combinar** tablas



## Empezamos!

- Creamos un nuevo archivo script: File > New File > R Script
- Guardarlo como "20191125_Ejercicios R"

 ![](assets/img/screenshot.png) 

<br>

- Esto será el script para nuestra sesión. Guardarlo periodicamente!

## Instalar tidyverse

Antes de empezar, necesitamos instalar tidyverse (y un otro paquete para importar archivos Excel). Podemos ingresar este código en la console:


```{r}

install.packages("tidyverse")
install.packages("readxl")

```

En nuestro script vamos a poner el código siguiente:

```{r}

library("tidyverse")
library("readxl")

```

## Importar datos en R

**Para nuestro ejercicio vamos a utilizar los datos del RMRP 2020 Perú. **

Los datos son en un archivo Excel con dos pestañas: 

- **Actividades planeadas** por los socios a nivel de departamento y de sector;
- **Proyecciones** de población total y cálculo de **personas con necesidades**;

Para importar los datos, vamos a utilizar la función "read_excel" y guardarlos en dos tablas:

```{r}

Actividades <- read_excel(path="Datos/20191125_RMRP_Datos.xlsx", sheet="Actividades")

Proyecciones <- read_excel(path="Datos/20191125_RMRP_Datos.xlsx", sheet="Población")

```

## Visualizar los datos

Podemos utilizar la función "dim" para tener una idea de las dimensiones de nuestros datos:

```{r}

dim(Actividades)
dim(Proyecciones)

```

Utilizamos función "str" para ver la estructura de los datos:


```{r}

str(Actividades)
str(Proyecciones)

```

La función "summary" nos permite de ver más detalles:


```{r}

summary(Actividades)
summary(Proyecciones)

```

## Armonizar formatos de tablas

Las tablas incluyen datos sobre número de actividades y proyecciones poblacionales a nivel de departamento.

<br>

**Sin embargo, los dos formatos son diferentes!**

<br>

- En Proyecciones, cada departamento es una fila única;
- En Actividades, los departamentos se repiten para cada organización y cada sector.

<br>
Para conducir un análisis, queremos **armonizar los formatos y juntar las tablas.**


## Antes de empezar: cómo hacer un tubo!


Ya conocemos cómo formular las funciones de R y asignar el valor a una nueva variable:

```{r}

Var2 <- función(Var1)

```
Pero cómo hacemos si queremos aplicar dos o más funciones consecutivas a una variable?

```{r}

Var2 <- función1(Var1)

Var3 <- función2(Var2)

Var3 <- función3(Var3)

...

```

Esto es un proceso **ineficiente**.


## Antes de empezar: cómo hacer un tubo! (2)



El paquete "dplyr" del tidyverse nos permite juntar nuestros pasos a través del operador " %>% ":

```{r}

Var2 <- Var1 %>% 
  función1 %>% 
  función2

```

 ![](assets/img/dplyr_operator.png){ width=50% }

Pueden añadir este operador con ctrl + shift + M.

## Sumar y agregar datos

Primero, queremos agregar los datos a nivel de sector y departamento (sin considerar las organizaciones).

Para sumar los valores, utilizamos la función "summarise":

 ![](assets/img/summarise.png){ width=50% }

## Sumar y agregar datos (2)

En nuestro script:

```{r}

Actividades_Agregadas <- Actividades %>% 
  group_by(Departamento, Sector) %>% 
  summarise(Actividades_sum = sum(Actividades))

```

Hemos creado una nueva tabla "Actividades_Agregadas" con valores sumados para cada departamento y sector!


## Filtrar valores

En mi tabla, hay valores para actividades nacionales, donde no se específican los departamentos.

Para nuestro ejercicio, no queremos considerar estas actividades porqué queremos comparar los departamentos.

Los podemos filtrar a través de la función "filter":

 ![](assets/img/filter.png){ width=50% }
 
 <br>
 En nuestro script:

```{r}

Actividades_Agregadas <- filter(Actividades_Agregadas, Departamento != "Nacional")

```


## Cambiar estructura de la tabla

Aún no podemos comparar bien nuestras tablas. Queremos una fila única para cada departamento!

La función "spread" nos permite hacer justamente esto:

 ![](assets/img/spread.png){ width=80% }

En nuestro script:

```{r}

Actividades_Agregadas <- Actividades_Agregadas %>% 
  spread(Sector, Actividades_sum)

```

Ahora nuestra tabla tiene una fila para cada departamento.

## Seleccionar variables

Nuestra nueva tabla "Actividades_Agregadas" contiene columnas para cada sector. Podemos seleccionar las columnas que nos interesan a través de la función "select":

 ![](assets/img/select.png){ width=40% }


## Seleccionar variables

Para hacer nuestro análisis más sencillo, vamos a enfocarnos solamente sobre los sectores de **Protección** e **Integración**:


```{r}

Actividades_Agregadas <- select(Actividades_Agregadas, Departamento, Protección, Integración)

```

## Añadir nuevas columnas

Antes de combinar nuestras tablas, queremos tener una columna con el **total de actividades en cada departamento**.

La función "mutate" nos permite hacer esto:

 ![](assets/img/mutate.png){ width=60% }

<br>

En nuestro script:

```{r}

Actividades_Agregadas <- Actividades_Agregadas %>% 
  replace(is.na(.), 0) %>%
  mutate(Sum_Act = Protección + Integración)


```

## By the way..

Gracias al operador " %>% ", todos estos pasos pueden ser hechos conjuntamente!

```{r}

Actividades_Agregadas <- Actividades %>% 
  group_by(Departamento, Sector) %>% 
  summarise(Actividades_sum = sum(Actividades)) %>% 
  spread(Sector, Actividades_sum) %>% 
  replace(is.na(.), 0) %>%
  mutate(Sum_Act = Protección + Integración)

```

 ![](assets/img/surprised_lama.jpg){ width=20% }


## Combinar tablas

Para hacer nuestro análisis, queremos juntar nuestras dos tablas en una.

R nos permite hacer esto gracias a la función "join".

Hay cuatro tipos de join:


 ![](assets/img/join.png) 


## Combinar tablas

Para nuestra tabla, vamos a utilizar la función "left_join":

```{r}

colnames(Proyecciones)[1] <- "Departamento"

RMRP_Datos <- left_join(Proyecciones, Actividades_Agregadas, by = "Departamento")

```


Luego podemos verificar que todos los datos sean combinados:

```{r}

summary(RMRP_Datos)
summary(Actividades_Agregadas)

```


## Revisiones finales


Dado que nuestro análisis va a ser solo sobre Protección e Integracíon, no necesitamos otros sectores:

```{r}

RMRP_Datos <- select(RMRP_Datos, Departamento, contains("Proyeccion"), contains("Protección"),
contains("Integración"), Sum_Act)

```

## Para recapitular

- **Importar** datos: read_excel
- **Sumar y agregar** datos: summarise
- **Filtrar** valores: filter
- **Seleccionar** variables: select
- **Cambiar formato** de datos (ancho-largo): spread
- **Crear** nuevas variables: mutate
- **Combinar** tablas: join


<file_sep>---
title: "05-EJ-manipulacionII"
output: html_document
---

```{r setup, include=FALSE}
# este bloque de codigo setea nuestra sesion y carga tidyverse
knitr::opts_chunk$set(echo = TRUE)
library(tidyverse)
```

# Manipulacion II

En esta libreta practicamos las funciones de `tidyr`.

## Primero cargamos los datos

Los chequea que te encuentres en el proyecto correcto y que tus datasets esten ubicados en la carpeta data contenida en este proyecto

```{r}
decisiones <- read_csv("data/decisiones_asilo_peru.csv")
decisiones
```

```{r}
paises_largo <- read_csv("data/paises_largo.csv")
paises_largo
```

## Tu turno 1: `pivot_wider`

Covertir paises_largo al formato ordenado (variables como columnas)

```{r, message = FALSE}
paises_largo_tidy <- pivot_wider(paises_largo, 
                                 names_from = variable,
                                 values_from = valor)
paises_largo_tidy
```

## Tu turno 2: para practicar después

Nos interesa anexar la informacion de la esperanza de vida de los países de origen  a la tabla de decisiones: Unir la tabla de países obtenida en Tu turno 1 (paises_largo_tidy) con la tabla de decisiones de asilo (decisiones). Utiliza como llave a las columnas con el nombre del país y el año. 

```{r}
# no llegamos a verlo
```


<file_sep>---
title: "Lectura de datos"
date: "`r Sys.Date()`"
output:
  xaringan::moon_reader:
    css: ["default", "default-fonts", "custom.css"]
    mathjax: "https://cdn.bootcss.com/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_HTMLorMML"
    lib_dir: libs
    seal: false
    nature:
      ratio: 13:9
      highlightStyle: github
      highlightLines: true
      countIncrementalSlides: false
---

```{r setup, include=FALSE}
options(htmltools.dir.version = FALSE)
knitr::opts_chunk$set(fig.height=5) 
library(ggplot2)
library(readr)
library(here)
library(dplyr)
library(colorspace)
paleta <- rainbow_hcl(10)
print_it_rainbow <- function(palabra, paleta) {
  i_font = 1
  for (char in palabra) {
    if (char != " ") {
      cat(paste0("<font style='color:", paleta[i_font] , "'>",char,"</font>"))
      i_font = i_font %% length(paleta) + 1
    } else {
      cat(" ")
    }
  }
}
```

background-color: #272822

<br>
<br>
<br>
<br>
<br>
<br>


```{r, results='asis', echo=FALSE}
cat("<h1 style='color:white'> <center> R para contextos humanitarios de emergencia")
cat("</center></h1> \n")
cat("## <center>")
palabra = unlist(strsplit("Lectura de datos", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center> \n")
cat("### <center>")
fecha = as.character(Sys.Date())
palabra = unlist(strsplit("<NAME>", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center>")
```

---
<div class="my-header"></div>
## Lectura de datos

En general, el primer paso de nuestro flujo de trabajo es importar los datos a R

Una vez importados los datos, podremos:
  - Modificarlos
  - Graficarlos 
  - Modelarlos
  - Comunicar nuestros resultados

Los tipos de archivos de almacenamiento de datos más comunes son:
  - Excel
  - CSV (Comma Separated Values)

Tambien existen
  - json
  - XML, etc.

---
<div class="my-header"></div>
## Lectura de datos CSV

File > Import Dataset > From Text...(readr)

<center><img src="img/importar-asilo.png" height="450"></center>

---
<div class="my-header"></div>
## Lectura de datos CSV - Opciones

2. Seleccionamos el archivo deseado

3. Si es CSV, debe decir Delimiter: Comma

4. También prestar atención donde dice First Row as Names

5. Si hay filas que hay que saltear (que no sean los nombres), podemos usar Skip

6. RStudio adivina el tipo de la columna en base a sus primeros valores, podemos cambiar el tipo si está equivocado 

6. Importante!: Cuando terminamos de elegir las opciones, copiamos el código que se encuentra en el rectángulo `Code Preview`

7. Hacer click en importar

Una vez que importamos datos vamos a tener disponible un dataset del tipo `tibble` en la mesada

---
<div class="my-header"></div>
## Lectura de datos


La última línea de código que copiamos es 

> `View(nombre_dataset)`

Ese comando sirve para visualizar las filas y columnas del dataset. También si corremos 

> `nombre_dataset`

veremos en la consola (o justo debajo del bloque de código si es un RMarkdown) algunas pocas filas del dataset.

El comando `str(nombre_dataset)` devuelve una descripción general del dataset. Algunos campos que nos devuelve el comando son:

- Tipo de dato (tibble)
- Tamaño ([filas x columnas])
- Nombre y tipo de las columnas, etc.

Posibles tipos de columnas: texto (`character`), números (`double`, `numeric`, `integer`), fechas (`Date`, `DateTime`), lógicos (`logical`), categóricas (`factor`), etc.

---
<div class="my-header"></div>
## Tu turno: Lectura de datos CSV

1. importar el archivo "decisiones_asilo_peru.csv" (Fuente: UNHCR) con información sobre las decisiones tomadas en Perú frente a los pedidos de asilo recibidos provenientes de distintos países 

2. Indicar que cantidad de filas y columnas tiene

---
<div class="my-header"></div>
## Lectura de datos de Excel

File > Import Dataset > From Excel

<center><img src="img/importar-haiti.png" height="450"></center>


---
<div class="my-header"></div>
## Lectura de datos de Excel

- El paquete utilizado es `readxl`

**Importante!** 
- Número de página donde se encuentra el dataset
- Rango de celdas donde se encuentra

---
background-color: #272822

<br>
<br>
<br>
<br>
<br>
<br>


```{r, results='asis', echo=FALSE}
cat("# <center>")
palabra = unlist(strsplit("Desafío 1: Lectura de datos ", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center> \n")
```


---
<div class="my-header"></div>
## DESAFÍO 1: Lectura de datos 

El objetivo de este desafío es que armes un proyecto y  leas una archivo de datos para aplicar lo que aprendas en el resto del curso.

1. Crea un proyecto de RStudio llamado datos-haiti

3. Crea un archivo de RMarkdown (por las dudas, ésta es la sección asociada). 

2. Arma un chunk para leer los datos. Importa el archivo disponible en https://data.humdata.org/dataset/27baf423-2d13-49a4-bd72-cb65d8f924da/resource/9f71ab56-8a9a-4df2-be5d-f26d3600a285/download/dtm-haiti-site-assessment-round-33.xlsx con información sobre distintos campamentos en Haití (Fuente: OIM). 

4. Además de poner un título informativo, describe los datos con tus palabras. ¿Cuál es la fuente? ¿Qué variables incluyen? ¿Cuántas observaciones tiene? ¿Qué tipo de datos tiene cada columna?

---
<div class="my-header"></div>
## Observaciones sobre el desafío:

- Notar que se puede importar directo usando el url

- Observa que la segunda fila no debería aparecer como una observación del dataset. En el futuro veremos cómo quitarla

- Esta fila arruina la detección del tipo de todas las columnas numéricas

- Arreglar el tipo de las columnas 

---
<div class="my-header"></div>
## Escritura de datos

Les presento las cheatsheets o guías rápidas (en español) `r emo::ji("star")`

[https://rstudio.com/resources/cheatsheets/](https://rstudio.com/resources/cheatsheets/)

Nos describen brevemente la mayoria de las posibilidades que nos brinda un paquete `r emo::ji("gift")`

---
<div class="my-header"></div>
## Escritura de datos

Con `readr` puedo escribir archivos csv o de texto

**Tu turno:** Con la ayuda de la guías rápida de `readr` guardar el dataset de haiti con un nombre distinto en la carpeta data

Para escribir archivos excel puedes usar el paquete `xls`

---
<div class="my-header"></div>
## Escritura de datos

En este modulo aprendimos a 

- leer datos en R
  - en formato csv
  - en formato .xls o .xlsx
  
- escribir datos en R 

---
<div class="my-header"></div>

## Licencia y material usado

Licencia: [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/deed.es_ES).

Este material está inspirado y utiliza explicaciones de:

- [R para Clima](https://eliocamp.github.io/r-clima/) de <NAME> y <NAME>

- [Master the Tidyverse](https://github.com/rstudio-education/master-the-tidyverse-instructors) de <NAME>
<file_sep>---
title: "Intro"
date: "`r Sys.Date()`"
output:
  xaringan::moon_reader:
    css: ["default", "default-fonts", "custom.css"]
    mathjax: "https://cdn.bootcss.com/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_HTMLorMML"
    lib_dir: libs
    seal: false
    nature:
      ratio: 13:9
      highlightStyle: github
      highlightLines: true
      countIncrementalSlides: false
---

```{r setup, include=FALSE}
options(htmltools.dir.version = FALSE)
knitr::opts_chunk$set(fig.height=5) 
library(ggplot2)
library(readr)
library(here)
library(dplyr)
library(colorspace)
paleta <- rainbow_hcl(10)
print_it_rainbow <- function(palabra, paleta) {
  i_font = 1
  for (char in palabra) {
    if (char != " ") {
      cat(paste0("<font style='color:", paleta[i_font] , "'>",char,"</font>"))
      i_font = i_font %% length(paleta) + 1
    } else {
      cat(" ")
    }
  }
}
```

background-color: #272822

<br>
<br>
<br>
<br>
<br>
<br>


```{r, results='asis', echo=FALSE}
cat("<h1 style='color:white'> <center> R para contextos humanitarios de emergencia")
cat("</center></h1> \n")
cat("## <center>")
palabra = unlist(strsplit("Introducción", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center> \n")
cat("### <center>")
fecha = as.character(Sys.Date())
palabra = unlist(strsplit("<NAME>", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center>")
```

---
<div class="my-header"></div>

```{r, results='asis', echo=FALSE}
cat("##")
palabra = unlist(strsplit("Hola!", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("\n")
```

- Me llamo **Violeta**

- Soy **Matemática** e **Instructora Certificada por RStudio**

- Me gusta **visualizar datos, visitar museos, tomar té, etc, etc.**

<center>
<img src="img/grafico.jpg" alt="Hex stickers" width="250">
<img src="img/te.jpg" alt="Hex stickers" width="280">
</center>

<center>
<img src="img/museo.jpg" alt="Hex stickers" width="200">
</center>

---
<div class="my-header"></div>

## Objetivos del taller

- Entender qué son y para qué sirven R y RStudio
- Saber buscar ayuda en el mundo R
- Poder hacer un análisis de datos sencillo y completo, todo en R
- Poder aprovechar R para introducirlo en su flujo de trabajo habitual


## Modalidad del taller


- Presentación de los temas con ejemplos
- Ejercicios intercalados para interactuar
- "Live coding"


## Requisitos

- Asumimos que ya tienen instalado R y RStudio
- En caso contrario: seguir los pasos en este video  

---
<div class="my-header"></div>

## Programa tentativo


<style type="text/css">
.tg  {border-collapse:collapse;border-spacing:0;}
.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
  overflow:hidden;padding:10px 5px;word-break:normal;}
.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
  font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}
.tg .tg-jass{background-color:#656565;border-color:#9b9b9b;color:#FFF;font-weight:bold;text-align:center;vertical-align:top}
.tg .tg-3gal{background-color:#656565;border-color:#9b9b9b;color:#FFF;text-align:center;vertical-align:top}
.tg .tg-meum{background-color:#656565;border-color:#9b9b9b;font-weight:bold;text-align:center;vertical-align:top}
.tg .tg-fz0b{background-color:#FFF;border-color:#9b9b9b;color:#343434;text-align:center;vertical-align:top}
.tg .tg-gzjo{background-color:#FFF;border-color:#9b9b9b;text-align:left;vertical-align:top}
.tg .tg-o92t{background-color:#656565;border-color:#9b9b9b;text-align:left;vertical-align:top}
</style>
<table class="tg">
<thead>
  <tr>
    <th class="tg-meum"></th>
    <th class="tg-jass">Día 1 (25/11)</th>
    <th class="tg-jass">Día 2 (26/11)</th>
    <th class="tg-jass">Día 3 (27/11)</th>
  </tr>
</thead>
<tbody>
  <tr>
    <td class="tg-3gal">09:00-10:00</td>
    <td class="tg-fz0b">Intro al curso</td>
    <td class="tg-fz0b">Visualizacion de datos</td>
    <td class="tg-gzjo" rowspan="6"><br><br><br><span style="color:#343434">- Paquete koboloader </span><br><span style="color:#343434">- QualMiner: Análisis de texto </span><br><span style="color:#343434">- Tratamiento y pocesamiento de datos - 5W</span></td>
  </tr>
  <tr>
    <td class="tg-3gal">10:00-10:05</td>
    <td class="tg-3gal">Pausa</td>
    <td class="tg-3gal">Pausa</td>
  </tr>
  <tr>
    <td class="tg-3gal">10:05-10:55</td>
    <td class="tg-fz0b">Intro a R y RStudio</td>
    <td class="tg-fz0b">Visualizacion + Manipulacion</td>
  </tr>
  <tr>
    <td class="tg-3gal">10:55-11:10</td>
    <td class="tg-3gal">Pausa</td>
    <td class="tg-3gal">Pausa</td>
  </tr>
  <tr>
    <td class="tg-3gal">11:10-11:40</td>
    <td class="tg-fz0b">RStudio y proyectos</td>
    <td class="tg-fz0b">Mas manipulacion y funciones</td>
  </tr>
  <tr>
    <td class="tg-3gal">11:40-11:45</td>
    <td class="tg-3gal">Pausa</td>
    <td class="tg-3gal">Pausa</td>
  </tr>
  <tr>
    <td class="tg-3gal">11:45-13:00</td>
    <td class="tg-fz0b"> RMarkdown</td>
    <td class="tg-fz0b">Interactuar con Kobo y Power BI</td>
    <td class="tg-o92t"></td>
  </tr>
  <tr>
    <td class="tg-3gal">13:00-14:00</td>
    <td class="tg-3gal">Almuerzo</td>
    <td class="tg-3gal">Almuerzo</td>
    <td class="tg-o92t"></td>
  </tr>
  <tr>
    <td class="tg-3gal">14:00-15:00</td>
    <td class="tg-fz0b">Lectura de datos</td>
    <td class="tg-fz0b">Gráficos, reportes y tablas</td>
    <td class="tg-o92t"></td>
  </tr>
  <tr>
    <td class="tg-3gal">15:00-16:00</td>
    <td class="tg-fz0b">Manipulacion de datos</td>
    <td class="tg-fz0b">Gráficos, reportes y tablas</td>
    <td class="tg-o92t"></td>
  </tr>
</tbody>
</table>


---
<div class="my-header"></div>


## Desafíos de hoy


- Leer correctamente una base de datos

- Generar nuevas columnas a partir de información de otras columnas y generar resúmenes a partir de los datos

- Generar gráficos a partir de la base de datos usada


---
<div class="my-header"></div>

```{r xaringan-editable, echo=FALSE}
xaringanExtra::use_editable(expires = 1)
```

```{r, results='asis', echo=FALSE}
cat("## ")
palabra = unlist(strsplit("Qué herramientas para análisis de datos utilizan?", split = ""))
cat(print_it_rainbow(palabra, paleta))
```

.flex[
.can-edit[
- Excel
- GIS
- Power BI
- Word
]
]

.flex[
.w-50[
**Ventajas**
.can-edit.key-rstudio-gets-me[
- Intuitivos para usar
]
]

.w-50[
**Desventajas**
.can-edit.key-rstudio-gets-me-not[
- Son muy específicos para cada tarea
]
]
]



---
<div class="my-header"></div>

## Si ya tenemos:

- Excel
- Kobo
- GIS
- Power BI
- Word
- InDesign
- Ilustrator

## Entonces por qué R?

## Porque con R podemos:

- Realizar la mayoría de esas tareas
- Automatizar procesos
- Interactuar facilmente con muchas herramientas

Y además... es abierto y gratuito

---

```{r, results='asis', echo=FALSE}
cat("## ")
palabra = unlist(strsplit("Desventaja", split = ""))
cat(print_it_rainbow(palabra, paleta))
```

<center><img src="img/anteseratipo.png" alt="Hex stickers" height="510"></center>


---
<div class="my-header"></div>

## Algunas cosas que podemos hacer en R

- Leer datos
- Transformar y resumir datos
- Visualizar datos
- Generar reportes automáticos

- Crear sitios web. p. ej.: https://violetr.netlify.app/

- Desarrollar aplicaciones interactivas: 
  - https://shiny.rstudio.com/gallery/india-blood-banks.html
  - https://violetr.shinyapps.io/hiv_hnp/
  - https://vac-lshtm.shinyapps.io/ncov_tracker
  
---
<div class="my-header"></div>

## R en contextos humanitarios de emergencia

- Hay un grupo de usuarios y desarrolladores de R que trabajan en esta área:
[HumanitaRian useR group](https://humanitarian-user-group.github.io/about/)
  - Creado en una reunión de la UNHCR
  - Blog y grupo de Skype


- Documentación y Reproducibilidad de los procesos
- Hay funciones específicamente hechas para manejar este tipo de datos y conectarse con herramientas populares como Kobo
- Existes manuales de buenas prácticas sobre como crear reportes. Por ejemplo, [How to quickly produce statistical reports?
The UNHCR “R-Cookbook”](https://edouard-legoupil.github.io/unhcr_paged/)


---
<div class="my-header"></div>

## Material del curso

El material del taller está disponible en 

.flex[
.can-edit[
- url
]
]

Licencia: [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/deed.es_ES).

Este material está inspirado en:

- [R para Clima](https://eliocamp.github.io/r-clima/) de <NAME> y <NAME>

- [Master the Tidyverse](https://github.com/rstudio-education/master-the-tidyverse-instructors) de <NAME>





---


background-color: #272822

<br>
<br>
<br>
<br>
<br>
<br>


```{r, results='asis', echo=FALSE}
cat("# <center>")
palabra = unlist(strsplit("Empezamos!", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center>")
```


---

<div class="my-header"></div>

## Qué es R? Qué es RStudio?

- R es el lenguaje de programación, es la forma de darle instrucciones a la computadora 

- RStudio es la interfaz gráfica (lo que vemos)




![](img/lenguajes.png)

---

<div class="my-header"></div>

## RStudio: Como se ve la primera vez

A la izquierda, en la consola, podemos escribir código en R 

Este se ejecutará al apretar `Enter`

![](img/Rstudio.png)




---

<div class="my-header"></div>

## RStudio: Como se ve habitualmente

Vamos a hacer cosas interesantes, y vamos a querer guardarlas

Por eso la configuración normal de RStudio será asi, con cuatro paneles

El de arriba a la izquierda es un bloc de notas

![](img/Rstudio2.png)


---

<div class="my-header"></div>

## RStudio culinario

![](img/rstudio-cocina.png)
<p style="color: gray; font-size:15px"> Imagen del curso "R para Clima" - <NAME> y <NAME> <br>
https://eliocamp.github.io/r-clima/index.html
</p>

---

<div class="my-header"></div>

## Cómo le damos instrucciones a R?

Como ya vieron en el video para instalar R, podemos pedirle a R que compute operaciones básicas.
Y también no tan básicas.

```{r}
2 + 2
```

```{r}
sqrt(2)
```

Esto solo nos devuelve el valor

Pero si queremos guardarlo en algún lugar (para que quede disponible en la mesada):

```{r}
raiz_dos <- sqrt(2)
raiz_dos
```

---
<div class="my-header"></div>
## Variables en R

```{r}
raiz_dos <- sqrt(2)
raiz_dos
```

**En Excel:**

Es parecido a hacer =SQRT(2) (o =RCUAD(2)) en la celda A2

Sabemos que ese resultado está en la celda A2

**En R:**

Ese resultado está en la variable `raiz_dos` que aparece en el environment (la mesada)

**Pero... La analogía no es 100% util:**
[https://PollEv.com/multiple_choice_polls/P2xOvcUGbMWv91CLwX6o1/respond](https://PollEv.com/multiple_choice_polls/P2xOvcUGbMWv91CLwX6o1/respond)
```{r}
x <- 2
y <- x + 2
x <- 3
```

---
<div class="my-header"></div>
## Vectores en R

- Es la unidad básica en R
- Casi todo es un vector (por eso vemos el [1] a la izquierda en los resultados)
- Todos los elementos de un vector son de un mismo tipo (numérico, caracter, etc)

```{r}
vector1 <- c(3, 5, 6.1, 7)
vector1
```

```{r}
vector2 <- 1:20
vector2
```

Puedo calcular el promedio de los elementos de un vector
```{r}
mean(vector2)
```

---
<div class="my-header"></div>
## Vectores en R

```{r}
vector1 <- c(3, 5, 6.1, 7)
vector1
```

Puedo acceder al elemento que está en el lugar 2 del vector 

```{r}
vector1[2]
```

Puedo obtener todos los valores de un vector salvo el elemento del lugar 2 asi:

```{r}
vector1[-2]
```

---
<div class="my-header"></div>

## Listas en R

Qué pasa si quiero guardar más de un tipo de elemento en una variable?

Listas! se crean con list() y pueden contener cualquier tipo de datos, incluso listas

```{r}
mi_agenda <- list(Carlos = c(tel = 41232342),
                  Maria = c(tel = 25362819, edad = 25))
mi_agenda$Carlos
mi_agenda[[2]]
```


---
<div class="my-header"></div>
## Funciones en R

R tiene funciones útiles incorporadas directamente

> `sqrt`, `+`,  `-`, `mean`, `sum`, etc

Se aplican a una o más variables y devuelven un valor

Las entradas de las funciones (puede ser 1 o más) se llaman parámetros

Pueden ser obligatorios u opcionales

> `sqrt` se aplica a un número positivo y devuelve su raíz cuadrada

Pero... nuestro objetivo es **realizar análisis de datos** 

`r emo::ji("star")` **necesitamos más funciones!** `r emo::ji("star")`

Tenemos acceso a más funciones que las básicas a partir de **paquetes**  `r emo::ji("gift")[1]`

---
<div class="my-header"></div>
## Hay muuuuchos paquetes de R

- De distintas áreas del conocimiento: 
  - Genética, 
  - Ciencia de datos en general, 
  - R humanitario, etc.

- Podemos hacer nuestro propio paquete para nuestro flujo de trabajo

<center><img src="img/aushex.png" alt="Hex stickers" height="320"></center>


---
<div class="my-header"></div>
## Ciencia de datos

Flujo de trabajo:

![](img/data-science.svg)

Existe un **conjunto de paquetes** para realizar estas tareas

<center><img src="img/hex-tidyverse.png" alt="Hex stickers" height="150"></center>

<p style="color: gray; font-size:13px"> Imágenes de "R para Ciencia de Datos" y Rstudio</p>

---
<div class="my-header"></div>
## `tidyverse`

- tidy = ordenado
- ...verse = universo

<center><img src="img/tidyhexall.png" alt="Hex stickers" height="360s"></center>


---
<div class="my-header"></div>
## Instalar paquetes en R

Para instalar paquetes, usamos la función `install.packages()`

```{r eval=FALSE}
install.packages("readr")
```

instala un paquete que contiene funciones para leer datos.

Usando el comando

```{r, eval=FALSE}
library(readr)
```

Las funciones del paquete `readr` estarán disponibles. p. ej.: `read_csv`

**Tu turno:** Instalar el paquete `readr`

**Tu turno Bis:** Instalar `tidyverse`

---
<div class="my-header"></div>
## Pedir ayuda en R

Hay muchas formas de pedir ayuda en R


Una opción es usar la **ayuda de R**

```{r, eval=FALSE}
?nombre_funcion
```

- `Description`: breve descripción de la función 

- `Usage`

- `Arguments`: argumentos de la función

- `Details`

- `Value`: lo que devuelve la función

- `Examples`

**Tu turno:** Abre y lee la ayuda de la función `sd()`. Puede que haya cosas que aún no entiendas, pero trata de captar la idea general. ¿Qué hace esa función? ¿Qué argumentos acepta?

---
<div class="my-header"></div>
## Pedir ayuda en R

Otra opción es **preguntar a instructor@ o colegas**

Otra, **googlear** 

Fórmula "óptima" (para mi) para googlear:

> R + pregunta o error descriptivo y específico

o, si estamos usando tidyverse

> tidyverse + pregunta o error descriptivo y específico

Es mejor buscar en inglés (hay más material)

Algunas buenas fuentes:

- stackoverflow (Preguntas y respuestas)
- rstudio community (Foro)

---
<div class="my-header"></div>

## Material del curso

El material del taller está disponible en 

.flex[
.can-edit[
- url
]
]

---
<div class="my-header"></div>

## Licencia y materiales

Licencia: [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/deed.es_ES).

Este material está inspirado y utiliza explicaciones de:

- [R para Clima](https://eliocamp.github.io/r-clima/) de <NAME> y <NAME>

- [Master the Tidyverse](https://github.com/rstudio-education/master-the-tidyverse-instructors) de <NAME>

<file_sep>---
title: "Intro"
date: "`r Sys.Date()`"
output:
  xaringan::moon_reader:
    css: ["default", "default-fonts", "custom.css"]
    mathjax: "https://cdn.bootcss.com/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_HTMLorMML"
    lib_dir: libs
    seal: false
    nature:
      ratio: 13:9
      highlightStyle: github
      highlightLines: true
      countIncrementalSlides: false
---

```{r setup, include=FALSE}
options(htmltools.dir.version = FALSE)
knitr::opts_chunk$set(fig.height=5) 
library(ggplot2)
library(readr)
library(here)
library(dplyr)
library(colorspace)
paleta <- rainbow_hcl(10)
print_it_rainbow <- function(palabra, paleta) {
  i_font = 1
  for (char in palabra) {
    if (char != " ") {
      cat(paste0("<font style='color:", paleta[i_font] , "'>",char,"</font>"))
      i_font = i_font %% length(paleta) + 1
    } else {
      cat(" ")
    }
  }
}
```

background-color: #272822

<br>
<br>
<br>
<br>
<br>
<br>


```{r, results='asis', echo=FALSE}
cat("<h1 style='color:white'> <center> R para contextos humanitarios de emergencia")
cat("</center></h1> \n")
cat("## <center>")
palabra = unlist(strsplit("Reportes paramétricos y más", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center> \n")
cat("### <center>")
fecha = as.character(Sys.Date())
palabra = unlist(strsplit("<NAME>", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center>")
```

---
<div class="my-header"></div>
## Personalizando reportes

Ya sabemos lo basico sobre generar reportes.

- RMarkdown y sus elementos
  - bloques de codigo (chunks)
  - texto
  - encabezado (hasta ahora no lo tocamos)

- Tipo de output

- Knit para generar

Pero ya vimos que las salidas por ahora no son muy lindas


En este modulo vamos a ver como personalizarlos para que sean publicables y mas eficientes

---
<div class="my-header"></div>
## Agregar tabla de contenidos

Por ejemplo, si quiero agregar una tabla de contenidos con los titulos y subtitulos puedo agregar en el encabezado el termino "toc: TRUE"

```{r, eval = FALSE}
---
output: 
  html_document:
    toc: TRUE
---
```

Es importante que respetemos la estructura tal como se indica! (los espacios y la alineacion de toc con respecto a html_document)

```{r, eval = FALSE}
---
output: 
  word_document:
    toc: TRUE
---
```

---
<div class="my-header"></div>
## Automatizando reportes


Es muy común tener que hacer un reporte cuyo resultado dependa de ciertos parámetros.

Por ejemplo, podrías tener un reporte que analiza las decisiones a los pedidos de asilo de personas colombianas en Perú.

```{r, message = FALSE, eval=FALSE}
library(tidyverse)

decisiones <- read_csv("data/decisiones_asilo_peru.csv")

decisiones_filtrado <- decisiones %>% 
  filter(`Codigo Pais Origen` == "COL")

decisiones_filtrado %>% 
  ggplot(aes(Anio, Reconocidas)) +
  geom_line(color = "red", size = 1.5)
```

---
<div class="my-header"></div>
## Automatizando reportes


Es muy común tener que hacer un reporte cuyo resultado dependa de ciertos parámetros.

Por ejemplo, podrías tener un reporte que analiza las decisiones a los pedidos de asilo de personas colombianas en Perú.

```{r, message = FALSE, echo=FALSE}
library(tidyverse)

decisiones <- read_csv("data/decisiones_asilo_peru.csv")

decisiones_filtrado <- decisiones %>% 
  filter(`Codigo Pais Origen` == "COL")

decisiones_filtrado %>% 
  ggplot(aes(Anio, Reconocidas)) +
  geom_line(color = "red", size = 1.5)
```



---
<div class="my-header"></div>
## Automatizando reportes

Si ahora querés hacer el mismo reporte pero para Haiti, tienes que abrir el archivo y modificar la llamada a `filter` para quedarte sólo con ese país:

```{r, message=FALSE, eval = FALSE}
library(tidyverse)

decisiones <- read_csv("data/decisiones_asilo_peru.csv")

decisiones_filtrado <- decisiones %>% 
  filter(`Codigo Pais Origen` == "HTI")

decisiones_filtrado %>% 
  ggplot(aes(Anio, Reconocidas)) +
  geom_line(color = "red", size = 1.5)
```

Si el reporte es largo y usa el nombre del país en múltiples lugares cambiar "COL" por "HTI" puede ser tedioso y propenso a error, ya que te obliga a modificar muchas partes del código. 

---
<div class="my-header"></div>
## Automatizando reportes

Si ahora querés hacer el mismo reporte pero para Haiti, tienes que abrir el archivo y modificar la llamada a `filter` para quedarte sólo con ese país:

```{r, message=FALSE, echo=FALSE}
library(tidyverse)

decisiones <- read_csv("data/decisiones_asilo_peru.csv")

decisiones_filtrado <- decisiones %>% 
  filter(`Codigo Pais Origen` == "HTI")

decisiones_filtrado %>% 
  ggplot(aes(Anio, Reconocidas)) +
  geom_line(color = "red", size = 1.5)
```

Si el reporte es largo y usa el nombre del país en múltiples lugares cambiar "COL" por "HTI" puede ser tedioso y propenso a error, ya que te obliga a modificar muchas partes del código. 

---
<div class="my-header"></div>
## Parametrizando reportes

En estas situaciones podés crear un reporte parametrizado. La idea es que el reporte tiene una serie de parámetros que puede modificar la salida. Es como si el archivo de R Markdown fuera una gran función con sus argumentos!

Para generar un reporte parametrizado hay que agregar un elemento llamado params al encabezado con la lista de parámetros y sus valores por default.

```{r, eval=FALSE}
params:
  pais: COL
```



---
<div class="my-header"></div>
## Parametrizando reportes

```{r, eval=FALSE}
library(tidyverse)

decisiones <- read_csv("data/decisiones_asilo_peru.csv")

decisiones_filtrado <- decisiones %>% 
  filter(`Codigo Pais Origen` == params$pais)

decisiones_filtrado %>% 
  ggplot(aes(Anio, Reconocidas)) +
  geom_line(color = "red", size = 1.5)
```


---
<div class="my-header"></div>
## Automatizando reportes

Posibilidades

```{r, eval = FALSE}
for (pais_actual in c("HTI", "VEN", "COL")) {
  rmarkdown::render("reporte_final.Rmd", 
                  output_file = paste0("reporte-",
                                       pais_actual,
                                       ".docx"),
                  params = list(pais = pais_actual))
}
```
Este codigo crea 3 reportes!
---
<div class="my-header"></div>
## Control de chunks

Hay una serie de opciones que controlan si el código se ejecuta y si el resultado del código va a quedar en el reporte o no:

- `eval = FALSE` evita que se corra el código del chunk, de manera que tampoco va a mostrar resultados. Es útil para mostrar códigos de ejemplo si estás escribiendo, por ejemplo un documento para enseñar R.

- `echo = FALSE` corre el código del chunk y muestra los resultados, pero oculta el código en el reporte. Esto es útil para escribir reportes para personas que no necesitan ver el código de R que generó el gráfico o tabla.

- `include = FALSE` corre el código pero oculta tanto el código como los resultados. Es útil para usar en chunks de configuración general donde cargas las librerías.

---
<div class="my-header"></div>
## Control de chunks

- Si estás escribiendo un informe en el que no querés que se muestre ningún código, agregarle echo = FALSE a cada chunk nuevo se vuelve tedioso. 

- Solución: cambiar la opción de forma global de manera que aplique a todos los chunks. Esto se hace mediante la función knitr::opts_chunk$set()
, que setea las opciones globales de los chunks que le siguen. (Ya esta agregado en el primer bloque del documento reporte_final.Rmd)

---
<div class="my-header"></div>
## Control de chunks

- Vimos que a veces algunas funciones imprimen mensajes sobre lo que hacen. Por ejemplo, cuando read_csv lee un archivo describe el tipo de dato de cada columna

- Esto es útil pero en general no quiere que quede en el reporte. Para que no muestre estos mensajes basta con poner la opción message = FALSE

- Si queremos evitar una advertencia (warning) podemos indicar tamben warning = FALSE, separado por coma de los otros mensajes

---
<div class="my-header"></div>
## Tu turno

En el archivo reporte_final.Rmd elige las opciones adedcuadas para cada chunk

---
<div class="my-header"></div>
## Mejores reportes 

- Mejores graficos 
- Mejores tablas

---
<div class="my-header"></div>
## Temas en `ggplot2`


- [https://ggplot2.tidyverse.org/reference/ggtheme.html](https://ggplot2.tidyverse.org/reference/ggtheme.html)

- [https://mran.microsoft.com/snapshot/2017-02-04/web/packages/ggthemes/vignettes/ggthemes.html](https://mran.microsoft.com/snapshot/2017-02-04/web/packages/ggthemes/vignettes/ggthemes.html)

---
<div class="my-header"></div>
## Temas en `ggplot2`


```{r minimal}
decisiones_filtrado %>% 
  ggplot(aes(Anio, Reconocidas)) +
  geom_line(color = "red", size = 1.5) +
  theme_minimal()
```

---
<div class="my-header"></div>
## Temas en `ggplot2`


```{r ggthemes }
# install.packages("ggthemes")
library(ggthemes)
decisiones_filtrado %>% 
  ggplot(aes(Anio, Reconocidas)) +
  geom_line(color = "red", size = 1.5) +
  theme_fivethirtyeight()
```


---
<div class="my-header"></div>
## Tablas simples con kable

```{r}
library(knitr)
kable(decisiones)
```

---
<div class="my-header"></div>
## Tablas lindas con `kableExtra`

El paquete `kableExtra`, como su nombre lo indica, nació para extender el poder de la función kable.

Descargalo y prueba sus funcionalidades


---
<div class="my-header"></div>

## Licencia y material usado

Licencia: [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/deed.es_ES).

Este material está inspirado y utiliza explicaciones de:

- [R para Clima](https://eliocamp.github.io/r-clima/) de <NAME> y Elio Campitelli

- [Master the Tidyverse](https://github.com/rstudio-education/master-the-tidyverse-instructors) de <NAME><file_sep>---
title: "04-EJ-visualizacion"
output: html_document
---

Trabajaremos en principio con los dos datasets conocidos hasta ahora: Haiti y decisiones

```{r include=FALSE, message=FALSE}
library(tidyverse)
library(readxl)
url_haiti <- "https://data.humdata.org/dataset/27baf423-2d13-49a4-bd72-cb65d8f924da/resource/9f71ab56-8a9a-4df2-be5d-f26d3600a285/download/dtm-haiti-site-assessment-round-33.xlsx"
destfile <- "dtm_haiti_site_assessment_round_33.xlsx"
curl::curl_download(url_haiti, destfile)
haiti <- read_excel(destfile, 
    col_types = c("text", "text", "text", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "text", "text", "text", "text", "text", 
        "text", "text", "text", "text"))
haiti <- slice(haiti, -1)
haiti
```

```{r, include = FALSE, message=FALSE}
decisiones <- read_csv("data/decisiones_asilo_peru.csv")
decisiones
```


## Tu turno 1: Mi primer gráfico


Copia y corre el código para generar el gráfico que queremos


```{r}
ggplot(data = haiti) +
  geom_point(mapping = aes(x = Households, y = Individuals))
```

## Tu turno 2

Reproducir este histograma de la variable Households con la ayuda de la guía rápida de `ggplot2`. Usa `geom_histogram`

Ayuda: no utilizar la variable `y`

```{r}
ggplot(data = haiti) + 
  geom_histogram(mapping = aes(Individuals))
```


# Tu turno 3

Reproducir este gráfico de barras que grafica la cantidad de campamentos en cada comuna. Utiliza la ayuda de la guía rápida de `ggplot2`. Usa `geom_bar`

Ayuda: no utilizar la variable `y`

```{r}
ggplot(data = haiti) + 
  geom_bar(mapping = aes(x = Commune, fill = Commune))
```


# Tu turno 4

Predice la salida del siguiente código

Luego, córrelo

```{r, eval = FALSE}
ggplot(data = haiti) + 
  geom_point(mapping = aes(x = Households, y = Individuals)) +
  geom_smooth(mapping = aes(x = Households, y = Individuals))
```

## Tu turno 5

Salva tu último gráfico en la carpeta img de tu proyecto

Si por algún motivo no estás en un proyecto, vuelve al proyecto del curso

```{r}
ggsave("img/my-plot.pdf")
```


## DESAFIO 2 para practicar despues

1. Importa el dataset `dtm3-peru` (cuidado con la primera fila de la tabla, salteala)

https://data.humdata.org/dataset/dad01c41-adde-46ee-998d-a6baf9eeb8d1/resource/538975d3-f7bb-4f0d-9111-58f7e00ee4f1/download/dtm3_version_publica_1209-1.xlsx

2. Cuántas personas respondieron la encuesta?

3. Haz un gráfico que represente la distribución del "Número de Familias que viven en la misma carpa o techo"

4. Representa con la ayuda de la guía rápida un gráfico de barras lado a lado del "Número de Familias que viven en la misma carpa o techo" que discrimine según distrito

```{r}
library(readxl)
url <- "https://data.humdata.org/dataset/dad01c41-adde-46ee-998d-a6baf9eeb8d1/resource/538975d3-f7bb-4f0d-9111-58f7e00ee4f1/download/dtm3_version_publica_1209-1.xlsx"
destfile <- "dtm3_version_publica_1209_1.xlsx"
curl::curl_download(url, destfile)
dtm3_version_publica_1209_1 <- read_excel(destfile, 
    col_types = c("text", "text", "text", 
        "text", "text", "date", "text", "text", 
        "text", "text", "text", "text", "numeric", 
        "text", "text", "text", "text", "text", 
        "text", "text", "text", "text", "text", 
        "text", "text", "text", "text", "text", 
        "text", "text", "text", "text", "text", 
        "text", "text", "text", "text", "text", 
        "text", "text", "text", "text", "text", 
        "text", "text", "text", "text", "text", 
        "text", "text", "text", "text", "text", 
        "text", "text", "text", "text", "text", 
        "text", "text", "text", "text", "text", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "text", "text", 
        "text", "text", "text", "text", "text", 
        "text", "text", "text", "text", "text", 
        "text", "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "text", "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "text", "text", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "text", "text", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "text", "text", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "text", "text", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "text", "text", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "text", "text", 
        "text", "text", "numeric", "text", 
        "text", "text"), skip = 1)
View(dtm3_version_publica_1209_1)

# 2. cantidad de filas
nrow(dtm3_version_publica_1209_1)

# 3. 
ggplot(dtm3_version_publica_1209_1) +
  geom_bar(aes(x = `Número de Familias que viven en la misma carpa o techo`))

# 4. 
ggplot(dtm3_version_publica_1209_1) +
  geom_bar(aes(x = `Número de Familias que viven en la misma carpa o techo`)) +
  facet_wrap(~Distrito)
```

<file_sep>---
title: "Interaccion con Kobo y Power BI"
date: "`r Sys.Date()`"
output:
  xaringan::moon_reader:
    css: ["default", "default-fonts", "custom.css"]
    mathjax: "https://cdn.bootcss.com/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_HTMLorMML"
    lib_dir: libs
    seal: false
    nature:
      ratio: 13:9
      highlightStyle: github
      highlightLines: true
      countIncrementalSlides: false
---

```{r setup, include=FALSE}
options(htmltools.dir.version = FALSE)
knitr::opts_chunk$set(fig.height=5) 
library(ggplot2)
library(readr)
library(here)
library(dplyr)
library(colorspace)
paleta <- rainbow_hcl(10)
print_it_rainbow <- function(palabra, paleta) {
  i_font = 1
  for (char in palabra) {
    if (char != " ") {
      cat(paste0("<font style='color:", paleta[i_font] , "'>",char,"</font>"))
      i_font = i_font %% length(paleta) + 1
    } else {
      cat(" ")
    }
  }
}
```

background-color: #272822

<br>
<br>
<br>
<br>
<br>
<br>


```{r, results='asis', echo=FALSE}
cat("<h1 style='color:white'> <center> R para contextos humanitarios de emergencia")
cat("</center></h1> \n")
cat("## <center>")
palabra = unlist(strsplit("Interacción con Kobo y Power BI", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center> \n")
cat("### <center>")
fecha = as.character(Sys.Date())
palabra = unlist(strsplit("<NAME>", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center>")
```

---
<div class="my-header"></div>
## Kobo

Supongamos que tenemos que realizar muchas veces por semana un reporte de datos proveniente de un relevamiento recogido en Kobo Toolbox.

Tenemos muchas formas de hacerlo pero lo mas comodo sera con un único código que podamos ejecutar y que nos genere el reporte automáticamente. 

Podemos hacer esto con R a través de la API (Application Programming Interface) de Kobo Toolbox.

---
<div class="my-header"></div>
## Kobo

Tenemos que generar en R una URL que le indique a Kobo lo que necesitamos

```{r, eval=FALSE}
install.packages(c("httr", "jsonlite"))
library(httr)
library(jsonlite)
```


```{r, eval=FALSE}
# A completar con tus datos
usuario = "tallerrkobo"
contrasenia = "TallerRKobo123"
form_id = "559546" 
# puedes obtener el numero de tu formulario aqui :
# https://im.unhcr.org/kobosupport/#form
server = "kc.kobotoolbox.org"
# o "kc.humanitarianresponse.info" o "kc.kobotoolbox.org"

# Generar datos 
URL <- paste0("https://", server, "/api/v1/data/", form_id, ".csv")
res <- GET(URL, authenticate(usuario, contrasenia), progress())

respuestas <- read_csv(res$content)
```

---
<div class="my-header"></div>
## Kobo: subir formulario

Existen otras funcionalidades de Kobo

- Desarrollar formularios en R y actualizarlos desde R
- El formato en este caso es xls

```{r, eval = FALSE}
library(devtools)
library(httr)
# correr este codigo para cargar funciones, escribirlo todo en 1 linea:
source_url("https://raw.githubusercontent.com/
           ppsapkota/kobohr_apitoolbox/master/
           R/r_func_ps_kobo_utils.R")

#"kf.kobotoolbox.org" o "kobo.humanitarianresponse.info"
kpi_url <- "https://kf.kobotoolbox.org/imports/"
kobo_form_xlsx <- "test-formulario.xlsx" #tu formulario

# la siguiente funcion crea un borrador en tu usuario
# con las preguntas indicadas en el xlsx
d_content<-kobohr_kpi_upload_xlsform(kpi_url,
                kobo_form_xlsx,
                "tallerrkobo",
                "TallerRKobo123")
import_url <- d_content$url
```

---
<div class="my-header"></div>
## Kobo: subir formulario

```{r, eval = FALSE}
d_content <- kobohr_kpi_get_asset_uid(import_url, #del paso anterior
                                      "tallerrkobo",
                                      "TallerRKobo123")
asset_uid <- d_content$messages$created$uid
# codigo del formulario que aparecera en borradores en KoboToolbox
```

<center><img src="img/kobotoolbox.png" alt="Hex stickers" height="350"></center>

---
<div class="my-header"></div>
## Power BI

Hay varios tipos de interacción posible entre R y Power BI. Vamos a ver 2 interacciones posibles:

- Carga de datos a través de R

- Generación de gráficos con scripts de R

También puede usarse R para hacer queries de consulta y para importar ciertos datos desde el Market

---
<div class="my-header"></div>
## Power BI - Importar datos

1)
<center><img src="img/PowerBI1.png" alt="Hex stickers" height="450"></center>

---
<div class="my-header"></div>
## Power BI - Importar datos

2)
<center><img src="img/PowerBI2.png" alt="Hex stickers" height="450"></center>

---
<div class="my-header"></div>
## Power BI - Importar datos

3)
<center><img src="img/PowerBI3.png" alt="Hex stickers" height="450"></center>

---
<div class="my-header"></div>
## Power BI - Importar datos

4)
<center><img src="img/PowerBI4.png" alt="Hex stickers" height="450"></center>

---
<div class="my-header"></div>
## Power BI - Graficos de R en Power BI

Generar un grafico de R en Power BI

<center><img src="img/PowerBI5.png" alt="Hex stickers" height="450"></center>

---
<div class="my-header"></div>
## Power BI - Graficos de R en Power BI

Puedo agregar sliders para poder interactuar y filtrar con el grafico

Los gráficos generados en R se actualizaran automáticamente

<center><img src="img/PowerBI6.png" height="400"></center>

---
<div class="my-header"></div>
## Resumen

Para tener un abanico mayor de opciones, conecta a R con otras herramientas!

<center><img src="img/starwars-teamwork.png" alt="Hex stickers" height="450"></center>

<p style="color: gray; font-size:15px"> Ilustración de <NAME>
</p>

---
<div class="my-header"></div>

## Licencia y material usado

Licencia: [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/deed.es_ES).


<file_sep>---
title: "Manipulacion II"
date: "`r Sys.Date()`"
output:
  xaringan::moon_reader:
    css: ["default", "default-fonts", "custom.css"]
    mathjax: "https://cdn.bootcss.com/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_HTMLorMML"
    lib_dir: libs
    seal: false
    nature:
      ratio: 13:9
      highlightStyle: github
      highlightLines: true
      countIncrementalSlides: false
---

```{r setup, include=FALSE}
options(htmltools.dir.version = FALSE)
knitr::opts_chunk$set(fig.height=5) 
library(kableExtra)
library(ggplot2)
library(readr)
library(here)
library(dplyr)
library(colorspace)
paleta <- rainbow_hcl(10)
print_it_rainbow <- function(palabra, paleta) {
  i_font = 1
  for (char in palabra) {
    if (char != " ") {
      cat(paste0("<font style='color:", paleta[i_font] , "'>",char,"</font>"))
      i_font = i_font %% length(paleta) + 1
    } else {
      cat(" ")
    }
  }
}
```

background-color: #272822

<br>
<br>
<br>
<br>
<br>
<br>


```{r, results='asis', echo=FALSE}
cat("<h1 style='color:white'> <center> R para contextos humanitarios de emergencia")
cat("</center></h1> \n")
cat("## <center>")
palabra = unlist(strsplit("Manipulación de datos II", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center> \n")
cat("### <center>")
fecha = as.character(Sys.Date())
palabra = unlist(strsplit("<NAME>", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center>")
```
---

background-color: #272822

<br>
<br>
<br>
<br>
<br>
<br>


```{r, results='asis', echo=FALSE}
cat("<h1 style='color:white'> <center> Abrir el archivo 05-EJ-manipulacionII.Rmd")
cat("</center></h1> \n")
cat("## <center>")
palabra = unlist(strsplit("Para ir haciendo los EJ", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center> \n")
```

---
<div class="my-header"></div>
## Datos ordenados

El entorno tidyverse esta basado en el concepto de datos ordenados

Un dataset está ordenado si:
- Cada variable está en una columna
- Cada observacion está una fila
- Cada valor se encuentra en una celda


<center><img src="img/tidy.png"  height="300"></center>


---
<div class="my-header"></div>
## Transformando a tidy

Veamos la siguiente tabla de la cantidad total de los pedidos de asilo recibidas.  Las variables involucradas son país, año y cantidad de cados. Está ordenada la tabla? 

```{r, echo = FALSE, message=FALSE}
library(tidyverse)
pedidos_asilo <- tribble(
  ~Pais, ~"2011", ~"2012", ~"2013",
      "ARG",    7000,    6900,    7000,
      "PER",    5800,    6000,    6200,
      "TUR",   15000,   14000,   13000
)
contaminacion <- tribble(
       ~ciudad, ~tamanio_particula, ~cantidad,
  "Cusco", "p grande",      23,
  "Cusco", "p pequenia",      14,
    "London", "p grande",      22,
    "London", "p pequenia",      16,
   "Beijing", "p grande",     121,
   "Beijing", "p pequenia",     121
)
knitr::kable(pedidos_asilo, "html")
```

Me gustaría que estuviera así:

```{r, echo = FALSE}
pedidos_asilo_tidy <- pivot_longer(pedidos_asilo,cols = c(2,3,4),names_to = "Anio", values_to = "cantidad")
knitr::kable(pedidos_asilo_tidy)
```

---

<div class="my-header"></div>

## Transformando a tidy: `pivot_longer`

La funcion `pivot_longer` se encarga de esto!

Pasa de una tabla ancha a una table mas larga.

Hay que idenfificar cuáles son las columnas que dejarán de ser fila y pasarán a ser los valores de una nueva columna. Estas columnas serán la llave de la transformación

.pull-left[
```{r, echo=FALSE}
kbl(pedidos_asilo) 
```

]

.pull-right[
```{r, echo=FALSE}
kbl(pedidos_asilo_tidy) %>%
  column_spec(2, background = "yellow")
```

]

---
<div class="my-header"></div>
## Transformando a tidy: `pivot_longer`

```{r}
pedidos_asilo_tidy <- pivot_longer(pedidos_asilo, 
                                   cols = c(2, 3, 4), 
                                   names_to = "Anio", 
                                   values_to = "cantidad")
```

- data corresponde a la tabla a modificar
- cols corresponde a las **columnas a ser pivoteadas**
- names_to corresponde al **nombre** que agrupará a las columnas de interés
- values_to corresponde al **nombre** de la variable que agrupará a los valores

```{r, echo=FALSE}
kbl(pedidos_asilo_tidy) %>%
  column_spec(2, background = "yellow")
```

---
<div class="my-header"></div>
## `pivot_longer`: idea del funcionamiento

desde el **formato ancho** al **formato largo**

<center><img src="img/ancho-a-largo.png" height="450"></center>

<p style="color: gray; font-size:15px"> Imagen del curso "R para Clima" - <NAME> y <NAME> <br>
https://eliocamp.github.io/r-clima/index.html
</p>

---
<div class="my-header"></div>
## Transformando a tidy: `pivot_wider`

Por otro lado, tenemos 

```{r, echo = FALSE}
knitr::kable(contaminacion)
```

---
<div class="my-header"></div>
## Transformando a tidy: `pivot_wider`

Que tampoco esta ordenada, pero en el sentido contrario (es larga en este caso !). Me gustaría que estuviera así:

```{r, echo = FALSE}
contaminacion_tidy <- pivot_wider(contaminacion,names_from = tamanio_particula,values_from = cantidad)
knitr::kable(contaminacion_tidy)
```

Debo identificar a las dos columnas que esconden más de una variable. En este caso, tamanio_particula contiene los nombres de las futuras variables (names_from), y cantidad esconde el nombre de la segunda variable

```{r}
contaminacion_tidy <- pivot_wider(contaminacion, 
                                  names_from = tamanio_particula, 
                                  values_from = cantidad)
```

me devuelve el resultado deseado

---
<div class="my-header"></div>
## Tu turno 1: `pivot_wider`

Covertir paises_largo al formato ordenado (variables como columnas)

```{r, message = FALSE}
paises_largo <- read_csv("data/paises_largo.csv")
knitr::kable(paises_largo[1:6,])
```


---
<div class="my-header"></div>
## Combinando tablas de datos!

Hasta ahora todo lo que usamos de `dplyr` involucra trabajar y modificar con una sola tabla a la vez

En ese caso, tenemos que unir estas tablas. a partir de una o más variables en común o keys.

**En Excel**: 

“VLOOKUP” o “BUSCARV”

**En R:**

familia de funciones *_join(). 

Hay una función cada tipo de unión que queramos hacer.

---
<div class="my-header"></div>

## familia `join`

<center><img src="img/join.png" height="180"></center>

- `full_join():` devuelve todas las filas y todas las columnas de ambas tablas `x` e `y`. Cuando no coinciden los elementos, devuelve `NA` (dato faltante). Esto significa que no se pierden filas de ninguna de las dos tablas aún cuando no hay coincidencia. 

- `left_join():` devuelve todas las filas de `x` y todas las columnas de `x` e `y`. Las filas en `x` que no tengan coincidencia con `y` tendrán `NA` en las nuevas columnas. Si hay múltiples coincidencias entre `x` e `y`, devuelve todas las coincidencias posibles.


- `inner_join():` devuelve todas las filas de `x` donde hay coincidencias con `y` y todas las columnas de `x` e `y`. Si hay múltiples coincidencias entre `x` e `y`, entonces devuelve todas las coincidencias. Eliminará las filas (observaciones) que no coincidan en ambas tablas.

---
<div class="my-header"></div>

## full_join

<center><img src="img/join_family.png" height="450"></center>

<p style="color: gray; font-size:15px"> Imagen del curso "R para Clima" - <NAME> y <NAME> <br>
https://eliocamp.github.io/r-clima/index.html
</p>

---
<div class="my-header"></div>

## Tu turno 2: para practicar después

Unir la tabla de países obtenida en Tu turno 1 con la tabla de decisiones de asilo  (decisiones_asilo_peru). Utiliza como llave a las columnas con el nombre del país y el año.

---
<div class="my-header"></div>

## Licencia y material usado

Licencia: [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/deed.es_ES).

Este material está inspirado y utiliza explicaciones de:

- [R para Clima](https://eliocamp.github.io/r-clima/) de <NAME> y <NAME>itelli

- [Master the Tidyverse](https://github.com/rstudio-education/master-the-tidyverse-instructors) de <NAME>
<file_sep>---
title: "R y RStudio"
date: "`r Sys.Date()`"
output:
  xaringan::moon_reader:
    mathjax: "https://cdn.bootcss.com/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_HTMLorMML"
    lib_dir: libs
    seal: false
    nature:
      highlightStyle: github
      highlightLines: true
      countIncrementalSlides: false
---

```{r setup, include=FALSE}
options(htmltools.dir.version = FALSE)
#pagedown::chrome_print("C:\\Users\\violeta\\Documents\\AdvStats\\EM_algo.html")
knitr::opts_chunk$set(fig.height=5) 
library(ggplot2)
library(readr)
library(here)
library(dplyr)
library(colorspace)
paleta <- rainbow_hcl(10)
print_it_rainbow <- function(palabra, paleta) {
  i_font = 1
  for (char in palabra) {
    if (char != " ") {
      cat(paste0("<font style='color:", paleta[i_font] , "'>",char,"</font>"))
      i_font = i_font %% length(paleta) + 1
    } else {
      cat(" ")
    }
  }
}
```

background-color: #272822

<br>
<br>
<br>
<br>
<br>
<br>


```{r, results='asis', echo=FALSE}
cat("# <center>")
palabra = unlist(strsplit("R y RStudio", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center> \n")
cat("## <center>")
palabra = unlist(strsplit("Descarga e instalación", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center> \n")
cat("### <center>")
fecha = as.character(Sys.Date())
palabra = unlist(strsplit("18-11-2020", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center>")
```

---

# Objetivo

- Instalar el lenguaje de programación R 
- Instalar RStudio (una interfaz gráfica para usar R más cómodamente) 

Sistema operativo: Windows 10

# Tareas

- Descargar R
- Instalar R 
- Descargar RStudio
- Instalar RStudio 


---

# Descargar R


## https://cran.r-project.org/bin/windows/base/

---

background-color: #272822

<br>
<br>
<br>
<br>
<br>
<br>


```{r, results='asis', echo=FALSE}
cat("# <center>")
palabra = unlist(strsplit("Instalar R", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center> \n")
```


---

# Descargar RStudio



### https://rstudio.com/products/rstudio/download/#download

---


background-color: #272822

<br>
<br>
<br>
<br>
<br>
<br>


```{r, results='asis', echo=FALSE}
cat("# <center>")
palabra = unlist(strsplit("Instalar RStudio", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center> \n")
```

---



background-color: #272822

<br>
<br>
<br>
<br>
<br>
<br>


```{r, results='asis', echo=FALSE}
cat("# <center>")
palabra = unlist(strsplit("Listo!", split = ""))
cat(print_it_rainbow(palabra, paleta))
cat("</center> \n")
```

<file_sep>---
title: "Reporte Final"
output:
  word_document:
    toc: TRUE
  html_document:
    toc: TRUE
params:
  pais: HTI
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```

## Importo datos

En esta seccion explicamos nuestros datos

```{r importar, echo=FALSE, message=FALSE, warning=FALSE}
library(tidyverse)
decisiones <- read_csv("data/decisiones_asilo_peru.csv")
```

```{r message=FALSE, warning=FALSE}
library(knitr)
kable(decisiones[1:6, 1:3])
```


## Filtro

En esta seccion explicamos el proceso de manipulacion

```{r}
decisiones_filtrado <- decisiones %>% 
  filter(`Codigo Pais Origen` == params$pais)
```

## Grafico

Por ultimo aqui hacemos nuestro grafico

```{r}
decisiones_filtrado %>% 
  ggplot(aes(Anio, Reconocidas)) +
  geom_line(color = "red", size = 1.5) +
  labs(title = "Pedidos de asilo reconocidos por Peru")
```

<file_sep>---
title: "Capacitación en R"
author: "<NAME>"
date: "25/11/2019"
output: 
  ioslides_presentation:
    logo: assets/img/lama_gtrm.png
    css: test.css
    transition: slower
    widescreen: true
    smaller: true
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```

## Bienvenidos

<br>

**Bienvenidos a nuestra capacitación en R para manejo de información!**
<br>
<br>


Vamos a pasar este día aprendiendo sobre la herramienta R y todas sus funcionalidades para nuestro trabajo :)
<br>
<br>


-- Equipo GTRM Perú


## Qué es R?

<br>
1. **Lenguaje de programación** con enfoque al análisis estadístico

<br>
2. Uno de los **lenguajes estadísticos** más utilizados en investigación cientifica

<br>
3. Una de las herramientas más importantes para **data science**



## Organizaciones que utilizan R

 ![](assets/img/microsoft_logo.png){ width=20% }      ![](assets/img/google_logo.jpg){ width=20% }    
 ![](assets/img/airbnb_logo.png){ width=20% }   ![](assets/img/twitter_logo.png){ width=5% }     
 ![](assets/img/facebook_logo.png){ width=5% }     ![](assets/img/uber_logo.png){ width=20% } 
 
 


## R en los sectores humanitarios y de desarrollo

**Taller en Amman (5-6 Noviembre, 2018)**  ![](assets/img/rworkshop.png){ width=50% }
 
 
**Visión para el futuro:**

R, cómo lenguaje y a través de las herramientas/paquetes que lo constituyen, es la opción de preferencia de nuestra comunidad porqué permite:

- Abarcar las brechas con buenas prácticas desde las industria de data science y de la academia;

- Minimizar las dependencias de un único proveedor, licencia u organización;

- Construir y expander los conocimientos entre organizaciones diferentes.


<font size="2">Para más información: https://humanitarian-user-group.github.io/post/first-meeting/</font>







## Porqué utilizar R en lugar de Excel?

<br>

- **Para los estadísticos:** Fuentes de datos demasiado grandes para Excel, "Big Data"

<br>

- **Más común en IM:** Ganar tiempo haciendo tareas repetitivas

<br>

- **Para ambos:** Asegurar trabajo reproducible

<br>

Y también: 100% gratuito y open source!


## Desde "clic" hacia "script" (1)

Un flujo de trabajo tradicional es el siguiente:
<br>

1. Ingresar en Kobo, ir al formulario, descargar los datos; ![](assets/img/kobo_logo.jpg){ width=7% }

<br>

2. Abrir el archivo en Excel, transformar datos manualmente (copiar, pegar, tablas dinámicas, etc) y preparar gráficos ![](assets/img/Microsoft_Excel_2013_logo.svg.png){ width=5% }

3. Exportar datos para preparar mapas en GIS;![](assets/img/qgis_logo.png){ width=7% }

4. Abrir Word para añadir el narrativo, copiar y pegar gráficos/mapas; ![](assets/img/Microsoft_Word_logo.png){ width=6% }

5. O: Juntar todo en un documento con Adobe Illustrator/InDesign. ![](assets/img/illustrator_logo.jpg){ width=5% }
<br>




## Desde "clic" hacia "script" (2)

Este flujo de trabajo **no** es lo más efectivo, sobre todo si el dataset utilizado cambia en continuación (por ejemplo con una encuesta Kobo):

- Los datos son manipulados haciendo clic manualmente;
- Los datos son exportados desde una herramienta hacia una otra (Excel, GIS, Word), utilizando varios formatos;
- Los resultados (gráficos, tablas), con copiados y pegados **manualmente** en el formato de publicación final.

**Este proceso es laborioso y deja un gran potencial para errores!**

![](assets/img/exhausted.png){ width=20% }



## Desde "clic" hacia "script" (3)

Unas preguntas y problemas típicos revisando un análisis:

- Cuales cálculos se hicieron para llegar a las cifras? 

- Tomaron en consideración x, y, z para el análisis?

- Se identificaron outliers?

- Ups! Hay un error / queremos hacer una revisión en los datos! Podemos repetir el análisis? Necesitamos las cifras, gráficos y tablas para el informe / presentación en media hora!

- Como co-autor o lector de un informe, quiero ver el proceso de investigación (como llegamos a una conclusión) y no solo el producto final con cifras/tablas agregadas.


## Desde "clic" hacia "script" (4)

Si todos los pasos de manejo de datos, análisis, visualización son hechos a través de una seria de comandos **escritos en script**, en lugar de **dozenas de clics**:

- Una vez identificado un error en los datos, o utilizando diferentes datasets, solo se necesita hacer cambios en el script y el informe se actualizará automaticamente;

- El manejo de datos deviene *de facto* llenamiente documentado (no se necesitan cambios manuales en Excel);

- El análisis es documentado y listo para una revisión colaborativa;

<br>
<br>
<br>
<br>
<br>
<br>

<font size="2">Estas diapositivas son adaptadas desde la presentación de Edouard Legoupil: http://edouard-legoupil.github.io/humanitaRian-data-science/</font>




# Primeros pasos en R

- La interfaz visual de RStudio
- Los paquetes de R
- Elementos básicos de R (paquete Swirl)
  - Primeros pasos
  - Vectores
  - Matrices y marcos de datos

## Empezamos!

Una distinción importante:

<br>

- **R** es el lenguaje de programación
  - Instalar **R**: https://cran.r-project.org/bin/windows/base/ 

<br>

- **RStudio** es la interfaz para utilizar R
  - Instalar **RStudio**: https://www.rstudio.com/products/rstudio/download/ 

  
## Interfaz visual de RStudio


![](assets/img/rstudio2.png){ width=100% }

  

## Los paquetes de R

<br>
- R tiene una variedad enorme de usos: Si los incluyera todos, sería demasiado pesado!

<br>
- La versión base de R tiene varios comandos básicos;


<br>
-	Los paquetes son **extensiones** de las funcionalidades básicas de R para usos específicos;

<br>
-	Paquetes oficiales están en la plataforma CRAN;
__
<br>
-	Paquetes nuevos/especificos se pueden también descargar desde otras fuentes.


## Elementos básicos de R: Ejercicios individuales

En la Console, insertar los comandos siguientes (INGRESAR después cada comando):
<br>

```{r}

- install.packages("swirl")

- library("swirl")

- select_language("spanish")

- swirl()

```

Después, seleccionar "1: R Programming" y vamos a seguir los módulos 1, 4 y 7. 


## Elementos básicos de R

- Cómo interactuar con R

- Cálculos: 5 + 7

- Operatores: +, -, *, /, ^, sqrt()

- Crear variable: x <- 5+7

- Vectores: c(1, 2, 3)

- Buscar ayuda: ?función


## Vectores

- Tipos de vectores:

  - Numérico: 1, 2.5, 1000
  
  - Lógico: TRUE, FALSE
  
  - Carácter: "hola"
  
  - Otros
  
- Operadores lógicos: <, >, <=, >=, ==, !=, |, &

- Función paste()

## Matrices

- Datos "rectangulares": Como hojas de cálculo Excel
<br>

- Matrix: Mismo tipos de vectores

- Marco de datos: Diversos tipos de vectores (más común para nosotros!)
<br>

- Dimensiones: dim(x) Como las filas y columnas

- Largo: length(x)

- Tipo: class(x)

- Combinar columnas: cbind()

- Combinar filas: rbind()

- Nuevas matrices: matrix()

- Nuevos marcos de datos: data.frame()

- Cambiar nombre a columnas: colnames()

