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

R: tutoriales básicos y ejemplos de scripts

octubre 19, 2010

Cuando estás aprendiendo algo nuevo, un tutorial es de gran ayuda. Sin embargo, encontrar documentos que te faciliten el proceso de aprendizaje no siempre es sencillo. Después de revisar varios tutoriales de R, encontré algunos que permiten hacer cosas rápidamente, sentir y experimentar el lenguaje de forma inmediata.

Mis tutoriales básicos de R favoritos son los siguientes: tutorial 1, tutorial 2

Ahora sigue la parte interesante. Una herramienta es solamente el medio; la representación de la información, su análisis e interpretación no es responsabilidad del software.

En el git están disponibles los scripts.


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


Buscando la mejor pizza

mayo 20, 2010

¿Cuáles son las características de tu pizza favorita?, ¿el precio?, ¿la cantidad de queso?, ¿las combinaciones de ingredientes?, ¿la zona?. Esa es la pregunta que Jared P. Lander contestó usando análisis estadístico. Su estudio lo aplicó a pizzerías de Nueva York, excluyendo las cadenas comerciales más conocidas (e.g., Pizza Hut, Domino’s). Los datos que analizó fueron extraídos del sitio menupages,  consistentes en ubicación, precio, tipo de combustible usado en el horno, número de recomendaciones y valoración promedio (1 a 5 estrellas) sobre aproximadamente 600 pizzerías de Manhattan y Brooklyn. Se considera que los datos corresponden a personas no-expertas en pizzas, más bien, a usuarios promedio. Se agregó también la información del hecho de que el título del lugar tuviera incluida la palabra pizza.

El contundente resultado de su estudio fue que las pizzerías que atraen multitudes son aquellas que usan hornos de carbón. Ni el precio, ni la dirección, ni ninguna otra característica fue tan relevante como el combustible utilizado en su preparación. Algunos de los análisis que utilizó fueron los diagramas de dispersión, diagramas de caja, regresión logística y distribución de Poisson.

Otra forma de abordar el asunto podría ser la generación de recomendaciones orientadas al consumidor, personalizadas. ¿Habría cambios sustanciales en los resultados?, ésto se vería si la mayoría de las recomendaciones dadas fueran a los mismos restaurantes que poseen horno de carbón. ¿Qué pasaría si se toma en cuenta otra ciudad?. El contexto puede ser muy diferente si la ciudad nueva tiene un clima opuesto. ¿Y si la gente va sólo porque ve el lugar lleno?. Tomar en cuenta otros aspectos contextuales podría darnos otros aspectos a mejorar.

Esta aplicación del análisis de datos es un ejemplo de que toda actividad humana cuantificable puede aprovechar las técnicas estadísticas para mejorar el producto o servicio que se ofrece.

Photo by Flickr user adam_t4, licensed under CC 2.0


A %d blogueros les gusta esto: