El Diagrama de Sankey nos ayuda a ordenar flujos de informacion (energia, materiales, usuarios, ciudadanos, etc). Utiliza lineas de diferentes grosores para representar la cantidad de un elemento que fluye a lo largo de etapas de un proceso. En el eje vertical se encuentran entradas y salidas. Para temas migratorios, usualmente a la izquierda se ubica el lugar de origen y a la derecha el lugar de destino. La estructura minima de la base de datos debera componerse de tres columnas (region origen, region destino, conteo).

A continuacion, crearemos un Diagrama Sankey en R, con informacion referencial sobre migracion hacia San Martin y Loreto, tras un proceso de contratacion. Para esto usare una base de datos referencial denominada contr_amaz.

Instalamos los siguientes paquetes: readxl, ggplot2, reshape2, stringr, dplyr, tidyr, plotly

Codigo en R

  1. Crear la tabla de frecuencias
tabla_frecuencias <- table(contr_amaz$Region_eval, contr_amaz$descreg)
  1. Convertir la tabla en un dataframe (estructura de base de datos)
df <- as.data.frame(tabla_frecuencias)
  1. Renombrar las columnas
colnames(df) <- c("Region_origen", "Region_destino", "valor")

Para una mejor visualizacion solo nos quedamos con las Regiones de San Martin y Loreto.

df <- df %>%
  filter(Region_destino %in% c("SAN MARTIN", "LORETO"))
  1. Filtrar aquellos casos donde el valor (la frecuencia) es mayor a cero.
df <- filter(df, valor > 0)
  1. Obtener los nodos unicos. El nodo es un punto donde el flujo comienza, termina o se redistribuye. Cada nodo se conecta con otros a traves de lineas o flujos (llamadas links) que representan la cantidad o proporcion de elementos que se trasladan de un nodo a otro.
nodos <- unique(c(as.character(df$Region_origen), as.character(df$Region_destino)))
nodos <- data.frame(name = nodos)
  1. Asignar indices a los nodos. Los indices permiten definir de forma precisa de que nodo proviene el flujo y hacia donde se dirige.
df$Region_origen_index <- match(df$Region_origen, nodos$name) - 1
df$Region_destino_index <- match(df$Region_destino, nodos$name) - 1 + length(unique(df$Region_origen)) 

7.Crear el grafico

fig <- plot_ly(
  type = "sankey",
  orientation = "h",
  node = list(
    pad = 15,
    thickness = 20,
    line = list(color = "black", width = 0.5),
    label = nodos$name,
    color = rep("blue", nrow(nodos)) 
  ),
  link = list(
    source = df$Region_origen_index,  
    target = df$Region_destino_index,       
    value = df$valor
))
fig

Referencia

Chiung-Ya Tang (2020).How to Use R to Create a Migration Sankey Chart. https://ikm.ucf.edu/wp-content/uploads/2020/02/02.2020-FAIR-How-to-Use-R-to-Create-a-Migration-Sankey-Chart.pdf Sankey Diagram. https://www.data-to-viz.com/graph/sankey.html