Archivo de la etiqueta: field cady

Datos patológicos

Así es, muchas veces los datos presentan patologías; estás pueden ser de dos tipos:

  1. de contenido: entradas duplicadas, datos atípicos, valores nulos, o
  2. de formato: extraño uso de mayúsculas, o espacios de más.

En esta entrada veremos la amplia gama de detalles de contenido que aparecen en las bases de datos de la vida real, y de qué manera se pueden abordar esos problemitas. Todo esto forma parte del pre-procesamiento de datos.

Sin duda manipular cadenas de texto puede parecer tedioso a primera vista, pero es un arma muy poderosa para un científico de datos; con esta manipulación se atacan problemas de formato, y se crean scripts que permitan obtener la información necesaria de los datos crudos.

A veces uno se imagina los datos acomodados en tablas, ahí están los datos sólo esperando que uno saque gráficas, regresiones, clusters… sin embargo muchas veces los datos tienen diferentes formatos, y hay que extraer los que puedan ayudar a encontrar el “panorama tan anhelado”

Para identificar patologías se pueden recurrir a buenas prácticas como mirar directamente a los datos, ver cómo están conformados, qué tipos de datos hay; si existe documentación disponible, es recomendable leerla; tener a la mano una lista de preguntas que hacer sobre la base de datos: ¿qué contiene cada columna?, ¿qué identificadores se encuentran en cada tabla? Por último, se recomienda rectificar varias veces que la información que tenemos de los datos coincida con lo que estamos obteniendo.

Las patologías de contenido son:

  1. Entradas duplicadas. A veces las entradas dobles son importantes de alguna manera en la vida real. El procedimiento en este caso es hacer otra columna que contenga sólo las entradas únicas.
  2. Entradas múltiples para una sola entidad. Esto sucede de manera más frecuente cuando es una columna la que cambia constantemente; puede suceder también que haya diferentes procesos unidos a una sola forma de identificarlo, a veces la información sobre cada proceso está en alguna otra columna o tabla.
  3. Entradas faltantes. Suceden porque hubo alguna característica en las entidades que sacó los valores del conjunto de datos, o porque nunca fue recolectada esa parte de la información.
  4. Valores NULL. Estos valores generalmente dicen que no conocemos una parte particular de la información sobre una entidad y no pueden ser procesados por muchos algoritmos a la hora de hacer el análisis, en este caso es necesario cambiar esto valores por alguna aproximación adecuada, quizá la media de los valores no nulos. Otras veces es una característica importante y aporta información sobre los procesos descritos en las tablas, tal vez no hubo tales procesos.
  5. Datos atípicos grandes. Los atípicos a veces están porque realmente existieron, pero depende mucho del concepto. En el contexto de tráfico en una página web, un dato atípico puede significar un ataque de bots. Otras veces se trata como datos inexistentes. A veces los sistemas de almacenamiento no permiten tener valores NULL y lo que ponen es valores arbitrarios
  6. Datos expirados. En las bases de datos, cuando una entrada es registrada, también queda anotado el timestamp, es decir, el momento preciso en que se captura la información, cuando se actualiza la entrada no se sustituye sino se crea otra con el tiempo adecuado. Entonces hay bases de datos con mucha información de sobra, a menos que se quiera estudiar la historia de la misma.
  7. Entradas artificiales. A veces se crean escenarios artificiales para hacer pruebas.
  8. Espacios irregulares. Muchos algoritmos que procesan datos asumen que los datos se recuperan en un intervalo de tiempo constante por lo que se identifica un problema cuando los datos no se presentan con este patrón. En caso de que hagan falta valores suele hacerse una interpolación para recuperar los datos inexistentes.

Limpiar los datos es una parte de la ciencia de datos en donde más código se desarrolla. Es una parte donde usarás mucho la creatividad y será necesario experimentar; es el momento para entender los datos, y seleccionar los que te ayudaran a sacar las mejores conclusiones según lo que se busca.

Bibliotecas de Python para ciencia de datos

Python es un lenguaje de programación que ha tenido mucha fama por su sintaxis sencilla y la cantidad de proyectos que se pueden desarrollar usándolo. Es un lenguaje orientado a objetos pero también es un lenguaje de programación funcional y programación imperativa que trabaja en todos los sistemas operativos.

Python tiene una gran biblioteca estándar, de la que se pueden usar una gran cantidad de herramientas. En particular para hacer análisis de datos hay unas que resulta básico conocer, aquí las principales:

NumPy. Biblioteca que da soporte al cálculo con matrices y vectores; ayuda al manejo de arreglos numéricos de manera rápida y eficiente. Y en el fondo, Pandas opera sobre arreglos de Numpy.

Pandas. Esta biblioteca permite el análisis de datos a través de series y «dataframes». Es la gran aliada en el análisis de datos, guarda y opera con datos en forma de tablas. Tiene herramientas para la lectura y escritura de datos en diferentes formatos: CSV y archivos de texto, archivos de Excel, bases de datos en SQL, y en formato HDF5. Es posible tomar rebanadas de la información, una indexación elegante y tomar subconjuntos de grandes cantidades de datos.

Matplotlib. Con esta biblioteca se hacen las gráficas y las visualizaciones. Es un poco torpe a la hora de trabajar sólo con ella, pero se puede arreglar usando también seaborn, que es una biblioteca que provee una interfaz de alto nivel para hacer gráficas estadísticas atractivas e informativas

SciPy. Biblioteca que permite realizar análisis científico como optimización, álgebra lineal, integración, ecuaciones diferenciales entre otras. Provee varias funciones que hacen cálculos sobre arreglos de NumPy.

Scikit-learn. Biblioteca que implementa algoritmos de aprendizaje automático. Opera en arreglos de NumPy. Con sus herramientas se pueden hacer tareas como clasificaciones, regresiones, clusters, selección de modelos, preprocesamiento de datos

Nota final. Para trabajar en Python se debe tener en cuenta la versión a instalar ya que a partir del 1° de enero del 2020 no se le dará soporte a la versión 2.0, solo habrá actualizaciones para las versiones siguientes a la 3.5.

Lenguajes de programación para un científico de datos

Con probabilidad casi uno, en un proyecto de ciencia de datos siempre se necesita un poco de código. Algunos científicos encuentran más conveniente trabajar directamente con un lenguaje de programación con librerías numéricas suplementarias mientras hay quienes prefieren pelearse con los datos con un lenguaje de programación y luego cargar el conjunto de datos en otra herramienta para su análisis exploratorio.

Las herramientas que existen para incorporarlas en el ciclo del trabajo de un científico de datos están las siguientes:

  • Excel – que para análisis simple de datos es una muy buena herramienta.
  • Tableau –  que cuando funciona se obtienen gráficas muy bonitas.
  • Weka – es una herramienta para aplicar algoritmos de aprendizaje máquina prefabricados y trabaja con Java.

Estas herramientas trabajan con datos que están acomodados en tablas; sin embargo, la mayoría de las veces cada conjunto de datos necesita su propio tratamiento para obtener las características que se necesitan, en particular si los datos están en formas muy alejadas de una tabla. Es por esto que un científico de datos necesita dominar muy bien al menos un lenguaje de programación.

Inspección de los lenguajes de programación para un científico de datos (al menos los más populares).

  1. Python. Es un lenguaje de programación de propósito general . Actualmente es el lenguaje preferido entre los científicos de datos porque tiene un balance entre flexibilidad de una escritura convencional con los músculos de buenos paquetes matemáticos. La primera versión de Python salió en 1991 y hay muchos paquetes que lo hacen muy poderoso.
  2. R. Es un lenguaje de programación diseñado para estadísticos y con él es fácil hacer gráficas, está dotado de muchas funciones analíticas. Su desarrollo está basado en S que fue creado en los Laboratorios Bell en 1976.
  3. Matlab® and Octave. Recientemente de manera general se está optando por software libre, es por eso que Matlab no es tan sonado como los dos lenguajes anteriores.  Muchos científicos de datos que vienen de áreas como ingeniería o física suelen conocer bien Matlab. Un programa muy similar a él es Octave, con la facilidad de que se puede conseguir de manera libre.
  4. SAS®. Es un programa muy bueno para hacer estadística aunque quizás no lo sea para ciencia de datos.
  5. Scala®. Promete ser un buen lugar para científicos de datos aunque actualmente no tiene paquetes con los que se pueda hacer imágenes y análisis. Funciona muy bien para código de propósitos generales y para producción de software de gran escala.

Como conclusión es muy recomendable conocer Python, es un lenguaje famoso en el área en estos momentos, tiene muchos paquetes con herramientas para hacer buenos análisis y gráficas. Un buen libro para comenzar a enterarse de este lenguaje es Think Python de Allen B. Downey; otro libro enfocado a ciencia de datos es Python for Data Analysis por Wes Mackinney. Éstas son algunas opciones, pero hay gran cantidad de bibliografía que se puede consultar y de la que seguramente se puede aprender mucho.

entonces… ¿qué hace un científico de datos?

En esta entrada y muchas otras subsecuentes que hablen de ciencia de datos, pondré información que me parece destacada del libro de Field Cady, The Data Science Handbook, con el fin de ir aclarando todo lo relacionado con este gran universo. Como lo introduce el autor:

Data Science o Ciencia de datos significa hacer análisis que por una razón u otra, requiere una cantidad sustancial de habilidades de ingeniería de software.

Por ejemplo:

  1. Una base de datos puede ser tan grande que se requiera usar computación distribuida para hacer el análisis.
  2. La base de datos puede ser tan enredada que sean necesarias varias líneas de código para desenredarla y poder analizarla.
  3. Escribir grandes pedazos de software que implementen los análisis en tiempo real.

Un científico de datos necesita una buena dosis de los siguientes conocimientos: modelos estadísticos + software y programación + problemas de negocios, aparte de saber esto muy bien se debe relacionar de una manera que todo adquiera significado. Es un profesionista que pasa la mayor parte de su tiempo acomodando los datos de manera que se les puedan aplicar métodos estadísticos, para lo cual, necesita habilidades que un estadístico normal no tiene.

Las Etapas del trabajo de un Científico de Datos se muestran a continuación, cabe mencionar que para cada proyecto, estas etapas no se recorren una sola vez, ya que se obtiene en cada etapa información y perspectivas que pueden hacer que el problema necesite ser replanteado, o mover los parámetros con los que se hace el análisis.

Imagen del ibro The Data Science Handbook, de Field Cady, traducido.

1. Encuadrar el problema. Es necesario conocer el negocio y elaborar un problema bien definido para analizar; para lograr esto es importante hacer las preguntas adecuadas. Si el objetivo del análisis será informar a los interesados las conclusiones del análisis hay que conocer bien el problema, hacer preguntas sustanciosas que den un panorama amplio del negocio y de lo que hay que resolver.

Por otro lado, si el objetivo es entregar un software habrá que determinar varias cosas como qué lenguaje usar, cuál será el tiempo de ejecución, que tan precisas deben ser las predicciones.

En fin, se debe vislumbrar desde un principio qué sería una solución al problema. Acordar entre las partes involucradas cuándo se considerará al proyecto terminado y en qué casos será exitoso. Para ello es conveniente elaborar un documento que especifique claramente todas las cuestiones anteriores. Este documento se llama comúnmente “Statement of Work”.

2. Entender los datos. Involucrarse con ellos y con las cosas del mundo real que describen. Unas preguntas que para empezar estaría bien hacer son:

  • ¿Qué tan grande es el conjunto de datos?
  • ¿Es suficientemente representativo?
  • ¿Contienen valores atípicos o ruido?
  • ¿Puede tener datos artificiales?

A lo mejor, lo que más interesa saber a un científico de datos es si la base de datos contiene información que será útil para resolver el problema. En caso de que no, habrá que modificar los planes.

Luego viene pelearse con los datos, este proceso es uno donde los científicos de datos deben tener habilidades que los estadísticos no tienen. Se necesitan herramientas especiales para acceder a bases de datos para obtener los que se necesiten. Una vez que se tienen, hay que revisar que los datos estén completos; esto se puede hacer de muchas maneras dependiendo el formato del archivo obtenido, como abrirlo con lectores adecuados, hacer histogramas, gráficas de dispersión, hacer sumas sencillas que den luz sobre la precisión de los datos.

Finalmente, dentro del marco de entender los datos, hay que pasar un rato husmeando en ellos, creando visualizaciones de varias maneras, transformarlos para encontrar en ellos lo que hay que encontrar. Este momento es un buen lugar para dar rienda suelta a la curiosidad, se pueden calcular correlaciones. En particular, se puede desarrollar una intuición visual de los datos y hacer hipótesis concretas sobre lo que los datos pueden mostrar.

¡Los científicos de datos necesitan visualizaciones de los datos!

3. Extraer características que tengan sentido. En este paso hay que poner los datos en columnas y filas; cada fila corresponde a una entidad del mundo real y cada columna a un pedazo de información de esa entidad. Es decir, es conveniente tabular los datos.

Casi todas las técnicas de análisis operan sobre tablas, ¡Es muy importante tener una buena tabla!

Esta parte es la más creativa de la Ciencia de Datos y es un área donde se requiere un vínculo estrecho con los expertos en el campo para entender el significado del fenómeno e interpretar los números correctamente. A veces se trata de encontrar cómo medir lo que solicita con los datos que se tienen.

4. Poner estas características en un modelo y analizar. Un modelo que adivine si un cliente sigue siendo fiel, una regresión lineal que pronostique el precio del mercado para el día siguiente o un algoritmo que clasifique a los clientes en diferentes segmentos.

Es importante ajustar cuidadosamente los modelos y la ejecución, a veces se cambian los ajustes para la siguiente iteración si es que hay. Esta es la etapa donde se obtienen datos duros.

Si el cliente es humano se pueden presentar resultados de diferentes modelos, si es una máquina muchas veces se necesita sólo un algoritmo para ser usado en producción.

5. Presentar resultados y/o desarrollar código. En esta etapa es donde se necesitaran las habilidades de comunicar. Los resultados obtenidos se muestran en una presentación o en un reporte escrito. Se debe emplear un lenguaje apropiado para el público al que vaya dirigido y se logre la transmisión del mensaje.

Si el cliente es una máquina, tal vez a parte de lo anterior, se tendrá que hacer código que será ejecutado por otras personas. En este caso el resultado final consistirá de el código, la documentación de cómo correr el código y una muestra donde se ocupe el código recién creado que muestre su correcta ejecución.

6. Iterar el proceso. Una pregunta abierta al iniciar un proyecto en Ciencia de Datos es cuáles son las características que serán útiles y para qué modelo; en dado caso de ser necesario (que muchas veces lo es), tanto las características como el modelo se deben poder cambiar sin problemas.

El código debe ser flexible para poder hacer los cambios, debe ser lo suficientemente poderoso para que su desempeño sea eficiente y muy comprensible para editarlo rápidamente si los objetivos cambian. Por lo que los conocimientos de programación del científico de datos deben ser sólidos.

Todo lo anterior, se resume en una imagen, que hay que tener presente en el momento de una entrevista de trabajo.