Los datos abiertos son aquellos “datos que pueden ser utilizados, reutilizados y redistribuidos libremente por cualquier persona”1. Para el tema de las políticas públicas, los datos abiertos permiten la participación de actores diferentes a los de la administración gubernamental. Esto se hace aún más importante en situaciones críticas donde se necesita desarrollar soluciones colectivas sobre problemas complejos, como en la actual crisis por el coronavirus.
Una de los problemas centrales que nos toca afrontar en la presente crisis consiste en compatibilizar las medidas de distanciamiento para evitar el contagío con la necesidad de realizar nuestras actividad laborales, educativas y sociales. Aquí el Internet juega un factor clave. Pero para ello es necesario saber de antemano en qué situación nos encontramos al respecto para tomar decisiones acertadas.
Sobre el tema de Internet y TIC, en nuestro país, el 2017 el gobierno lanzó una importante encuesta sobre Tecnologías de Información y Comunicación en Bolivia, la primera de su tipo. Un reporte inicial de los resultados se puede encotrar en el portal de la AGETIC y los datos fueron públicados en repositorio de datos abiertos del Estado.
Sin embargo, a la hora de procesarlos hemos encontrado algunos problemas en el formato del dataset.
Encontramos tres problemas:
Descargamos el dataset en formato CSV del repositorio mencionado y realizamos los siguientes intentos de carga.
read.csv()
en R
Nuestro primer intento con la ya anticuada pero todavía confiable función de read.csv()
en R nos arroja lo siguiente :
Error in read.table(file = file, header = header, sep = sep, quote = quote, :
more columns than column names
Los datos no cargan y nos produce un error que afirma que existen más columnas que nombres de columnas…
read_csv()
de la librería readr
en R
Ahora usamos el mucho más joven read_csv()
que es más rápida y coerciona menos los tipos de datos:
5536 parsing failures.
Más alla de los tipos de datos de las columnas que luego pueden especificarse, esta vez los datos cargan. Parece funcionar, aunque con algunas fallas. Vemoas la cabeza de nuestro dataset:
¡Pesadilla!. Cargó, pero la situación es mucho peor.
Intentemos con Python.
read_csv()
de la libreria pandas
de Python
A pesar de que hay cierta hostilidad entre las comunidades de R y Python, aquí en el Lab nos llevamos bien con ambos.
import pandas as pd
base_p = pd.read_csv("base-5536-bdfinalcorregido.csv")
print(base_p.head(5))
ParserError: Error tokenizing data. C error: Expected 3 fields in line 17, saw 4
No logró cargar y otra vez error…
Inspeccionando el dataset más de cerca, vemos que el problema es que lleva como delimitador un ;
en vez de ,
. Este pequeño detalle nos ha ocasionado los problemas hasta ahora vistos. Usando la función read_delim
en R
o el parametro sep
en pandas
logramos cargar los datos.
Ahora con Python:
base_p = pd.read_csv("base-5536-bdfinalcorregido.csv", sep=";")
print(base_p.head(5))
NUMBOL Tipo P1 P2 ... CodP160 Ponderador5536 Ponderador5033 Nse
0 1 1 18 1 ... 33 1,66029585357411 2,55437533673007 3
1 2 1 21 1 ... 33 1,66029585357411 2,55437533673007 4
2 3 1 54 1 ... 33 1,66029585357411 2,55437533673007 2
3 4 1 30 1 ... 33 1,66029585357411 2,55437533673007 2
4 5 1 16 1 ... 33 1,66029585357411 2,55437533673007 2
[5 rows x 451 columns]
Si bien es cierto que este problema puede ser trivial para algunos, la idea de los datos abiertos es que tengan la mayor accesibilidad posible y puedan ser inmediatamente utilizados sin mayor problema de acceso. Y para eso deben ser validos, segun estandares y especificaciones.
Más allá de su solución via parametros adicionales en el código, el problema central tiene que ver con que se ha publicado un CSV no valido. Subiendo este dataset a la herramienta de validación CSVlint del Open Data Institute, confirmamos esta situación:
Ya lo tenemos cargado. Ahora vamos a analizarlo, ¿qué podría salir mal ahora? Exploremos.
Veamos la estructura del dataset:
Classes ‘spec_tbl_df’, ‘tbl_df’, ‘tbl’ and 'data.frame': 5536 obs. of 451 variables:
$ NUMBOL : num 1 2 3 4 5 6 7 8 9 10 ...
$ Tipo : num 1 1 1 1 1 1 1 1 1 1 ...
$ P1 : num 18 21 54 30 16 50 40 20 32 18 ...
$ P2 : num 1 1 1 1 1 1 1 1 1 1 ...
$ P3 : num 1 1 1 1 1 1 1 1 1 1 ...
Aquí tenemos un problema de semántica. Las variables no poseen nombres entendibles y tampoco los valores. No podemos hacer preguntas directas a la base de datos, ni siquiera sobre cosas tan básicas como la edad o el sexo. Intentemos con un diagrama de barras de la P3:
La visualización no muestra ni el nombre de la pregunta (solo P3), como tampoco los valores interpretables, (solo 1, 2, 3, 4). Si bien en el repositorio gubernamental existe un diccionario de datos en PDF, este no es directamente utilizable en el procesamiento de los datos y tampoco posee un formato abierto. Es necesario contar con las etiquetas de las variables y los valores para poder hacer una mejor interpretación y visualización de los datos.
Hemos dado una solución a los problemas de (1) validación de formato, que llevan a problemas en el cargado de los datos, y (2) a la semántica de variables y valores para una mejor interpretabilidad.
Las versiones que subimos a nuestro repositorio son CSV validos:
En nuestro repositorio pueden encontrar la misma versión no semántica del CSV publicado por el gobierno, pero con formato CSV Valido (datos_valores.csv
), acompañada de dos tablas CSV para las etiquetas de las variables (etiquetas_variables.csv
) y de los valores (etiquetas_valores.csv
).
Sobre la semántica damos dos soluciones. La primera es una versión totalmente etiquetada tanto en variables y valores (datos_etiquetas_todo.csv
). Esta es la versión que se puede usar para hacer análisis exploratorio con paquetes como Calc, Excel o Google Sheets. Tiene esta apariencia:
La segunda es mediante un dataset (base.csv
) asociado a un diccionario (dic.csv
), donde las etiquetas del diccionario pueden asociarse con los atributos de los datos mediante R o Python.
En los siguientes días sacaremos reportes de varias dimensiones de Internet y sociedad a partir de estos datos. Pero con los datos abiertos, tú también puedes hacerlo.
El repositorio se encuentra aquí.