Estructuración de datos: Diseño + Semántica

Estructuración de datos: Diseño + Semántica

Introducción

En este post se presenta brevemente la diferencia entre datos estructurados (tidy data según Wickham, 2014) vs los datos no estructurados. Es común que las principales fuentes de información presenten datos en arreglos que son visualmente agradables, no obstante, este tipo de presentación no es la adecuada para el análisis de datos por parte de los verdaderos y, algunas veces autodenominados, científicos de datos. Se trata de los datos no estructurados.

Para una referencia más exhaustiva véase el excelente trabajo de Hadley Wickham llamado Tidy Data y publicado en el Journal of Statistical Software.

En este post voy a resumir un poco el tema de los datos no estructurados, qué son datos estructurados y cómo podemos pasar del primero al segundo usando una de las mejores herramientas de trabajo para el análisis estadístico, exacto! Me refiero a esa misma que están pensado: R!

Datos estructurados

Bases de datos estructuradas, o simplemente datos estructurados, proporcionan una forma estandarizada de relacionar la estructura de la base (su diseño físico) con su semántica (su significado). La clave para estructurar datos está en comprender:

-Diseño (layout)

-Semántica (significado)

El diseño es simplemente la manera cómo se presentan los datos, es decir, el arreglo rectangular en filas y columnas, ejemplo de esto es:

Tabla 1: Representación típica de datos en arreglo rectangular.
Zona Vendedor A Vendedor B
Zona 1 100 125
Zona 2 115 115
Zona 3 90 105
Tabla 2: La misma tabla anterior, pero con un arreglo distinto.
Vendedor Zona 1 Zona 2 Zona 3
Vendedor A 100 115 90
Vendedor B 125 115 105

Como se puede observar el lector, en la Tabla 1 se presentan 3 variables:

  1. Zona
  2. Vendedor A
  3. Vendedor B

Mientras que en la Tabla 2, se presentan 4 variables:

  1. Vendedor
  2. Zona 1
  3. Zona 2
  4. Zona 3

El lector habrá notado que ambas tablas realmente presentan la misma información, simplemente la Tabla 2 es la transpuesta de la Tabla 1. En ambos casos, lo que se presentó fue sólo el diseño de una base de datos, no obstante, ahora habría que abordar el contenido o semántica de dichos datos para entender cómo deberían lucir esas tablas si estuviesen correctamente estructuradas.

La semántica corresponde al significado de cada elemento del arreglo, la cual da contenido interpretativo a los elementos del arreglo. Retomando la Tabla 1 y Tabla 2, se evidencia que el diseño, en cualquier caso, es correcto, sin embargo, la semántica no es la apropiada. Pero realmente ¿qué es eso de la semántica?, es simplemente el cumplimiento de los siguientes aspectos:

  • Las bases de datos son una colección de valores (cuantitativos o cualitativos).
  • Cada valor pertenece a una variable y a una observación.
  • Una variable contiene todos los valores que miden el mismo atributo por ejemplo: altura, peso, salario, etc.
  • Una observación contiene todos los valores medidos para la misma unidad de todas las variables.

En resumen, la semántica indica que los datos deben estar contenidos en un diseño tal que tenga la siguiente forma:

Figura 1: Esto es semántica!

Figura 1: Esto es semántica!

Diseño + Semántica

Tal como se mencionó al inicio, los datos datos estructurados son aquellos que tienen diseño y semántica correcta, por tanto es hora de poner estos dos componentes juntos y ver cómo deberían lucir los datos presentados en la Tabla 1 y Tabla 2. En este sentido, los datos correctamente estructurados deberían lucir de esta manera:

Tabla 3: Datos estructurados.
Zona Vendedor Venta (kg)
Zona 1 Vendedor A 100
Zona 1 Vendedor B 125
Zona 2 Vendedor A 115
Zona 2 Vendedor B 115
Zona 3 Vendedor A 90
Zona 3 Vendedor B 105

Finalmente, se observa que en realidad sólo se tienen 3 variables:

  1. Zona
  2. Vendedor
  3. Venta

La Tabla 3, es el resultado de aplicar una correcta semántica al diseño que ya teníamos en la Tabla 1 y 2.

Errores comunes y ejemplos

Para resumir podemos decir que los datos estructurados son la combinación de un diseño correcto con una adecuada semántica que nos permiten tener tres entidades: variables, observaciones y valores, es decir:

  • Cada variable forma una columna
  • Cada observación forma una fila
  • Los valores sintetizan la información de cada variable por cada observación

Y así de simple es entender cómo deberían ser los datos estructurados, sólo basta con saber que es una combinación de diseño+semántica que dan lugar a una entidad de tres elementos fundamentales: variables (columnas), observaciones o casos (filas) y valores (mediciones que corresponden a la intersección de cada observación x cada fila).

Errores comunes

En términos generales, existen tres tipos de errores comunes que dan lugar a datos no estructurados (siguiendo la exposición de Wickham)

  1. Encabezados de columnas son valores, no variables (El favorito del Banco Central de Nicaragua - BCN)
  2. Varias variables en una sola columna
  3. Variables arregladas tanto en columnas como en filas

Dado que el primero de los errores comunes es el más común en Nicaragua, principalmente, promovido por el Banco Central de Nicaragua, será en este en que centraré más la exposición de cómo aplicar el binomio diseño+semántica para resolver la forma no estructurada para convertirlo en base de datos estructurada.

Figura 2: Ejemplo del primer error común. Datos sobre remesas internacionales publicados por el BCN.

Figura 2: Ejemplo del primer error común. Datos sobre remesas internacionales publicados por el BCN.

El lector puede corroborar que esta captura de pantalla presentada en la Figura 2 es una extracción íntegra de los datos publicados por el BCN, para dicha comprobación diríjase a este enlace, o vaya al sitio https://www.bcn.gob.ni/, ubique Estadísticas y Estudios, luego, en la sección de Sector Externo, haga clic en Remesas y, finalmente, seleccione la vista html.

Para este ejercicio, no usaremos los datos de la vista html, sino que descargaremos el archivo excel de remesas internacionales, pude descargarlo directamente desde este enlace.

Estructurando datos con R

Ejemplo 1: Remesas

Vamos a poner en práctica la fórmula de diseño + semántica, lo haremos usando R. Una vez ubicado el archivo de remesas en el directorio de trabajo procedemos a ejecutar las siguientes líneas.

library(readxl) # para importrar datos desde excel
library(tidyr)  # para estructuración de datos
library(dplyr)  # para seleccionar variables y filtrar


remesas <- read_excel("1a.2.1.04.xls", sheet = 1, skip = 5)

remesas %>% 
  drop_na(Ene) %>%                    # elimina filas vacías
  select(-Total) %>%                  # removemos la columna de totales
  pivot_longer(cols = Ene:Dic,        # selección de encabezados que deberían ser una sola variable
               names_to = "Mes",      # nombrar destino de la nueva variable creada a partir de los encabezados
               values_to = "Remesas") # nombrar variable que alojará los valores 
## # A tibble: 240 x 3
##    Año   Mes   Remesas
##    <chr> <chr>   <dbl>
##  1 2000  Ene      19.8
##  2 2000  Feb      20.8
##  3 2000  Mar      23.4
##  4 2000  Abr      23.6
##  5 2000  May      24.8
##  6 2000  Jun      25.2
##  7 2000  Jul      26.3
##  8 2000  Ago      27.5
##  9 2000  Sep      29.4
## 10 2000  Oct      29.9
## # … with 230 more rows

En realidad, la estructuración de este tipo de datos no es del todo complicada. Si hacemos un poco de edición al resultado anterior (ese es el que se vería en la consola de R), tendríamos un resultado como el siguiente:

Tabla 4: Datos estructurados.
Año Mes Remesas
2000 Ene 19.8
2000 Feb 20.8
2000 Mar 23.4
2000 Abr 23.6
2000 May 24.8
2000 Jun 25.2
Ejemplo 2: Índice Mensual de Actividad Económica (IMAE)

Para este ejemplo, usaremos el archivo que contiene el IMAE, que por algún motivo inexplicable el BCN no proporciona la versión html, sólo presenta el archivo excel, el cual se puede descargar en este enlace o yendo directamente a la página del BCN, ubicar Estadísticas y Estudios, Sector Real, Producción y, finalmente, Índice mensual de actividad económica (IMAE) referencia 2006. Los datos proporcionados por el BCN lucen así:

Figura 3: Ejemplo del primer error común. Datos IMAE publicados por el BCN.

Figura 3: Ejemplo del primer error común. Datos IMAE publicados por el BCN.

Este archivo contiene información de la evolución mensual de 20 actividades económicas durante el periodo enero 2006 – diciembre 2019.

Este ejemplo supone un poco más de esfuerzo para limpiar, seleccionar y estructurar. En esta ocasión, trabajaremos sólo con los datos del índice, es decir aquellos que están en el rango C6:FO26 de la hoja 2 (IMAE Activ) del archivo excel descargado. Por tanto estas especificaciones se las pasaremos la función read_excel, de manera que el lector verá que hay ligeras diferencias con la importación de remesas. Una vez descargado el archivo procedemos de la siguiente manera:

imae <- read_excel("Cuadros_de_salida_IMAE.xls", sheet = 2, range = "C6:FO26", .name_repair = "minimal")
colnames(imae)[1] <- "Actividad" 

imae %>% 
  pivot_longer(
    cols = -Actividad, # Todas, excepto Actividad, van a ser reestructuradas, todos los meses van en una variable
    names_repair = "minimal", # para que no haya problemas con los nombres duplicados de los meses
    names_to = "Mes",
    values_to = "Indice") %>% 
  mutate(Año = rep(2006:2019, each=12*20)) %>% # la variable Año debe crearse
  select(Actividad, Año, Mes, Indice) # reordeno
## # A tibble: 3,360 x 4
##    Actividad   Año Mes   Indice
##    <chr>     <int> <chr>  <dbl>
##  1 IMAE       2006 Ene    100. 
##  2 IMAE       2006 Feb     92.8
##  3 IMAE       2006 Mar    101. 
##  4 IMAE       2006 Abr     90.4
##  5 IMAE       2006 May     99.5
##  6 IMAE       2006 Jun     99.3
##  7 IMAE       2006 Jul    103. 
##  8 IMAE       2006 Ago    102. 
##  9 IMAE       2006 Sep     95.8
## 10 IMAE       2006 Oct    101. 
## # … with 3,350 more rows

Tal como el BCN proporciona la información, un lector sin experiencia en análisis de datos podría pensar que está ante una tabla que contiene 20 observaciones (filas) de 169 variables (columnas). Pero si el lector ha entendido correctamente el binomio diseño + semántica, se percatará que realmente está ante la presencia de 4 variables (columnas) con 3,360 registros (filas).

Conclusión

La estructuración (limpieza y preperación) de datos es uno de los procesos que demandan gran proporción de tiempo en el análisis de datos. Por ello es relevante entender qué son datos estructurados (tidy data) y familiarizarse con las herramientas que nos facilitan este proceso, en nuestro caso se presentó la función pivot_longer del paquete tidyr de R.

La estructuración de datos es importante, porque proporciona un estándar para relacionar la formad de los datos con su contenido informativo, haciendo más fácil el proceso de visualización y análisis de datos.

Para una introducción a la visualización en R véase esta nota introductoria. En tanto que, este enlace proporciona una aplicación interactiva de estructuración y visualizacón del IMAE. Como se observa en esa página, es una aplicación de diseño + semántica para preparar los datos y disponerlos en gráficos que se actualizan al instante, esto es resultado de una correcta estructuración de datos. En otro post mostraré cómo se realizaron esos gráficos.

Referencias y Lecturas sugeridas

  • Wickham, Hadley (2014). Tidy Data. Journal of Statistical Software. Vol 59. Issue 10. Link.
  • Grolemund, Garrett and Wickham, Hadley (XXXX). R for Data Science. O’Reilly. ` Link
  • Peng, Roger D.; Kross, Sean and Anderson, Brooke (2017). Mastering Software Development in R. Link

1 comentario:

  1. En teoria de bases de datos a esto se le llama normalización. Herramientas como powerquery permite la desdinamización de datos, a fin de normalizarlos.

    ResponderEliminar