Sigo avanzando con el curso de Ciencia de los Datos financiado por FUNDAE, diseñado por IBM e impartido a través de Coursera. La verdad, una oportunidad única de reciclaje, actualización y refresco de memoria y procesos.
¿Por qué? Pues porque hasta estos últimos años lo de analizar datos, generar modelos, obtener una aprendizaje e incluso generar predicciones o «visiones a futuro» basándonos en lo que ya conocemos de lo que «ha sucedido antes» era algo que estaba a años luz de la pequeña y mediana empresa. Pero las IAs nos han invadido en menos de 2 años como un tsunami y, en consecuencia, la ciencia de los datos empieza a ser algo más a tener en cuenta lo mismo que el cloud computing o el marketing digital. Estrategias, metodologías y tecnologías todas ellas íntimamente relacionadas entre sí.
El último curso, dentro de los 12 cursos que hay que realizar para hacer la formación completa, iba sobre el análisis de datos con Python, comenzando por el uso del SQL para extraer datos de distintas fuentes y avanzando hacia la depuración y manipulación de los datos ANTES de la generación de modelos o su análisis para obtener conclusiones y aprendizajes.
Algo que suena más bonito si te lo digo en inglés: data wrangling.
Vamos a ponernos un poco técnicos y pedagógicos.
¿Qué es el data wrangling y en qué consiste?
El data wrangling, también conocido como manipulación o limpieza de datos, es uno de los procesos más cruciales dentro del ciclo de vida de los proyectos de ciencia de datos. Antes de realizar cualquier análisis o modelado, los datos deben estar en un formato que sea uniforme, consistente y comprensible, y es aquí donde entra la relevancia del data wrangling.
Por ponerlo en forma de ejemplo:
- Uniforme porque si una columna debe ser un valor entero válido entonces no puede ser ni un NaN ni un string ni ninguna otra cosa.
- Consistente porque si ese número entero debe estar entre 1 y 10, con opción a un 0 que representaría un missing, entonces no puede darse un número negativo ni un 11 y ni mucho menos un decimal, porque hemos dicho que es un entero.
- Comprensible porque si ese atributo (o columna) contiene un entero entre el 1 y el 10, entendemos lo que significa que sea 1, 2, 5, 7 ó 10.
Uno de los primeros pasos en el data wrangling es la estandarización de los datos. Es decir, convertirlos en datos uniformes.
Cuando trabajamos con información proveniente de múltiples fuentes, a menudo nos encontramos con diferentes formatos que dificultan la comparación directa. Por ejemplo, las unidades de medida pueden variar, lo que requiere una conversión para unificar los datos. En Python, este proceso puede automatizarse fácilmente mediante técnicas de conversión de unidades. Un ejemplo sería transformar «pulgadas» en «centímetros», «millas» en «kilómetros», «galones» en «litros»… lo que facilita la interpretación y el análisis de los datos en contextos internacionales.
Un aspecto igualmente importante es la corrección de los tipos de datos. En ocasiones, los datos numéricos pueden ser interpretados erróneamente como texto o viceversa, lo que podría afectar los resultados de los análisis estadísticos. Es esencial que cada columna de datos esté correctamente tipificada para representar adecuadamente la información que contiene.
Python proporciona métodos para corregir estos errores de forma eficiente, como la función astype() en pandas, que permite convertir tipos de datos con facilidad.
La normalización de datos es otra técnica clave que forma parte del proceso de preparación de los datos para el modelado. Esta técnica es esencial para hacer que las variables sean comparables y para reducir el sesgo inherente en algunos modelos estadísticos.
La normalización ajusta los valores para que se ubiquen dentro de un mismo rango o distribución, para que sean consistentes e interpretables, lo cual es particularmente importante cuando las variables de entrada tienen escalas muy diferentes.
En Python, se pueden implementar técnicas como Feature Scaling, Min-Max Scaling y el Z-Score, utilizando métodos disponibles en bibliotecas como pandas y numpy.
El binning es otro método de preprocesamiento que mejora tanto la precisión de los modelos como la visualización de los datos.
El binning consiste en agrupar valores continuos en intervalos discretos o «bins», lo cual facilita la detección de patrones y ayuda a los modelos a manejar mejor las características numéricas.
En Python, es posible implementar el binning utilizando la función cut() de pandas o linspace() de numpy, técnicas que son particularmente útiles en variables como el precio de un bien o servicio.
Para visualizar los resultados del binning y otros métodos de preprocesamiento, las histogramas son herramientas esenciales.
Estos gráficos muestran la distribución de los datos en los diferentes «bins», proporcionando una visión clara de cómo se distribuyen las características. Un buen manejo de estos gráficos permite detectar valores atípicos o tendencias ocultas que podrían pasar desapercibidas.
Finalmente, muchos modelos estadísticos y de aprendizaje automático requieren que los datos de entrada sean numéricos, es decir, es necesaria la conversión de los datos, lo que significa que las variables categóricas deben ser convertidas a formatos numéricos.
Una técnica común para este proceso es el one-hot encoding, que convierte categorías en una serie de variables binarias. En Python, esto se puede implementar fácilmente usando la función get_dummies() de pandas, que transforma variables categóricas como el tipo de combustible de un automóvil en un formato adecuado para los modelos de machine learning.
En resumen, el data wrangling es una etapa indispensable en cualquier proyecto de ciencia de datos. Desde la conversión de unidades y la corrección de tipos de datos, hasta la normalización y la binarización de variables categóricas, estas técnicas permiten que los datos sean procesables, comparables y adecuados para los modelos predictivos.
Un buen dominio de estas habilidades en Python garantiza un análisis más preciso y modelos mejor ajustados a la realidad del negocio. Por no citar la simplicidad que supone hacerlo con este lenguaje, más si es directamente en un cuaderno Jupyter.
Pero eso, para otro día.