Problemas con datos del CONAPO

MP

2018/08/15

El problema

Los datos de marginación del CONAPO son una base de datos interesante para analizar en un curso introductorio de análisis de datos. Son relevantes, bastante bien comportados desde el punto de vista estadístico y tienen variables de distintos tipos. Sin embargo tienen algunos problemas técnicos al momento de importarlos a R.

La base está en formato .csv, lo cual es bueno, ya que es un formato abierto y en texto plano. Sin embargo la codificación de caracteres del archivo .csv es problemática. De acuerdo con file -bi está codificado como ISO-8859-1.

[martin@martin testdata]$ file -bi Base_Indice_de_marginacion_municipal_90-15.csv 
text/plain; charset=iso-8859-1

Dado que hay caracteres que no se pueden expresar diréctamente con con esa codificación (Ñ, ñ, í) al momento de la importanción se producen errores. Aún cuando se logre cambiar el nombre de las columnas para lograr importar los datos hay otros en las operaciones que se hacen sobre las filas.

Algunas soluciones

Un editor de textos

La solución más accesible, que funciona con cualquier sistema operativo, es abrir el archivo .csv con un editor de texto y volver a guardarlo con un encoding utf-8. En general los archivos .csv están asociados a una planilla de cálculos (Excel, Calc, etc.), así que para abrir el archivo es necesario usar la opción Abrir con o abrir primero el editor de textos y llamar desde ahí al archivo. Sin cambiar nada en el archivo vamos directamente a la opción Guardar como. Esto abrirá un cuadro de diálogo. Por lo general en la parte baja de ese cuadro están las opciones para codificación. Seleccionamos utf-8 y guardamos con nombre nuevo, pare evitar futuras confusiones. Base_Indice_de_marginacion_municipal_90-15-utf-8.csv es buena idea.

He probado en dos escenarios diferentes, con notepad.exe en Windows y con gedit en linux. En ambos casos funciona.

Línea de comandos

En Bash de linux tenemos el programa iconv, que permite hacer el cambio en la codificación sin necesidad de abrir el archivo.

[martin@martin testdata]$ gedit Base_Indice_de_marginacion_municipal_90-15-utf-8-iconv.csv 

Es mucho más rápido, aunque la sintaxis de iconv no es muy amigable.

Descargar el archivo recodificado a utf-8.

Desde acá y ubicarlo en la carpeta datos de nuestro proyecto.

Bonus

Código para cargar el archivo con los tipos correctos en cada variable.

library(readr)
marginacion <- read_csv("datos/Base_Indice_de_marginacion_municipal_90-15-utf-8.csv", 
                         col_types = cols(ANALF = col_number(), 
                                          AÑO = col_character(), CVE_ENT = col_character(), 
                                          CVE_MUN = col_character(), GM = col_character(), 
                                          IM = col_number(), IND0A100 = col_number(), 
                                          LUGAR_EST = col_number(), LUG_NAC = col_number(), 
                                          OVPT = col_number(), OVSAE = col_number(), 
                                          OVSD = col_number(), OVSDE = col_number(), 
                                          OVSDSE = col_number(), OVSEE = col_number(), 
                                          `PL<5000` = col_number(), PO2SM = col_number(), 
                                          POB_TOT = col_number(), SPRIM = col_number(), 
                                          VHAC = col_number(), VP = col_number()))

En todo caso borrar o cambiar el nombre del archivo mal codificado para evitar confusiones.