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

Anuncios

Eligiendo herramientas

octubre 13, 2010

Encontrar las herramientas adecuadas para realizar una tarea no siempre es sencillo. Puedes usar lo que ya conoces sin importar si es lo más indicado o no. Con buena suerte, lo que ya conoces es lo adecuado y todo sale bien. Sin embargo, si no es así, el tiempo que ganarías según tú por conocer bien la herramienta en cuestión, se perdería al tener que trabajar más para cubrir sus deficiencias. Recientemente me encontré en una situación semejante.

Perl ha sido mi lenguaje de scripts favorito desde hace varios años. Su flexibilidad hace que puedas obtener resultados rápidamente. Una desventaja es que fácilmente puedes tener un código muy críptico y desordenado que al poco tiempo no entiendas. Mi dilema surgió recientemente: ¿seguiría usando Perl para el proyecto actual?, si era así, ¿era lo indicado?. Así, tratando de evitar aspectos emocionales como “… es que en Perl hice la transformación de datos que más me ha divertido …” y cosas parecidas, decidí buscar lo que luce más conveniente al proyecto.

 

Perl: el hippy, liberal, relajado

Buscaba algo que hiciera énfasis en el análisis estadístico y también que, como Perl, permitiera pegar cosas (Glue Language). Así, después de considerar distintas alternativas, he escogido Python como lenguaje de propósito general y R para la parte estadística. A diferencia de Perl, Python te exige mayor formalidad; es como la dama de La dama y el vagabundo. Por ejemplo, en Perl puedes escribir el código identado o sin identar, es indistinto.  En Python, por el contrario, la identación es un deber, no cuestión de estilo ni de buenas prácticas. Lo ideal sería que se tuvieran buenos hábitos con todos los lenguajes pero sabemos que en la práctica, eso difícilmente se cumple. Después de hacer algunos pininos,  he sentido las ventajas de Python, pero lo admito, Perl sigue siendo mi favorito.

 

Python: el formal, el elegante

En cuanto a R, su fortaleza radica en el análisis estadístico y  lo poco que he probado hasta ahora, me ha convencido. Sobre R ya había leído diversos comentarios, la mayoría positivos; sin embargo, fue un  análisis estadístico muy interesante lo que me hizo volver a poner mis ojos en él.

Pero, ¿cómo usar R desde Python? todo indica que rpy es lo que busco para aprovechar lo mejor de ambos mundos.

La experiencia y los resultados que se logren mostrarán si son buenas elecciones.

===

Imagen hippy, del usuario de flickr gabbahey


Imagen corbata
, del usuario de flickr fhashemi


A %d blogueros les gusta esto: