Está en la página 1de 51

Módulo

Obtención y preparación de datos

Aprendizaje Esperado 4
Aprendizaje Esperado 4
Manejo de valores perdidos

Aprendizaje Esperado 4
Aplica técnicas de limpieza y preparación de datos utilizando librerías
Python para su depuración.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

4. Manejo de Valores Perdidos

Contexto
El manejo de valores perdidos es una parte crucial en el análisis de datos,
ya que los datos incompletos son una realidad común en conjuntos de
datos del mundo real. Estos valores perdidos pueden surgir por diversas
razones, como errores de entrada, equipos defectuosos o simplemente la
falta de información. Python, en combinación con bibliotecas como
Pandas, NumPy y scikit-learn, proporciona herramientas poderosas para
identificar, manejar y tomar decisiones informadas sobre los valores
perdidos. Esto puede implicar su eliminación, imputación con valores
estimados o métodos más avanzados como el uso de modelos predictivos.
El manejo adecuado de valores perdidos es esencial para garantizar la
precisión y la integridad de los análisis de datos, y para extraer
información valiosa de conjuntos de datos que, de lo contrario, podrían
ser incompletos o inutilizables.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Filtrado de la data Perdida


En la gran mayoría de datos con los que trabajamos es muy probable que
nos encontremos con valores perdidos, esto es algo muy normal. El valor
faltante puede aparecer de distintas formas por ejemplo como un signo de
interrogación, o N/A, como un 0 o simplemente como una celda en blanco,
pero en su mayoría nos lo encontramos representado como NaN que se
refiere a “no un número”, pero ¿qué podemos hacer en estos casos?

Existen muchas maneras para corregir esto y todo dependerá de la persona


que esté analizando y obviamente del problema en sí para seleccionar cual
es la mejor opción para aplicar. Las opciones típicas que debes considerar
son las siguientes:

● Lo primero que debes hacer es verificar con la persona o grupo que


recopiló los datos si es posible que se pueda encontrar el valor real
que está faltante.

● Otra posibilidad es simplemente eliminar los datos donde se encuentra


ese valor perdido. Acá tienes dos opciones, la primera sería eliminar la
variable faltante o eliminar la fila completa en donde está se

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

encuentre. Esta opción es conveniente en los casos que no se tiene


muchos datos faltantes. Toma en cuenta que se debe buscar hacer el
menor impacto posible, por lo que se debe tener cuidado al momento
de eliminar datos.

● Otra opción es reemplazar los datos, esto se puede hacer calculando


el valor promedio de la variable completa, esta es una mejor opción ya
que no se desperdician datos, sin embargo, es menos preciso ya que
necesitamos reemplazar los datos faltantes con una conjetura que
puede ser cierta como puede ser falsa. De igual forma, no siempre se
puede calcular el valor del promedio ya que no siempre tenemos datos
numéricos, puede haber datos categóricos perdidos, para estos casos
se sustituye el valor faltante por el más común de esa categoría, es
decir el que se repita más veces.

● Y la última opción que tenemos es simplemente dejar los datos


faltantes, así tal cual, como datos perdidos. En ocasiones esta puede
ser una buena decisión, por eso se deben analizar cada uno de los
casos de manera individual.

Por

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Ejemplo, podemos crear un DataFrame con valores perdidos:

La salida sería:

np.nan, None y NaT (para los tipos datetime64 [ns]) son valores estándar
perdidos para Pandas.

Encontrar valores perdidos.

Pandas proporciona funciones isnull() , isna() para detectar valores


perdidos. Ambos hacen lo mismo.

La función df.isna() devuelve un DataFrame booleano en el que cada valor


es True si el valor correspondiente en el DataFrame original es un valor
faltante (NaN o None), y False si no lo es.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Esto facilita la identificación de los valores faltantes en el DataFrame.

En este resultado, puedes ver que se han detectado los valores faltantes
en las filas 1 y 2 de la columna "Edad" y en la fila 2 de la columna "Ciudad".

También puede optar por utilizar notna() que es todo lo contrario de isna().

df.isna().any() devuelve un valor booleano para cada columna. Si falta al


menos un valor en esa columna, el resultado es Verdadero.

En este resultado, puedes ver que la columna "Nombre" no tiene valores


faltantes (False), pero tanto la columna "Edad" como la columna "Ciudad"
tienen al menos un valor faltante (True).

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

df.isna().sum() devuelve el número de valores perdidos en cada columna.

En este resultado, puedes ver que la columna "Nombre" no tiene valores


faltantes (0), pero la columna "Edad" tiene 1 valor faltante y la columna
"Ciudad" tiene 1 valor faltante.

Manejo de valores perdidos

No todos los valores faltantes vienen en formato np.nan o None agradable


y limpio. Por ejemplo, "?" y los caracteres “- -” en la columna de nuestros
DataFrames no nos brindan ninguna información o conocimiento valioso,
por lo que esencialmente son valores perdidos. Sin embargo, estos
caracteres no pueden ser detectados por Pandas como valor perdido.

Si sabemos qué tipo de caracteres se usaron como valores perdidos en el


conjunto de datos, podemos manejarlos mientras creamos el DataFrame
usando el parámetro na_values:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Primero creamos el csv, o podemos importar uno.

Luego lo importamos:

La salida, sin na_values sería:

con na_values:

Otra opción es usar la función pandas replace() para manejar estos valores
después de que se crea un DataFrame.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

El resultado sería el mismo. El parámetro inplace guarda los cambios en


el marco de datos (si es True)

Podemos eliminar una fila o columna con valores perdidos usando la


función dropna(). Cómo se usa el parámetro para establecer la condición
para eliminar.

how = 'any': eliminar si falta algún valor

how = 'all': eliminar si faltan todos los valores

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Su salida:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Ejercicio guiado: trabajo con valores perdidos.


Importamos numpy y pandas. Pandas y NumPy trabajan mano a mano;
Pandas para la manipulación de datos de alto nivel y NumPy para las
operaciones numéricas de bajo nivel. Ambos se complementan, y es común
verlos usados juntos en tareas de análisis de datos.

import pandas as pd

import numpy as np

# Creamos un DataFrame con valores perdidos

df = pd.DataFrame({

'Nombre': ['Ana', 'Luis', 'Carlos', None],

'Edad': [28, np.nan, 29, 42],

'Ciudad': ['Madrid', 'Barcelona', None, 'Valencia']

})

print(df)

Utilizaremos las funciones isna() y notna() para detectar valores perdidos.

# Encontrar valores perdidos

valores_perdidos = df.isna()

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

print(valores_perdidos)

Podemos contar cuántos valores perdidos hay en cada columna.

# Contar valores perdidos

conteo_perdidos = df.isna().sum()

print(conteo_perdidos)

Verificar si alguna columna contiene al menos un valor perdido.

# Verificar la presencia de valores perdidos

any_perdidos = df.isna().any()

print(any_perdidos)

Si los valores perdidos vienen en diferentes formatos como "?", podemos


reemplazarlos con NaN al cargar el DataFrame o después con replace().

# Reemplazar "?" con NaN

df.replace("?", np.nan, inplace=True)

Decidir si eliminar filas o columnas con valores perdidos.

# Eliminar filas con valores perdidos

df_limpio = df.dropna()

# Eliminar columnas con valores perdidos

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

df_limpio_columnas = df.dropna(axis=1)

Reemplazar los valores perdidos con un valor estimado, como la media o la


moda.

# Reemplazar valores perdidos en "Edad" con la media

df['Edad'].fillna(df['Edad'].mean(), inplace=True)

# Reemplazar valores perdidos en "Ciudad" con la moda

df['Ciudad'].fillna(df['Ciudad'].mode()[0], inplace=True)

Como vemos, la opción axis nos indica si eliminamos la fila del dato
faltante o la columna.

Imputación de datos
La imputación de datos es un método en el que los valores faltantes en
cualquier variable o DataFrame se rellenan con algunos valores numéricos
para realizar la tarea. Con este método, el tamaño de la muestra sigue
siendo el mismo, solo los espacios en blanco que faltaban ahora se llenan
con algunos valores. Este método es fácil de usar pero reduce la varianza
del conjunto de datos.

Puede haber varias razones para imputar datos, muchos conjuntos de


datos del mundo real que contienen valores faltantes que pueden estar en
cualquier forma, como espacios en blanco, NaN, ceros, cualquier número
entero o cualquier símbolo categórico. En lugar de simplemente eliminar
las Filas o Columnas que contienen los valores perdidos, lo que conlleva
la pérdida de datos que pueden ser valiosos, una mejor estrategia es
imputar los valores perdidos.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Hay dos aproximaciones comúnmente usadas para la imputación de los


valores perdidos.

La primera técnica consiste en rellenar estos valores con la media (o


mediana) de los datos de la variable en el caso de que se trate de una
variable numérica. Para el caso de las variables categóricas imputamos los
valores perdidos con la moda de la variable.

Pandas nos ofrece una función (fillna) para realizar esta imputación de
manera sencilla.

Reemplazo de valores perdidos

La función fillna() de Pandas maneja convenientemente los valores


perdidos. Usando fillna(), los valores perdidos pueden ser reemplazados
por un valor especial o un valor agregado como media, mediana. Además,
los valores perdidos se pueden reemplazar con el valor anterior o
posterior, lo cual es bastante útil para conjuntos de datos de series de
tiempo.

Ejemplo:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Salida:

En este ejemplo, hemos llenado los valores faltantes en la columna


'Nombre' con 'Desconocido' y los valores faltantes en la columna 'Edad'
con la media de esa columna. Puedes personalizar el valor con el que
deseas llenar los valores faltantes según tus necesidades, por ejemplo,
con el promedio, moda, etc.

Imputación de valores cualitativos


Si los datos nos dicen en cual de determinadas categorías no numéricas
nuestros ítems van a caer, entonces estamos hablando de datos
cualitativos o categóricos; ya que los mismos van a representar
determinada cualidad que los ítems poseen. Dentro de esta categoría
vamos a encontrar datos como: el sexo de una persona, el estado civil, la
ciudad natal, o los tipos de películas que le gustan. Los datos categóricos
pueden tomar valores numéricos (por ejemplo, "1" para indicar

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

"masculino" y "2" para indicar "femenino"), pero esos números no tienen


un sentido matemático.

Existen varias estrategias comunes para imputar valores cualitativos:

Imputación con la moda: En este enfoque, se reemplazan los valores


faltantes con la categoría que aparece con más frecuencia en el conjunto
de datos. Esto es similar a llenar con el valor más común.

Imputación con una categoría especial: A veces, se crea una categoría


especial, como "Desconocido" o "Sin información", y se utilizan para
reemplazar los valores faltantes. Esto permite mantener un registro de que
los datos estaban ausentes.

Imputación basada en reglas o modelos: En algunos casos, es posible


utilizar reglas específicas o modelos predictivos para imputar valores
cualitativos faltantes. Por ejemplo, se pueden usar algoritmos de
clasificación para predecir la categoría más probable en función de otras
características del conjunto de datos.

Imputación secuencial: Se pueden realizar múltiples pasos de imputación,


primero imputando valores cualitativos y luego numéricos, o viceversa.
Esto puede ser útil cuando se tienen datos mixtos en un conjunto de datos.

La elección de la estrategia de imputación depende del contexto y la


naturaleza de los datos. Es importante considerar el impacto de la
imputación en los resultados del análisis y evaluar si la estrategia
seleccionada es la más apropiada para los objetivos del estudio.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Salida:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

En este ejemplo, hemos calculado la moda del conjunto de datos original


y luego llenamos los valores faltantes en la columna "Color_Favorito" con
la moda utilizando fillna. El argumento inplace=True modifica el
DataFrame original en su lugar. Después de la imputación, los valores
faltantes se llenan con "Azul", que es la moda de la columna.

Técnicas avanzadas de imputación con k-NN.


La imputación con el algoritmo k-NN (k-Nearest Neighbors) es una técnica
avanzada que se utiliza para rellenar valores faltantes en un conjunto de
datos utilizando información de las observaciones vecinas. En el contexto
de datos tabulares, como un DataFrame de pandas, el k-NN considera las
características de las observaciones circundantes para estimar el valor
faltante.

El proceso de imputación con k-NN implica los siguientes pasos:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

La imputación con k-NN es una técnica poderosa, pero también


computacionalmente intensiva, especialmente en conjuntos de datos
grandes. Es importante tener en cuenta que el rendimiento del algoritmo
depende en gran medida de la elección de las características, la métrica
de distancia y el valor de k. Además, es crucial dividir los datos en
conjuntos de entrenamiento y prueba para evaluar la efectividad de la
imputación.

En resumen, KNN tiene los siguientes pasos básicos:

● Calcular la distancia

● Encontrar sus vecinos más cercanos

● Votar por las etiquetas

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

En Python, puedes utilizar bibliotecas como scikit-learn para implementar


la imputación con k-NN. Por ejemplo, KNNImputer de scikit-learn es una
clase que te permite realizar esta imputación de manera sencilla:

La salida después de aplicar la imputación knn:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Transformación de la data
La transformación de los datos es necesaria cuando entre las variables
existen diferentes escalas o existen demasiadas o pocas variables,
entonces se realiza una normalización o una estandarización de los datos
mediante técnicas de reducción o aumento de la dimensión, así como el
escalamiento simple o multidimensional.

Si en el análisis exploratorio se indica la necesidad de transformar algunas


variables, se podrán aplicar algunas de estas cuatro transformaciones:

● Transformaciones lógicas

● Transformaciones lineales

● Transformaciones algebraicas

● Transformaciones no lineales

Estas fases mencionadas en los puntos anteriores, constituyen el proceso


de pre-procesamiento de los datos y para aplicar estos conceptos, se
presenta el siguiente ejemplo:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Como podemos observar, existen registros con datos faltantes. El cliente


del registro o renglón 5 no tiene salario y el cliente del renglón 7 no tiene
edad.

Cuando se tienen datos faltantes, hay varias estrategias que se pueden


seguir, sobre todo si se ha comprobado la aleatoriedad de dichos datos
ausentes.

Una estrategia es usar el método de aproximación de casos completos que


consiste en incluir en el análisis sólo los casos con datos completos,
únicamente filas cuyos valores para todas las variables son válidos.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

La salida final será:

Remover duplicados
Un problema con el que nos podemos encontrar de forma más frecuente
es la identificación de valores únicos en una lista. Ya que la existencia de
valores duplicados no es de interés para el análisis que se desea realizar.
Por eso, saber cómo eliminar los valores duplicados en una lista es un
truco que debemos tener en nuestro arsenal. Otro truco que también
puede ser de interés es contar el número de ocurrencias de cada valor en
una lista, lo que también se comentará en esta entrada.

La función unique() y el método drop_duplicates() en pandas se utilizan


para tratar con valores únicos en un DataFrame o en una serie, pero tienen
propósitos y aplicaciones ligeramente diferentes:

unique(): Esta función se usa para obtener una serie o matriz de valores
únicos de una columna específica en un DataFrame o una serie.
Proporciona una lista de todos los valores distintos que aparecen en esa
columna sin eliminar filas duplicadas del DataFrame original.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

drop_duplicates(): Este método se utiliza para eliminar filas duplicadas de


un DataFrame basándose en una o más columnas específicas. No devuelve
una lista de valores únicos, sino un nuevo DataFrame que contiene solo
las filas únicas.

Ejemplo:

La salida:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Utilización de funciones de mapeos


El mapeo de datos en Pandas es una técnica que permite asignar nuevos
valores a los datos existentes en función de un conjunto de reglas
definidas. Esto es útil en diversas situaciones, como convertir categorías
en números, cambiar etiquetas de columnas, o aplicar una función a cada
elemento de una Serie o DataFrame. Las dos formas principales de realizar
mapeo de datos en Pandas son:

Mapeo con diccionarios: Puedes utilizar un diccionario en Python para


asignar nuevos valores a partir de un conjunto de claves y valores:

En este ejemplo, estamos asignando el valor 1 a "Si" y el valor 0 a "No" en


la columna "Compra" del DataFrame.

Mapeo con funciones: También puedes utilizar funciones personalizadas


para realizar el mapeo. Esto es útil cuando necesitas realizar
transformaciones más complejas. Aquí hay un ejemplo:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Reemplazo de valores
El reemplazo de valores en Pandas te permite modificar valores
específicos en un DataFrame o Serie de acuerdo a tus necesidades. Esto
es útil para corregir datos erróneos, cambiar etiquetas, o actualizar valores
en función de ciertas condiciones. Pandas proporciona varias formas de
realizar reemplazos, y a continuación, se describen algunas de las técnicas
comunes:

Reemplazo por valor constante: Puedes reemplazar todos los valores


iguales a un valor específico por otro valor.

Reemplazo condicional: Puedes reemplazar valores que cumplan ciertas


condiciones utilizando operadores lógicos.

Reemplazo por mapeo: Puedes reemplazar valores en función de un


mapeo definido en un diccionario. Esto es útil para cambiar etiquetas o
convertir categorías en números

Reemplazo con función: También puedes utilizar una función


personalizada para realizar el reemplazo. Esto es útil cuando necesitas
aplicar transformaciones más complejas.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Por ejemplo:

Renombrando índices y ejes


En Pandas, puedes cambiar los nombres de índices y ejes en tus
DataFrames y Series mediante varias técnicas. Esto es útil para darles
nombres más significativos o para cambiarlos según tus necesidades.

Renombrando columnas

Puedes cambiar los nombres de las columnas de un DataFrame utilizando


el atributo columns o el método rename()

La ventaja de rename() es que te permite especificar un diccionario para


realizar múltiples cambios a la vez.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Renombrando índices

Para cambiar los nombres de los índices (ya sea de filas o columnas),
puedes utilizar el método set_index() y especificar los nuevos nombres.

Esto reemplazará el índice actual con el nuevo valor "NuevoIndice".

Renombrando ejes

Para cambiar los nombres de los ejes, puedes utilizar el método


rename_axis(). Esto es útil cuando deseas asignar un nombre a un eje
particular (ya sea filas o columnas).

En este caso, "NuevoNombreDeFila" se convierte en el nombre del eje de


filas.

Recuerda que, en la mayoría de los casos, estos métodos proporcionan la


opción inplace=True que modifica el DataFrame original. Si no lo utilizas,
se crea una copia del DataFrame con los cambios y el DataFrame original
permanece sin cambios.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Discretización y Binning
Los datos del mundo real tienden a ser ruidosos. Los datos ruidosos son
datos con una gran cantidad de información adicional sin sentido llamada
ruido. Las rutinas de limpieza de datos intentan suavizar el ruido mientras
identifican valores atípicos en los datos.

Hay tres técnicas de suavizado de datos de la siguiente manera:

● Binning: Los métodos de binning suavizan un valor de datos ordenados


consultando su «vecindad», es decir, los valores que lo rodean.
● Regresión: ajusta los valores de los datos a una función. La regresión
lineal implica encontrar la línea «mejor» para ajustar dos atributos (o
variables) de modo que un atributo pueda usarse para predecir el otro.
● Análisis de valores atípicos: los valores atípicos pueden detectarse
mediante agrupación, por ejemplo, cuando los valores similares se
organizan en grupos o «agrupaciones». De manera intuitiva, los valores
que quedan fuera del conjunto de grupos pueden considerarse valores
atípicos.

El binning también se puede utilizar como técnica de discretización. Aquí,


la discretización se refiere al proceso de convertir o dividir atributos,
características o variables continuas en atributos / características /
variables / intervalos discretizados o nominales.

Por ejemplo, los valores de los atributos se pueden discretizar aplicando


agrupaciones de igual ancho o igual frecuencia y luego reemplazando
cada valor de agrupación por la media o mediana de agrupación, como en
el suavizado por medias de agrupación o el suavizado por medianas de
agrupación, respectivamente. Luego, los valores continuos se pueden
convertir a un valor nominal o discretizado que es el mismo que el valor
de su bin correspondiente.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Un ejemplo sencillo de discretización podría ser la clasificación de edades


en grupos, como "niños", "adolescentes" y "adultos", en lugar de trabajar
con edades individuales. Esto facilita el análisis y la interpretación de los
datos.

En pandas, puedes realizar la discretización utilizando la función cut().


Puedes especificar los límites de los intervalos o el número de divisiones
(bins) deseadas, y pandas asignarán cada valor a la categoría
correspondiente.

Por ejemplo, si tienes una serie de edades y deseas agruparlas en tres


categorías: "jóvenes", "adultos" y "mayores", puedes hacerlo de la siguiente
manera:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Y su salida:

Detección y filtrado de Outliers


Los outliers en nuestro DataSet serán los valores que se “escapan al rango
en donde se concentran la mayoría de muestras”.

¿Y por qué nos interesa detectar estos Outliers?

Para identificar observaciones que se desvían significativamente del resto


del conjunto de datos. Los outliers pueden afectar negativamente el
análisis estadístico y los modelos predictivos.

Si lo vemos gráficamente:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Ahora un ejemplo en código:

Este código crea un DataFrame con una columna de edades, calcula el


rango intercuartil (IQR) y luego define los límites para identificar outliers.
Las observaciones que caen fuera de estos límites se filtran en un nuevo
DataFrame.

El resultado mostrará el DataFrame original y el DataFrame filtrado sin los


valores atípicos:

Los Outliers pueden significar varias cosas:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

ERROR: Si tenemos un grupo de “edades de personas” y tenemos una


persona con 160 años, seguramente sea un error de carga de datos. En
este caso, la detección de outliers nos ayuda a detectar errores.

LIMITES: En otros casos, podemos tener valores que se escapan del “grupo
medio”, pero queremos mantener el dato modificado, para que no
perjudique al aprendizaje del modelo de ML.

Punto de Interés: puede que sean los casos “anómalos” los que queremos
detectar y que sean nuestro objetivo (¡y no nuestro enemigo!)

Uso de PyOD

PyOD es una biblioteca especializada en detección de anomalías (outliers)


que no viene incluida en las bibliotecas estándar de Python. Debes
instalarla previamente.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

La salida:

Este código utiliza el modelo KNN de PyOD para detectar outliers en un


conjunto de datos de ejemplo. La función decision_function devuelve
puntajes de anomalía, y la función predict etiqueta cada muestra como
outlier (1) o no outlier (0).

Permutación de la data y muestreos aleatorios


Permutación de la data

La permutación de la data es el proceso de reorganizar aleatoriamente los


datos en un conjunto de datos. Esto puede ser útil para realizar pruebas
de hipótesis y estimar distribuciones de probabilidad, entre otras
aplicaciones.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

En Python, puedes permutar los datos utilizando librerías como NumPy.

La salida:

Vemos cómo se reorganizó la data del array.

Otro ejemplo:

Creamos el dataframe

Ahora, vamos a permutar las filas de este DataFrame:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

En este ejemplo, utilizamos el método sample de Pandas con frac=1 para


permutar las filas del DataFrame. Luego, utilizamos reset_index para
restablecer el índice del DataFrame. El resultado será un DataFrame con
las mismas filas, pero en un orden aleatorio.

Ten en cuenta que, en este caso, las permutaciones son aleatorias, por lo
que cada vez que ejecutes el código, obtendrás un orden diferente de las
filas en el DataFrame permutado.

Muestreos aleatorios

El muestreo aleatorio implica seleccionar un subconjunto aleatorio de


datos de tu conjunto de datos original. Esto puede ser útil para crear
conjuntos de entrenamiento y prueba, realizar validación cruzada, o para
realizar análisis exploratorios de datos. En Python, puedes utilizar la
librería random o la función sample de Pandas para realizar muestreos
aleatorios.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Manipulación de Strings
Ya hemos estudiado la manipulación y funciones de string en módulos
anteriores, sin embargo, haremos un repaso de las funciones más usadas
y que pueden ser de ayuda al momento de limpiar o transformar nuestros
DataFrames.

Concatenación:

Longitud:

Indexado y slicing:

Formato (f-strings):

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Métodos de la clase String


Python ofrece una variedad de métodos incorporados para realizar tareas
comunes de manipulación de cadenas, como split, strip, replace, upper,
lower, startswith, endswith, find, join y muchos otros. Por ejemplo:

Expresiones Regulares
Las expresiones regulares, también conocidas como regex o regexp, son
patrones que se utilizan para realizar búsquedas y manipulaciones de
texto. Estos patrones son especialmente útiles cuando deseas buscar,
extraer o reemplazar cadenas de texto que siguen un patrón específico.
Las expresiones regulares se componen de caracteres literales y
caracteres especiales que representan clases de caracteres,
cuantificadores y más.

Por ejemplo, puedes usar una expresión regular para buscar todas las
direcciones de correo electrónico en un texto o para validar que un
número de teléfono cumple con un formato específico.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

En Python, el módulo re te permite trabajar con expresiones regulares.


Puedes realizar operaciones como búsqueda, coincidencia, extracción y
reemplazo de cadenas utilizando expresiones regulares. La biblioteca re
proporciona funciones como search, match, findall, sub, entre otras, que
facilitan el trabajo con patrones regulares.

En este ejemplo, el patrón r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-


Z|a-z]{2,7}\b' representa una dirección de correo electrónico válida. La
función findall del módulo re encuentra todas las coincidencias en el
texto y las almacena en la lista direcciones.

Funciones vectorizadas
Las funciones vectorizadas son funciones que operan en arrays completos
de datos en lugar de elementos individuales. Esto permite realizar
operaciones eficientes y paralelizadas en estructuras de datos, como
arrays NumPy en Python, sin necesidad de bucles explícitos. El término
"vectorizado" se deriva de las operaciones vectoriales que son típicas en
álgebra lineal y cálculo.

En Python, NumPy es una biblioteca que proporciona muchas funciones


vectorizadas, lo que significa que puede aplicar una función a un array
NumPy y obtener un resultado para cada elemento en el array, sin

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

necesidad de escribir bucles explícitos. Esto hace que el código sea más
eficiente y más legible.

Por ejemplo, supongamos que tienes un array de números y quieres


calcular el cuadrado de cada número en ese array. Puedes hacerlo de
manera vectorizada utilizando NumPy de la siguiente manera:

En este ejemplo, la función np.square se aplica a cada elemento del


array arr de manera eficiente sin necesidad de un bucle for.

Más ejemplos:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Manipulación de la data dentro de un


DataFrame
La manipulación de datos dentro de un DataFrame en pandas te
proporciona la capacidad de realizar una variedad de operaciones para
limpiar, transformar y manipular tus datos de manera efectiva.

Operaciones que pueden realizarse:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Aplicación de funciones dentro de un


DataFrame (apply)
En pandas, la función apply es una poderosa herramienta que te permite
aplicar una función a lo largo de filas o columnas de un DataFrame. Esta
función es especialmente útil cuando necesitas realizar operaciones
personalizadas en tus datos.

Funcionamiento:

Aplicación a lo largo de filas o columnas: apply puede aplicarse tanto a lo


largo de filas (ejes 0) como a lo largo de columnas (ejes 1) de un
DataFrame. Puedes especificar el eje utilizando el argumento axis.

Función personalizada: La función que deseas aplicar debe ser una función
personalizada que toma una fila o una columna como entrada y devuelve
un valor transformado. Esta función puede ser una función definida por el
usuario o una función lambda.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Sintaxis básica: La sintaxis básica para usar apply en un DataFrame es la


siguiente:

Ejemplo de aplicación a lo largo de filas: Puedes aplicar una función a lo


largo de filas de un DataFrame de la siguiente manera:

Ejemplo de aplicación a lo largo de columnas: Puedes aplicar una función


a lo largo de columnas utilizando el eje 0:

Aplicación a múltiples columnas o filas: Puedes aplicar una función a


múltiples columnas o filas proporcionando una lista de nombres de
columnas o índices de filas como argumentos. Esto es útil para realizar
operaciones en lotes.

Retorno de valores: La función aplicada a través de apply puede devolver


un solo valor o una Serie (columna) de valores. Dependerá de la operación
que estés realizando.

Ejemplos de uso: Algunos ejemplos comunes de uso de apply incluyen la


normalización de datos, la aplicación de funciones de cálculo
personalizado, la limpieza de texto o la extracción de información de
texto.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Ejemplo:

Salida:

Función apply con expresiones lambda


La función apply junto con expresiones lambda es una opción para realizar
transformaciones específicas en los datos de un DataFrame.

Aquí hay una breve descripción de cómo funciona:

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

apply: La función apply, que vimos en la sección anterior, se utiliza para


aplicar una función a lo largo de un eje del DataFrame (ya sea a lo largo
de filas o columnas).

Expresiones Lambda: Las expresiones lambda son funciones anónimas y


pequeñas que se utilizan en línea sin necesidad de definirlas previamente.

En el ejemplo, hemos utilizado expresiones lambda para duplicar los


valores de la columna 'A' y sumar los valores de las columnas 'A' y 'B' en
cada fila.

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Referencias
● Ichi pro: Serie de limpieza de datos con python
https://ichi.pro/es/serie-de-limpieza-de-datos-con-python-
40387192062664

● Ciencia de Datos: Test de permutación para el contraste de hipótesis


con Python
https://cienciadedatos.net/documentos/pystats03-test-permutacion-
python.html

● Jacobsoft: preprocesamiento de datos


https://www.jacobsoft.com.mx/es_mx/pre-procesamiento-de-datos-
con-python/

● Cepal: imputación de datos


https://repositorio.cepal.org/server/api/core/bitstreams/02dd479f-
fae2-43c4-b5ec-5419fa7f6190/content

● Youtube – Código Máquina: imputación con python


https://youtu.be/XiKYdHUsgyM?si=j4Ssfn--lyXBPPpA

● Youtube – Código Máquina: Descubre cómo manejar Datos ó Valores


Faltantes Imputando con K-Vecinos más cercanos (KNN) y Python
https://youtu.be/dToVCgCPW1o?si=c3_i-6FjIr-UcbW9

Módulo
Obtención y Preparación de Datos
Aprendizaje Esperado 4
Manejo de valores perdidos

Módulo
Obtención y Preparación de Datos

También podría gustarte