Estructuración de datos: Diseño + Semántica
Jilber Urbina
12/06/2020
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:
Zona | Vendedor A | Vendedor B |
---|---|---|
Zona 1 | 100 | 125 |
Zona 2 | 115 | 115 |
Zona 3 | 90 | 105 |
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:
- Zona
- Vendedor A
- Vendedor B
Mientras que en la Tabla 2, se presentan 4 variables:
- Vendedor
- Zona 1
- Zona 2
- 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:
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:
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:
- Zona
- Vendedor
- 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)
- Encabezados de columnas son valores, no variables (El favorito del Banco Central de Nicaragua - BCN)
- Varias variables en una sola columna
- 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.
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:
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í:
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.
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