Visualizando actualizaciones taxonómicas de aves


 

   Ya salió el 59mo suplemento de la American Ornithologist Society, con 29 cambios (antes American Ornithological Union -el nombre que conserva la página, por comodidad)...
    Este es el primer post en torno a los nombres científicos de las aves, centrado en visualizar lo numeroso de los cambios de cerca de 2,143 especies de aves de Norte y Centroamérica.


    Un nombre científico está compuesto, en su forma "canónica", por género y especie... y siempre debe estar escrito en cursivas, con la primer letra del género acentuada, por ejemplo: Zea mays (maíz)... Estas dos características son muy útiles a la hora de hacer scripts que tengan que ver con especies.
    Las actualizaciones taxonómicas ocurren cuando la autoridad (en este caso, de aves de Norteamérica, AOU) revisa la literatura científica donde se reporta con pruebas -a menudo genéticas, que una "especie" en realidad es otra que ya estaba descrita por otra persona, y toman el nombre del primer registro; hay mucho más complejidad en este tema que no domino. 
   Aquí se presentan dos tipos de visualizaciones: el tradicional gráfico de barras y la gráfica de redes; las dos representan las mismas variables de los mismos datos; el de barras resalta los cambios más grandes, mientras que el de redes acentúa mucho las interacciones múltiples.
   En las gráficas podemos ver actualizaciones muy relevantes por ser mútiples o más numerosas que las otras: como el cambio de 9 especies de Picoides a Dryobates, la integración de cinco géneros (Aphriza, Eurynorhynchus, Limicola, Philomachus y Tryngites) a Calidris, o la separación del género Hemignathus en cuatro géneros. También se incluye una gráfica con todos los géneros invalidados.
  Y, naturalmente, el código.










library(stringr)
library(rvest)
library(dplyr)
library(foreach)
library(tidyr)
library(lubridate)
library(ggplot2)
library(forcats)
library(igraph)
library(dutchmasters)


url <- "http://checklist.aou.org/taxa/archive?page=%s"

foreach(i=2:8, .combine=rbind) %do% {
  sprintf("http://checklist.aou.org/taxa/archive?page=%s", i)  %>%
  read_html() %>% html_nodes("p") %>%
  html_text() %>% as_tibble() %>% separate(value, into = c("date", "move"), sep=": ")
} -> aou_moves

sprintf("http://checklist.aou.org/taxa/archive")  %>%
  read_html() %>% html_nodes("p") %>%
  html_text() %>% as_tibble() %>% separate(value, into = c("date", "move"), sep=": ") %>%
  rbind(., aou_moves) -> aou_moves

aou_moves  %>% mutate(move_year = year(as.Date(date))) %>%
   ggplot(aes(move_year)) + geom_bar(width=.8, fill="cornsilk4") +
  labs(title="Número de cambios por año", subtitle="http://checklist.aou.org/taxa/",
       caption="datamarindo.blogspot.mx, CC-by-SA") +
  xlab("") + ylab("Cuenta")
ggsave("aou_by_year.png")

aou_moves %>% mutate(nuevo=stringr::str_match(move, "(?<=synonym ).*(?= )")) %>%
 mutate(genus=stringr::word(move,1), move_year = year(as.Date(date))) %>%
  group_by(genus, nuevo, move_year) %>% count() %>% group_by(genus) %>%
  mutate(ea=row_number()) %>% mutate(chup=paste(genus, ea)) %>%
  filter(move_year != 2016) %>%
  ggplot(aes(fct_rev(chup), n, fill=factor(move_year), label=nuevo)) +
  geom_bar(stat="identity") + coord_flip() +
  scale_fill_brewer(type = "qual") + geom_text(size=2.7, fontface="italic") +
  labs(fill="year", caption="datamarindo.blogspot.mx, CC-by-SA", title="Cambios taxonómicos") +
  xlab("Nombre invalidado") + ylab("No. de cambios") +
  theme(axis.text.y = element_text(face="italic"))
ggsave("aou_old_new.png", width = 5.3, height = 8)

Comentarios

Entradas más populares de este blog

Construyendo sobre otro post y la conjetura de Collatz y Escher, Gödel, Bach...

El estado de las cosas: QGIS vs ArcGIS

datos socioeconómicos y resultados electorales.