datos bonitos, datos feos

noviembre 9, 2010

Cuando vas a analizar, explorar, conocer conjuntos de datos, lo primero con lo que te encuentras (entre otras cosas) es que los datos no son tan bonitos como los que R incluye para experimentar. La mayor parte de los datos que escogí tienen formato csv, que es un simple formato tabular. Los datos bonitos son, por ejemplo:

surgery,age,hnumber,rectal-temp
no,adult,530101,38.5
yes,adult,534817,39.2
no,adult,530334,38.3
yes,young,5290409,39.1

Pero, ¿qué tiene de bonito el atributo sobre temperatura rectal (rectal-temp)? ¿Cuál es el criterio para decir que el archivo es bonito? En el ejemplo, todas las columnas están correctamente separadas por comas, con el mismo número de columnas por renglón y no hay caracteres raros. Este archivo puede usarse inmediatamente para análisis sin ninguna inversión de tiempo. Pero los conjuntos de datos en la realidad no son así, la mayoría es imperfecto y feo en mayor o menor medida. Veamos el siguiente:

User-ID,Location,Age
5262,&#turkey,27
9311,Ł,ódź,, lodzkie, poland,17
9335,san diego california usa,54

9396,, ,,44
9387,southlake texas usa,38

Horror. El archivo está plagado de símbolos raros que en nada ayudan a su proceso. Además, hay algunos registros que tienen más de tres columnas. Si eso no basta para decir que es feo, tiene renglones vacíos, que aunque para el ojo humano es “nada” generalmente para un programa si significa “algo” y no precisamente bondadoso. Por ejemplo, algunos programas nos dirán que este archivo feo tiene seis registros cuando en realidad tiene cinco.

Este archivo necesita un preproceso urgente que le quite lo feo para que se puedan hacer análisis confiables. Y así, ya que aceptamos que los datos reales difícilmente son bonitos,  entonces hay que decidir cómo los haremos bonitos. Eso depende de nuestras necesidades y de lo que hayamos visto que ocurre con más frecuencia en los datos disponibles: 1) ¿todas las columnas requieren limpieza?, tengo un archivo en el que una columna contiene URLs por lo que limpiarlo deformaría el dato, 2) ¿me importa que el valor del atributo se entienda?, 3) ¿qué caracteres debo eliminar?, 4) ¿qué caracteres debo sustituir?, 5) si un renglón no tiene la misma cantidad de atributos, ¿lo quito?,¿lo corrijo?,¿es relevante? Al primer vistazo puede parecer muy simple, sin embargo, las decisiones que se tomen son relevantes para los resultados de todo análisis.

¿Ven por qué es feo? el primer archivo no genera tanta interrogante. El segundo archivo es todo lo contrario, decisiones y más decisiones. No cabe duda, en un simple conjunto de datos se resume la vida misma.

Pues bien, como el punto es que hay que decidir, mi decisión inicial consiste en: 1) elimino los renglones vacíos, 2) elijo qué columnas limpiaré y 3) la limpieza consiste en eliminar los caracteres no-alfanuméricos. ¿Cómo hacerlo? No, ni lo piensen, hoja de cálculo no. Si tienes solamente un archivo pequeño y ese es tu único interés tal vez. Pero si el número de conjunto de datos a usar es indeterminado y no son pequeños entonces pensar siquiera en usar una hoja de cálculo sería un suicidio. Hice un script inicial en Python que hace la limpieza básica descrita; está disponible en el repositorio. R no es bueno para preprocesamiento, supone que los archivos llegan ya listos.

Lo bueno de todo es que esa fase de preprocesamiento permite que conozcas mejor los datos, que les conozcas sus defectos, que los veas de cerca, que te metas en ellos. Cuando los datos son bonitos, ni los miras (pero salen más rápido los resultados).

A veces, lo que creemos que es basura, no lo es

Imagen


Sistemas de recomendación: un panorama general

octubre 3, 2010

El mes pasado inicié un postdoc en investigación sobre sistemas de recomendación. La semana pasada hice la primer presentación sobre el tema. Me ha gustado mucho. Anexo la presentación.


A %d blogueros les gusta esto: