Saltar al contenido
Manejo de datos con Pandas

Limpieza y transformación de datos con Pandas

Introducción

Pandas es una biblioteca de Python que se utiliza para el análisis y la manipulación de datos. Con Pandas, podemos leer, explorar, limpiar y transformar datos complejos.

La limpieza y transformación de datos son partes fundamentales del análisis de datos. Los datos pueden provenir de diversas fuentes y a menudo están en formatos que no son fáciles de manipular. La limpieza de datos implica la eliminación de valores faltantes, la corrección de errores, la eliminación de duplicados y la normalización de datos inconsistentes. Por otro lado, la transformación de datos implica manipular los datos y aplicar operaciones para obtener nuevos valores o características de los datos existentes.

Con Pandas, podemos realizar una variedad de operaciones, como la agrupación de datos, la agregación, la pivotación y la unión de diferentes conjuntos de datos. Estas operaciones nos permiten realizar análisis más profundos y extraer información significativa de los datos.

La limpieza y transformación de datos son fundamentales para garantizar que los datos sean precisos y confiables para su análisis posterior. Pandas es una herramienta poderosa y útil para estos procesos, haciéndolos más eficientes y automatizados.

Resumen

La limpieza y transformación de datos son partes fundamentales en el análisis de datos, ya que los datos recolectados a menudo están desorganizados, contienen errores, datos faltantes o duplicados, y es necesario realizar manipulaciones para tener una base de datos precisa y confiable. Pandas es una biblioteca de Python utilizada para el análisis de datos, y cuenta con funciones para la limpieza y transformación de datos. Aquí tienes algunas de las funciones más útiles:

Eliminación de duplicados

Pandas ofrece la función drop_duplicates() para eliminar datos duplicados en una base de datos. Por ejemplo:

import pandas as pd
df = pd.read_csv('mi_archivo.csv')
df.drop_duplicates(inplace=True)

Eliminación de datos faltantes

Si una base de datos tiene datos faltantes, Pandas proporciona la función dropna() para eliminar estos datos. También se pueden reemplazar los datos faltantes con el valor medio, mediana o moda de la columna usando la función fillna(). Por ejemplo:

import pandas as pd
df = pd.read_csv('mi_archivo.csv')
df.dropna(inplace=True)

O reemplazando con el valor medio:

import pandas as pd
df = pd.read_csv('mi_archivo.csv')
df.fillna(df.mean(), inplace=True)

Renombrado de columnas

Para renombrar columnas en una base de datos, Pandas ofrece la función rename(). Por ejemplo:

import pandas as pd
df = pd.read_csv('mi_archivo.csv')
df.rename(columns={'nombre_actual': 'nuevo_nombre'}, inplace=True)

Cambio de tipo de dato en una columna

Si una columna en la base de datos tiene un tipo de dato distinto al deseado, Pandas permite cambiar el tipo de dato con la función astype(). Por ejemplo:

import pandas as pd
df = pd.read_csv('mi_archivo.csv')
df['nombre_columna'] = df['nombre_columna'].astype(int)

Estas son solo algunas de las funciones de Pandas para limpiar y transformar datos. Hay muchas más disponibles. La limpieza y transformación de datos son partes primordiales del análisis de datos, y tener un conjunto de datos confiable y organizado puede marcar una gran diferencia en los resultados finales.

Aplicación teórica

Manejo de Valores Faltantes y Estadísticas Imputadas

Entendido. Aquí está el texto sin formato en negritas:

El manejo de valores faltantes y el uso de estadísticas imputadas son cruciales en el análisis de datos, ya que los valores faltantes pueden afectar la calidad y precisión de los resultados. Existen varias técnicas para abordar este problema:

1. Eliminación de Datos Faltantes:
   Una técnica simple es eliminar las observaciones o variables con valores faltantes. Esto es útil cuando la cantidad de datos faltantes es pequeña en comparación con el tamaño total del conjunto de datos.

   - Eliminación de Observaciones: Si un registro tiene valores faltantes en una o más variables, puede ser eliminado del conjunto de datos:
     \[
     \text{Datos Limpiados} = \{x_i \mid \text{Datos de } x_i \text{ sin valores faltantes}\}
     \]

   - Eliminación de Variables: Si una variable tiene una proporción alta de valores faltantes, puede ser eliminada:
     \[
     \text{Variables Limpiadas} = \{x_i \mid \text{Variable sin valores faltantes}\}
     \]

2. Imputación de Valores Faltantes:
   La imputación reemplaza valores faltantes con valores estimados basados en el resto del conjunto de datos. Algunas técnicas de imputación incluyen:

   - Imputación por la Media: Los valores faltantes en una variable se reemplazan por la media de los valores presentes de esa variable:
     \[
     x_i = \bar{x} \text{ si } x_i \text{ es faltante}
     \]
     Donde \(\bar{x}\) es la media de la variable.

   - Imputación por la Mediana: Similar a la imputación por la media, pero utilizando la mediana para variables con distribuciones sesgadas:
     \[
     x_i = \text{Mediana}(x) \text{ si } x_i \text{ es faltante}
     \]

   - Imputación por el Valor Más Frecuente: Para variables categóricas, donde los valores faltantes se reemplazan por el valor más frecuente:
     \[
     x_i = \text{Moda}(x) \text{ si } x_i \text{ es faltante}
     \]

   - Imputación por Regresión: Se utiliza un modelo de regresión para predecir los valores faltantes basado en otras variables. Por ejemplo, si el valor faltante está en la variable \(y\), se puede predecir usando otras variables \(x_1, x_2, \ldots, x_k\):
     \[
     y_i = \beta_0 + \beta_1 x_{i1} + \beta_2 x_{i2} + \ldots + \beta_k x_{ik}
     \]

   - Imputación Múltiple: Genera múltiples imputaciones para cada valor faltante y luego combina los resultados. Se utiliza para manejar la incertidumbre en la imputación y suele emplear técnicas como el método de cadenas de Markov (MCMC):
     \[
     \text{Imputaciones} = \{\text{Imputación}_1, \text{Imputación}_2, \ldots, \text{Imputación}_m\}
     \]

3. Interpolación:
   Para datos temporales, se puede utilizar la interpolación para estimar valores faltantes en función de los valores vecinos. Por ejemplo, en una serie temporal:
   \[
   x_i = \text{Interpolate}(x_{i-1}, x_{i+1}) \text{ si } x_i \text{ es faltante}
   \]

4. Métodos Basados en Modelos Avanzados:
   - K-Nearest Neighbors (KNN): Imputa valores faltantes utilizando los valores más cercanos (en función de la distancia) en el espacio de características:
     \[
     x_i = \text{Promedio de los } k \text{ vecinos más cercanos}
     \]

   - Algoritmos Basados en Machine Learning: Modelos como Random Forests o redes neuronales pueden ser utilizados para imputar valores faltantes considerando la complejidad y las interacciones entre variables.

La elección del método para manejar valores faltantes depende del contexto del problema, la cantidad y el patrón de los datos faltantes, y el impacto en el análisis y modelos posteriores. Es fundamental evaluar la técnica utilizada para garantizar que no introduzca sesgos o distorsione los resultados.

Transformación de Datos y Normalización

La transformación de datos y la normalización son técnicas fundamentales en el análisis de datos que preparan los datos para su uso en modelos estadísticos y de aprendizaje automático. Estas técnicas ayudan a mejorar la precisión y el rendimiento de los modelos al ajustar la escala y la distribución de los datos.

1. Transformación de Datos:
   La transformación de datos implica aplicar funciones matemáticas para modificar la distribución o la escala de los datos. Las transformaciones comunes incluyen:

   - Transformación Logarítmica: Se utiliza para reducir la amplitud de datos sesgados o para hacer que la relación entre las variables sea lineal. Por ejemplo, para una variable \(x\) con valores positivos:
     \[
     x' = \log(x)
     \]
     Donde \(\log\) puede ser el logaritmo natural o en base 10, dependiendo del contexto.

   - Transformación de Raíz Cuadrada: Se utiliza para estabilizar la varianza y reducir la influencia de valores extremos. Para una variable \(x\):
     \[
     x' = \sqrt{x}
     \]

   - Transformación Box-Cox: Es una familia de transformaciones que incluye la transformación logarítmica como un caso especial. La fórmula general es:
     \[
     x' = \frac{x^\lambda - 1}{\lambda}
     \]
     donde \(\lambda\) es un parámetro que se estima a partir de los datos. Para \(\lambda = 0\), la transformación es logarítmica.

   - Transformación Z-score: Se usa para estandarizar los datos, centrándolos y escalándolos. Para una variable \(x\):
     \[
     x' = \frac{x - \mu}{\sigma}
     \]
     donde \(\mu\) es la media y \(\sigma\) es la desviación estándar de la variable.

2. Normalización:
   La normalización ajusta la escala de los datos para que se encuentren dentro de un rango específico, generalmente entre 0 y 1. Esto es especialmente útil para algoritmos de aprendizaje automático que son sensibles a la escala de los datos.

   - Normalización Min-Max: Reescala los datos para que estén en el rango [0, 1]. Para una variable \(x\) con mínimo \(x_{\text{min}}\) y máximo \(x_{\text{max}}\):
     \[
     x' = \frac{x - x_{\text{min}}}{x_{\text{max}} - x_{\text{min}}}
     \]

   - Normalización Z-score: Como se mencionó en la transformación de datos, estandariza los datos para que tengan media 0 y desviación estándar 1. Es útil cuando los datos tienen una distribución normal.

   - Escalado Robusto: Utiliza la mediana y el rango intercuartil (IQR) para hacer que los datos sean menos sensibles a los valores atípicos. Para una variable \(x\):
     \[
     x' = \frac{x - \text{Mediana}(x)}{\text{IQR}(x)}
     \]
     Donde \(\text{IQR}(x)\) es la diferencia entre el tercer cuartil (Q3) y el primer cuartil (Q1).

   - Transformación de Decimal Scaling: Reescala los datos dividiendo por una potencia de 10. Se usa cuando los datos tienen una magnitud muy alta o baja. Para una variable \(x\):
     \[
     x' = \frac{x}{10^j}
     \]
     donde \(j\) es el número de dígitos necesarios para normalizar los datos.

La elección de la técnica de transformación o normalización depende de la naturaleza de los datos y del objetivo del análisis. Es crucial aplicar estas técnicas de manera adecuada para garantizar que los datos sean compatibles con los modelos y análisis posteriores, y para evitar problemas como la heterocedasticidad o la influencia desproporcionada de valores extremos.

Generación de Nuevas Variables y Extracción de Características

La generación de nuevas variables y la extracción de características son procesos esenciales en el análisis de datos y en la preparación de datos para modelos de aprendizaje automático. Estos procesos ayudan a mejorar la calidad del modelo al proporcionar información adicional que puede ser útil para las predicciones. Aquí se detallan algunas técnicas comunes:

1. Generación de Nuevas Variables:
   La generación de nuevas variables implica crear nuevas columnas en el conjunto de datos a partir de las existentes para capturar información adicional o mejorar el rendimiento del modelo.

   - Combinación de Variables: Crear nuevas variables combinando dos o más variables existentes. Por ejemplo, en un conjunto de datos de ventas, se pueden combinar las variables de precio y cantidad para obtener el total de ventas:
     \[
     \text{TotalVentas} = \text{Precio} \times \text{Cantidad}
     \]

   - Variables Derivadas: Generar variables a partir de transformaciones de las variables originales. Por ejemplo, si se tiene una variable de fecha, se pueden extraer variables como el año, el mes y el día:
     \[
     \text{Año} = \text{Año}(\text{Fecha})
     \]
     \[
     \text{Mes} = \text{Mes}(\text{Fecha})
     \]
     \[
     \text{Día} = \text{Día}(\text{Fecha})
     \]

   - Variables de Interacción: Crear variables que representen interacciones entre dos o más variables. Por ejemplo, si se tienen variables de edad y género, se puede crear una variable de interacción que combine estos factores:
     \[
     \text{EdadGenero} = \text{Edad} \times \text{Genero}
     \]

   - Binning o Discretización: Convertir una variable continua en una variable categórica dividiéndola en intervalos. Por ejemplo, dividir la variable de edad en grupos de edad:
     \[
     \text{GrupoEdad} = \begin{cases} 
     \text{Joven} & \text{si } \text{Edad} < 30 \\
     \text{Adulto} & \text{si } 30 \leq \text{Edad} < 60 \\
     \text{Mayor} & \text{si } \text{Edad} \geq 60
     \end{cases}
     \]

2. Extracción de Características:
   La extracción de características implica seleccionar y transformar las características originales para mejorar la eficiencia y efectividad del modelo. Algunas técnicas comunes incluyen:

   - Análisis de Componentes Principales (PCA): Reduce la dimensionalidad del conjunto de datos transformando las variables originales en un nuevo conjunto de variables, llamadas componentes principales, que capturan la mayor parte de la varianza de los datos:
     \[
     \text{PCA}(x) = \text{ComponentePrincipal}_i
     \]

   - Análisis de Factores: Similar al PCA, pero se enfoca en identificar las variables latentes que explican la correlación entre las variables observadas. Esto se usa para reducir la dimensionalidad y descubrir la estructura subyacente:
     \[
     \text{Factor}_j = \text{Función}(x)
     \]

   - Selección de Características: Consiste en seleccionar un subconjunto de las características originales basándose en su relevancia para el modelo. Esto puede incluir métodos como la selección hacia adelante, la selección hacia atrás y la selección por pasos:
     \[
     \text{Características Seleccionadas} = \{\text{Feature}_i \mid \text{Relevancia}(\text{Feature}_i) \geq \text{Umbral}\}
     \]

   - Codificación de Variables Categóricas: Convertir variables categóricas en variables numéricas para que puedan ser utilizadas en modelos matemáticos. Técnicas comunes incluyen codificación one-hot y codificación de etiquetas:
     \[
     \text{Codificación One-Hot} = \begin{cases}
     1 & \text{si } \text{Categoría} = \text{Categoría}_i \\
     0 & \text{en otro caso}
     \end{cases}
     \]

   - Extracción de Características de Texto: Para datos textuales, se pueden utilizar técnicas como la representación de bolsa de palabras (bag-of-words) o TF-IDF (Term Frequency-Inverse Document Frequency) para extraer características numéricas:
     \[
     \text{TF-IDF} = \text{Frecuencia}(t, d) \times \text{IDF}(t)
     \]
     Donde \(\text{Frecuencia}(t, d)\) es la frecuencia del término en el documento y \(\text{IDF}(t)\) es la frecuencia inversa del documento.

La adecuada generación de nuevas variables y extracción de características puede mejorar significativamente el desempeño de los modelos al proporcionar información más relevante y reducir la complejidad computacional. La elección de las técnicas depende del tipo de datos y del problema específico que se está abordando.

Aplicación práctica

Aquí te muestro un ejemplo de limpieza y transformación de datos con Pandas.

Supongamos que tienes el siguiente conjunto de datos de ventas de tiendas en una hoja de Excel, pero contiene algunos datos faltantes:

Id Nombre Tienda Ventas 2018 Ventas 2019 Ventas 2020
1 Tienda A 10000 20000 0
2 Tienda B 15000 NaN 30000
3 Tienda C 8000 12000 20000
4 Tienda D NaN 8000 NaN
5 Tienda E 7000 10000 15000

Para limpiar y transformar estos datos con Pandas, primero importamos la biblioteca y cargamos los datos en un objeto DataFrame:

import pandas as pd
df = pd.read_excel('ventas_tiendas.xlsx')

A continuación, podemos usar los métodos de Pandas para limpiar y transformar los datos. Primero, podemos eliminar todas las filas que contengan valores nulos en cualquier columna:

df = df.dropna()

Entonces, podemos calcular el porcentaje de crecimiento de las ventas de cada tienda entre 2018 y 2020 utilizando la siguiente fórmula:

df['Crecimiento'] = ((df['Ventas 2020'] - df['Ventas 2018']) / df['Ventas 2018']) * 100

Finalmente, podemos ordenar los datos por el porcentaje de crecimiento para ver qué tiendas han experimentado el mayor crecimiento en las ventas:

df = df.sort_values(by=['Crecimiento'], ascending=False)

El resultado final sería un nuevo DataFrame que muestra las tiendas ordenadas por el porcentaje de crecimiento de las ventas entre 2018 y 2020:

Id Nombre Tienda Ventas 2018 Ventas 2019 Ventas 2020 Crecimiento
2 Tienda B 15000 NaN 30000 100%
1 Tienda A 10000 20000 0 -100%
5 Tienda E 7000 10000 15000 114.28%
3 Tienda C 8000 12000 20000 150%

Como se puede ver, la Tienda B experimentó el mayor crecimiento en las ventas entre 2018 y 2020, mientras que la Tienda A experimentó una caída del 100%.