RMarkdown
es un lenguaje markdown pero integrado a R. Para iniciar un documento RMarkdown, van al menú archivo, nuevo archivo, y eligen R Markdown. Allí, le ponen el título al documento, y eligen una de las tres posibles salidas: HTML, PDF o Word. Para este primer ejemplo, elijan HTML.
Para PDF, hay que tener instalado en la computadora el programa LaTex (https://www.latex-project.org/), tambien de fuente abierta, aunque ahora menos usado que hace unos años. Para Word, habrá que tener instalado un Word, o LibreOffice, y el formato se lo datos a través de un archivo que ponemos como template en el preámbulo… Qué es el preámbulo? Es el TOML inicial…
Los lenguajes markdown son formatos para escribir texto, con algunos marcados básicas que le dan formato. Por ejemplo, para hacer una negrita, hay que encerrar el texto entre dos asteriscos (** texto **), o para hacer un texto en itálica, hay que encerrar el texto entre guiones bajos (_ texto en italica _ ). En esta cheatsheet hay más codificaciones markdown https://www.markdownguide.org/basic-syntax/
La gracia del RMarkdown es que se puede escribir un documento, y a ese documento insertarle código de R. Esto puede hacerse de dos maneras, o como bloque de código (block chunk, entre 3 comillas simples para la izquierda, y en la primera con “{r}” entre llaves), o como texto en la línea respectiva (con una comilla simple a la izquierda, la letra “r” y cerramos con otra comilla izquierda simple).
Y cómo lo que se inserta es código, al que se le vinculan archivos o bases de dato, con solo cambiar la base, se actualiza el documento. Por ejemplo, el trabajo que hace Natsumi Shakoda con la brecha de ingresos por género con cada nueva IPH en https://rpubs.com/natsumi_shokida
Para compilar (“knitear”) el documento, debemos clickear en el boton Knit
de abajo de la pestaña del documento (al lado de la rueda de propiedades), poniendole el nombre.
Todo lo que quieran saber, está probablemente en este libro: https://bookdown.org/yihui/rmarkdown/
Abramos un nuevo archivo R Markdown, y pongamosle por ejemplo “Informe Final del curso” y ahí podemos poner lo que fuimos trabajando estas clases
En esta clase comenzamos viendo cómo se cargaban los paquetes y trabajamos con el dataset de mortalidad
del gobierno de la Ciudad de Buenos Aires. Hicimos un análisis, agregamos una columna con ubicación, y luego gráficamos.
library(tidyverse)
mortalidad <- read_csv2("https://raw.githubusercontent.com/Demzayat/derecho_y_datos/master/Clase1/mortalidad.csv")
ggplot(data = mortalidad, aes(x= Comuna, y = `2018`))+
geom_col()+
geom_text(aes(label = `2018`), nudge_y = 0.4)
#agregamos columna con ubicacion
mortalidad <- mortalidad %>%
mutate(Comuna = as.factor(Comuna),
ubicacion = c("Sur", "Norte", "Sur", "Sur", "Sur", "Norte", "Sur", "Sur", "Sur", "Norte", "Norte", "Norte", "Norte", "Norte", "Norte")
)
ggplot(data = mortalidad, aes(x= Comuna, y = `2018`))+
geom_col(aes(fill= ubicacion))+
geom_text(aes(label = `2018`), nudge_y = 0.4)
Ahora que sabemos hacer otros gráficos, podríamos haber pensado uno que señale la evolución por comuna, según la ubicación:
#ordeno los datos de modo tidy
mortalidad_tidy <- mortalidad %>%
pivot_longer(cols = c(2:10), names_to = "Anio", values_to = "tasa")
ggplot(data = mortalidad_tidy)+
geom_path(aes(x = Anio, y = tasa, color = Comuna, group = Comuna), size = 1)+
facet_wrap(~ubicacion)+
theme_bw()
En la segunda clase aprendimos los verbos del tidyverse: select
, mutate
, group_by
, summarize
, filter
, arrange
, recode
, etc… Usamos de base de datos la Encuesta Anual de Hogares del Gobierno de la Ciudad, y calculamos cuantos migrantes había en la Ciudad, por comuna.
library (sf)
#carga de la base
eph <- read_csv2("https://raw.githubusercontent.com/Demzayat/derecho_y_datos/master/Clase2/eah2018_usuarios_ind.txt")
#recodificacion y analisis
eph_chico <- eph %>%
select(comuna, edad, sexo, estado, ingtot_2, ipcfb_2,
nivel, aesc, m1_2, m3_anio, tipcob2_2, fexp) %>%
mutate(sexo = recode(sexo,
`1` = "Varon",
`2` = "Mujer" ))
xsexo <- eph_chico %>%
group_by(sexo) %>%
summarise(total = sum(fexp),
muestra = n())
xsexo
## # A tibble: 2 x 3
## sexo total muestra
## <chr> <dbl> <int>
## 1 Mujer 1630072 7794
## 2 Varon 1437918 6703
eph_chico <- eph_chico %>%
mutate(lugar = recode(m1_2,
`1` = "CABA",
`2` = "PBA sin GBA",
`3` = "otra Provincia",
`4` = "Pais no limitrofe",
`5` = "Pais limitrofe y Peru",
`6` = "GBA",
`97` = "otro PBA",
`99` = "NA"))
xlugar <- eph_chico %>%
group_by(lugar) %>%
summarize(total = sum(fexp))
extranjero <- c("Pais no limitrofe", "Pais limitrofe y Peru")
eph_chico <- eph_chico %>%
mutate(migrante = case_when(lugar %in% extranjero ~ "Extranjero",
TRUE ~ "Nacional"))
xmigrante <- eph_chico %>%
group_by( comuna, migrante) %>%
summarize (total = sum(fexp)) %>%
mutate(porcentaje = round(total / sum(total)*100,2)) %>%
filter(migrante == "Extranjero")
#carga del shapefile de Comunas
comunas <- read_sf("https://raw.githubusercontent.com/Demzayat/derecho_y_datos/master/Clase2/CABA_comunas.geojson")
comunas <- comunas %>%
mutate(comunas = as.numeric(comunas)) %>%
left_join(y = xmigrante, by = c("comunas" = "comuna"))
ggplot()+
geom_sf(data = comunas, aes(fill = porcentaje))+
scale_fill_viridis_c()+
labs(fill = "Porc", title = "Cantidad de Migrantes x Comuna")+
geom_sf_text(aes(label = comunas), data = comunas)+
theme_void()
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may
## not give correct results for longitude/latitude data
Debemos admitir que ver que el mayor porcentaje de migrantes en la Ciudad esté en la Comuna 1 nos sorprendió un poco…
En la tercera clase vimos gráficos y ggplot. Analizamos el dataset Iris
y luego seguimos con la EAH para analizar los ingresos…
paleta <- c("green1", "hotpink1", "mediumorchid4")
ggplot(data = iris)+
geom_point(aes(x= Sepal.Length, y = Sepal.Width,
color = Species,
size = Petal.Width))+
scale_color_manual(values = paleta)
ggplot(data = iris)+
geom_violin(aes(x = Species, y = Petal.Length,
color = Species))
ggplot(data = iris)+
geom_point(aes(x= Sepal.Length, y = Sepal.Width,
color = Species))+
scale_color_manual(values = paleta)+
facet_wrap(~Species)
# EAH---------------
options(scipen = 999)
ggplot(data = eph_chico)+
geom_point(aes(x = edad, y = ingtot_2, color = sexo),
alpha = 0.5, size = 0.5)
ggplot(data = eph_chico)+
geom_histogram(aes(x= edad, fill = sexo), position = "dodge")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
ggplot(data = eph_chico)+
geom_freqpoly(aes(x= edad, color = sexo), position = "dodge", binwidth = 5)
xingresos <- eph_chico %>%
group_by(cut(edad, breaks = c(0,14,20, 25, 35, 50, 65, 100)), sexo) %>%
summarize(prom = weighted.mean(ingtot_2, fexp)) %>%
rename(grupo = 1)
## Warning: Factor `cut(edad, breaks = c(0, 14, 20, 25, 35, 50, 65, 100))`
## contains implicit NA, consider using `forcats::fct_explicit_na`
ggplot(data = xingresos)+
geom_col(aes(x = grupo, y = prom, fill = sexo), position = "fill")+
theme_minimal()
## Warning: Removed 2 rows containing missing values (geom_col).
Y terminamos con un gif de los datos de https://www.gapminder.org/
library(gganimate)
gapminder <- readr::read_csv("https://raw.githubusercontent.com/cienciadedatos/datos-de-miercoles/master/datos/2019/2019-04-24/gapminder_es.csv")
g <- ggplot(data = gapminder, aes(x = pib_per_capita, y = esperanza_de_vida))+
geom_point(aes(size = poblacion, color = continente), alpha = 0.8)+
labs(x = "PBI per capita", y = "Esperanza de vida",
title = "Evolucion de la esperanza de vida y el PBI per capita")+
scale_size(range = c(2,12))+
scale_x_log10()+
facet_wrap(~continente)+
theme_bw()
p <- g +
transition_states(anio, transition_length = 1, state_length = 1)+
labs(subtitle = "Ano: {closest_state}")
anim_save(filename = "gapminder1.gif",
animation = animate (p, height = 500, width = 1000))
En la clase 4 vimos mapas.
#empezamos desde aca porque varias compus no podian cargar el censo
migrantes <- read_csv("https://github.com/Demzayat/derecho_y_datos/raw/master/Clase%204/migrantes.csv")
## Parsed with column specification:
## cols(
## CO_FRAC_RA = col_character(),
## Paraguay = col_double(),
## Bolivia = col_double(),
## Brasil = col_double(),
## Peru = col_double(),
## Colombia = col_double()
## )
#cargamos los radios censales
caba <- read_sf("http://cdn.buenosaires.gob.ar/datosabiertos/datasets/informacion-censal-por-radio/caba_radios_censales.geojson")
#unimos los radios censales con la info
migrantes_geo <- caba %>%
left_join(migrantes, by = c("RADIO_ID" = "CO_FRAC_RA"))
#cargo los barrios
barrios <- read_sf("http://cdn.buenosaires.gob.ar/datosabiertos/datasets/barrios/barrios.geojson")
# Paraguayos
ggplot()+
geom_sf(data = migrantes_geo, aes(fill = Paraguay), color = "NA")+
scale_fill_viridis_c()+
geom_sf(data = barrios, fill = NA, color = "white")+
theme_void()+
geom_sf_text(aes(label = barrio), data = barrios, size = 1.5, color = "white")+
labs(title = "Paraguayos en la CABA")
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may
## not give correct results for longitude/latitude data
# Peruanos
ggplot()+
geom_sf(data = migrantes_geo, aes(fill = Peru), color = "NA")+
scale_fill_viridis_c()+
geom_sf(data = barrios, fill = NA, color = "white")+
theme_void()+
geom_sf_text(aes(label = barrio), data = barrios, size = 1.5, color = "white")+
labs(title = "Peruanxs en la CABA")
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may
## not give correct results for longitude/latitude data
Y despues uno interactivo
library(RColorBrewer)
library(leaflet)
pal <- colorBin("RdYlGn", reverse = TRUE,
domain = migrantes_geo$Peru,
bins = quantile(migrantes_geo$Peru, na.rm = T))
peru <- leaflet() %>%
addTiles() %>%
addPolygons(data = migrantes_geo,
fillColor = ~pal (Peru),
stroke = FALSE,
fillOpacity = 1,
label = ~paste0(RADIO_ID, ": ", Peru))
#y la guardo para incluir en un iframe
htmlwidgets::saveWidget(peru, file = "peru.html")
Este documento lo podemos subir a la web. Para ello, simplemente, clickeamos en “Publish” y creamos una cuenta en Rpubs si no tenemos.
Se pueden instalar otros paquetes y hacer otros tipos de documentos… Por ejemplo,
hacer presentaciones tipo power point online con Xaringan (https://bookdown.org/yihui/rmarkdown/xaringan.html),
o blogs con “blogdown” (https://bookdown.org/yihui/blogdown/),
o incluso libros (https://bookdown.org/yihui/bookdown/)
Luego, también webs interactivas con Shiny (https://mastering-shiny.org/).
Es inagotable. Está todo por hacer! Solo hay que ponerse a codear!!!