¿Qúe puedo incluir en mis documentos?

mapas
tablas
gráficas
galería
Autor/a

Miguel Equihua

Fecha de publicación

Xalapa, Ver., 28 de febrero, 2025

Visita la galería de Quarto

Platiquemos sobre tus intereses

Tu Blog contendrá alguno o varios de los siguientes componentes:

  • Tablas de datos.
  • Gráficas.
  • Mapas.
  • Análisis de datos geográficos.
  • Análisis de series de tiempo.
  • Modelos matemáticos.
  • Análisis estadísticos.
  • Análisis de datos moleculares.
  • Análisis de imágenes.
  • Análisis de audio.
  • Alguna otra cosa que sea de tu interés.

Sugiero hacer una reflexión sobre esto y considerar también de qué manera se obtendrán los datos, procesarán y presentarán.

Algunas ideas para animar la charla

Una cosa que podría ser de tu interés es cosechar datos del Internet. R tiene bibliotecas bbastante competenes para hacerlo, pero te invito primero a pensarlo y precisar la idea, para entonces dedicar alguna sesión del taller en el futuro próximo al tema. Junto con esto va una reflexión sobre datos abiertos que tengo previsto tratar y junto con esto alguunos asuntos sobre derechos de autor y licenciamiento del contenido que tu mismo producirás. En tanto resolvemos esta interés, una cosa más sencilla es trabajar con datos que ya tengo en mi poseción, es decir un Excel o documento semejante en mi máquina.

Datos en Mi equipo

Obviamente, la forma más sencilla de acceder a datos es cuando los tenemos en nuestro propio equipo. En este caso lo usual es que sea alguno de los formatos de Microsoft (Word o Excel) o algún formato genérico como los identificados como txt (texto plano) o csv (valores separados por comas). Puuede haber otras variantes de archivos de datos, como kml, GeoJson, GeoTIFF o shp (shape file) usuales en la gestión de datos geográficos. En Genómica está el formato fasta, que también cuenta con bibliotecas adecuadas en R. Hay una correspondiente variedad de recursos para leer todos estos tipos de datos en R así como para analizarlos y preparar resúmenes, modelos y gráficos de interés. A continuación veremos algunos ejemplos sencillos para tener una idea del proceso general. Para nuestros fines didácticos veamos como leer datos de Excel.

Datos Excel

Tengo este archivo de datos obtenidos por D.L. Cunningham de la Universidad de Cornell. Son registros de masa corporal (g) de pollos de acuerdo con su posición en la jerarquía de picotazos (Tabla 1). Veamos los datos. En el procceso de demostración también te comparto como construir una tabla en formato publicable con la biblioteca flextable. Otra posibilidad para trabajar tablas es la biblioteca DT, más orientada a construir tablas que serán utilizadas en forma interactiva.

Aquí están los datos

muestra el escript:
pacman::p_load(tidyverse, ggplot2, readxl, flextable)

pollos_peso <- read_excel("datos/peck_odr.xls", skip = 2)

pollos_peso |>
  flextable() |> 
  width(j = 2:8, width = 25, unit = "mm") |> 
  set_header_labels("Jerarquía\npor picoteo" = "Posición",
                    gallinero = "Gallinero",
                    peso = "Peso\n(g)")
Tabla 1: Jearquía de Picotazos

Posición

Gallinero 1

Gallinero 2

Gallinero 3

Gallinero 4

Gallinero 5

Gallinero 6

Gallinero 7

1

1,880

1,300

1,600

1,380

1,800

1,000

1,680

2

1,920

1,700

1,830

1,520

1,780

1,740

1,460

3

1,600

1,500

1,520

1,520

1,360

1,520

1,760

4

1,830

1,880

1,820

1,380

2,000

2,000

1,800

Los datos están en un formato poco conveniente para un análisis general. Hagamos algunas operaciones para ponerlos en una forma más adecuada. Básicamente buscaremos cambiar del formato extendido, bueno para visualizar, a uno apilado, más apropiado para el análisis estadístico.

muestra el escript:
pollos_peso <- pollos_peso %>%
                 rename(jerarquia = `Jerarquía\npor picoteo`) %>% 
                 pivot_longer(cols = `Gallinero 1`:`Gallinero 7`, 
                              names_to = "gallinero",
                              values_to = "peso") %>% 
                 mutate(gallinero = factor(gallinero),
                        jerarquia = as.integer(jerarquia)) %>% 
                 arrange(gallinero)

Aprovecharé la nueva disposición para demostrar el uso de la biblioteca DT que define la función datatable y un montón de otros recursos para dar formato tabular y anotar los datos de interés.

muestra el escript:
library(DT)

pollos_peso |> 
  datatable(colnames = c("Posición", "id-Gallinero", "Peso")) 

Otra cosa que puedo hacer ahora es construir un gráfico con los datos utilizando la bibliotea ggplot2, muy capáz de producir gráficos atractivos, incluso como para publicaciones formales. Piensa en qué gráficos te gustaría inlcuir en el blog que estas construyendo. En este enlace encontraras una galería de gráficos que pueden ayudar a estimular tu imaginación e interés.

muestra el escript:
ggplot(pollos_peso, aes(x = jerarquia, y = peso)) +
  geom_point(color = "darkgreen")

¿qué análisis sugieres habría que hacer ahora? ¿Cómo lo presentarías para asegurar que tu proceso analítico sea reproducible?

Un bonito mapa

¿Piensas que hacer mapas impactantes es cosa de una élite entrenada en GIS? Quizás la belleza de muchos mapas que encontramos por ahí justifica pensar así. Pero ahora podemos aspirar a incluir hermosos mapas en nuestros documentos, pues el acceso a recursos abiertos muy competentes de mapeo ha cambiado mucho. En R tenemos ahora bibliotecas como sf, raster, terra, leaflet, ggplot2 y tmap, además del software especializado QGIS,

Con leaflet incluir mapas, incluso interactivos, es bastante sencillo. Veamos como empezar con esta biblioteca con unas breves instrucciones.

muestra el escript:
library(leaflet) # cargar la biblioteca requerida.

basemap <- leaflet() %>%
  # ubicación de la zona de interés y nivel de zoom inicial
  setView(lng = -96.91841, lat = 19.515157, zoom = 20) %>% 

    # Añade proveedor de mapa
  addProviderTiles("OpenStreetMap",
                     
    # Dale un nombre a la capa
    group = "Mapa-OpenStreet"
  )

# despliega el mapa
basemap 

   

Agregar capas, marcadores, etc. Tampoco es muy complicado. Veamos un ejemplo.

   

muestra el escript:
icon.fa <- makeAwesomeIcon(icon = "bicycle", markerColor = "green",
                           library = "fa",
                           iconColor = "red")


map_1 <- basemap %>% 
  addProviderTiles("Esri.WorldImagery", 
                   group = "ESRI") %>% 
  addWMSTiles(
    "http://gaia.inegi.org.mx/NLB/tunnel/wms/wms61?",
    layers = "Ortofotos",
    options = WMSTileOptions(format = "image/png", transparent = TRUE),
    attribution = "Inegi",
    group = "Inegi-ortofoto") %>% 
  addWMSTiles(
    "http://gaia.inegi.org.mx/NLB/tunnel/wms/wms61?",
    layers = "c407",
    options = WMSTileOptions(format = "image/png", transparent = TRUE),
    attribution = "Inegi",
    group = "Humedad del suelo") %>% 
  addAwesomeMarkers(
    lat = 19.5152,
    lng = -96.91841,
    label = "Starting point",
    icon = icon.fa
  ) %>% 

  # Layers control
  addLayersControl(
    baseGroups = c(
      "Mapa-OpenStreet",
      "ESRI",
      "Inegi-ortofoto",
      "Humedad del suelo"
    ),
    options = layersControlOptions(collapsed = FALSE)
  )

map_1

Otra posibilidad para producir documentos con mapas más bien de tipo impreso es la biblioteca tmap podemos hacer cosas como las siguiente. Usaremos los datos contenidos en el paquete spData para ejemplificar. Aquí está un tutorial sobre esta biblioteca.


muestra el escript:
library(tmap)
library(spData)
library(dplyr)

data("urban_agglomerations")

urb_1970_2030 <-  urban_agglomerations %>% 
  filter(year %in% c(1970, 1990, 2010, 2030))

data("World")

tm_shape(World) +
  tm_polygons(fill = "lightblue") +
  tm_crs("auto") +
  tm_shape(urb_1970_2030, ) +
  tm_symbols(fill = "black", 
             col = "white", 
             size = "population_millions", 
             size.legend = tm_legend(title = "Población (millones)")) +
  tm_facets_wrap(by = "year", nrow = 2)

A pesar de lo dicho arriba, con esta biblioteca también se puede incursionar en preparar productos geográficos dinámicos, como sería una animación.

muestra el escript:
urb_anim <- tm_shape(World) + 
  tm_polygons() + 
  tm_crs("auto") +
  tm_shape(urban_agglomerations) + 
  tm_symbols(size = "population_millions", fill = "green") +
  tm_facets_wrap(by = "year", nrow = 1, ncol = 1, free.coords = FALSE) 

anim <- urb_anim %>%     
  tmap_animation(filename = "img/urb_anim.gif", delay = 45, verbose = false);
Creating frames

Creating animation
Animation saved to C:\Users\equih\0 Versiones\ciencia-reproducible\2025\posts\2025-02-28-contenido\img\urb_anim.gif 
muestra el escript:
knitr::include_graphics("img/urb_anim.gif")

Incluir videos

Si por cualquier razón encuentras justificado o importante mostrar algo que está en forma de video, fácilmente puedes agregarlo a tu blog. Tan simple como poner algo semejante a esto directamente en el texto. Es decir no se requiere un trozo de código ( code chunk) sino u código abreviado (shortcode).

{{< video https://youtu.be/wo9vZccmqwc start="10" >}}


Datos mediante captura con el celular

Usar las plataformas móbiles para capturar datos en campo tiene una historia que va a los primeros dispositivos llamados PDA (Personal Digital Assistant) allá por los mediados de 1990. Siguieron los avances que condujeron a la aparición del iPhone® y del sistema Android®. La aparición de Android incentivó el desarrollo que apareció en 2010 como Open Data Kit (ODK). Un poco más adelante un grupo de la Universidad de Harvard desarrolló la aplicación Kobo, basada en el mismo motor de software de ODK, pero con una estrategia de servico distinta. En cualquier caso, para la adquisición de datos en campo la base ODK es sin duda un estandar mundial (Brunette & Hartung, 2023; Hartung et al., 2010). No quiero entrar en los detalles de cada solución, sólo quiero que conozcas de su existencia, para saber más de ellas puedes ir a sus respectivos sitios Web: odkcloud y kobotoolbox. Hay bibliotecas en R para acceder a cualquiera de estas dos soluciones: ruODK, odkr y KoboconnectR, por ejemplo.

Otra opción interesante está en proceso de desarrollo actualmente. La encuentro viable como para satisfacer las neesidades de proyectos muy pequeños en estos momentos. Se trata de los recursos que ofrece la biblioteca surveydown. Aquí te dejo un tutorial de ejemplo sobre como aprovechar este paquete desde Quarto.

Lecturas sugeridas

Brunette, W., & Hartung, C. (2023). The Open Data Kit Project. En T. Madon, A. J. Gadgil, R. Anderson, L. Casaburi, K. Lee, & A. Rezaee (Eds.), Introduction to Development Engineering: A Framework with Applications from the Field (pp. 613-637). Springer International Publishing. https://doi.org/10.1007/978-3-030-86065-3_23
Hartung, C., Lerer, A., Anokwa, Y., Tseng, C., Brunette, W., & Borriello, G. (2010). Open data kit: tools to build information services for developing regions. Proceedings of the 4th ACM/IEEE International Conference on Information and Communication Technologies and Development, 1-12. https://doi.org/10.1145/2369220.2369236