No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

14 Días
10 Hrs
2 Min
22 Seg

Eliminación de valores faltantes: pairwise y listwise

18/21
Recursos

Aportes 13

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Eliminacion de Valores Faltantes

Cuando se trata de valores faltantes tenemos dos aproximaciones para el tratamiento de los mismos:

  • Eliminacion de valores faltantes: La eliminación de valores faltantes asume que los valores faltantes están perdidos completamente al azar (MCAR). En cualquier otro caso, realizar una eliminación de valores faltantes podrá ocasionar sesgos en los análisis y modelos subsecuentes. Por tanto, es importante investigar que mecanismos tienen los datos para asi evitar los sesgos a la hora de eliminarlos
  • Imputacion de valores faltantes: consiste en añadir valores en los datos faltantes para mantener el registro en el dataset

Pasos para la Eliminacion de Valores Faltantes

  • Observa el numero de observaciones y variables que tiene el conjunto de datos
riskfactors_df.shape
--> (245, 34)
  • Pairwise deletion (Eliminacion por pares)
#Pandas por defecto,ignora los registros con datos faltantes a la hora de hacer algun calculo
(
    riskfactors_df
    .weight_lbs
    .mean()
)
--> 174.26808510638298
  • Listwise deletion or Complete case (Eliminacion por lista o caso completo)
  1. Con base a 1 columna
(
    riskfactors_df
    .dropna(
        subset=['weight_lbs'], # indica la variable donde buscar los valores faltantes
        how='any' # any indica en cualquier registro que aparezca un valor faltante
    )
)
  1. Con base a 2 columnas
(
    riskfactors_df
    .dropna(
        subset=['weight_lbs', 'height_inch'], # indica el parametro donde buscar los valores faltantes
        how='any' # algoritmo con el que eliminar los registros
    )
    .shape
)

--> (234, 34)
  1. Con base a 2 columnas que tengan valores faltantes en los mismos registros
# elimina los registros en los que hayan valores faltantes en dos variables al mismo tiempo
(
    riskfactors_df
    .dropna(
        subset=['weight_lbs', 'height_inch'], # indica el parametro donde buscar los valores faltantes
        how='all' # all indica los registros donde hayan valores faltantes en ambas variables
    )
    .shape
)
--> (244, 34)
  • Representacion Grafica tras la eliminacion de valores faltantes
  1. Con any
(
    riskfactors_df
    .dropna(
        subset=['weight_lbs', 'height_inch'], # indica el parametro donde buscar los valores faltantes
        how='any' # any indica en cualquier registro que aparezca un valor faltante
    )
    .select_columns(['weight_lbs', 'height_inch'])
    .pipe(missingno.matrix)
)
  1. Con all
(
    riskfactors_df
    .dropna(
        subset=['weight_lbs', 'height_inch'], # indica el parametro donde buscar los valores faltantes
        how='all' # algoritmo con el que eliminar los registros
    )
    .select_columns(['weight_lbs', 'height_inch'])
    .pipe(missingno.matrix)
)

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.dropna.html

how{‘any’, ‘all’}, default ‘any’

Determine if row or column is removed from DataFrame when we have at least one NA or all NA.

  • ‘any’ : If any NA values are present, drop that row or column.

  • ‘all’ : If all values are NA, drop that row or column.

En este link (https://rstudio-pubs-static.s3.amazonaws.com/821023_ab4ec671210149bb906d38d12bb951e4.html) podrán ampliar la información que hemos visto en este curso a nivel teórico.

Dejo aquí las imagenes que hice para entender mejor esta clase. 1. **<u>Pairwise deletion</u>** ![](https://static.platzi.com/media/user_upload/image-7721ba78-a72e-4f3d-a990-204584abba27.jpg) 1. **<u>Listwise deletion</u>** * Con base a 1 columna. ![](https://static.platzi.com/media/user_upload/image-18b2fbca-a8b7-4d6e-994b-b548cd14d64d.jpg) * **Con base a 2 o más columnas.** ![](https://static.platzi.com/media/user_upload/image-ca202889-7d14-4fac-a122-30bcba9fd462.jpg)

Al parecer, el parametro “how” solo tiene uso si hay mas de 2 variables en cuestion a las que identificaremos sus valores faltantes.

La eliminación de valores faltantes es una técnica común para manejar datos incompletos. Las dos principales estrategias son \*\*eliminación por pares (pairwise deletion)\*\* y \*\*eliminación por lista (listwise deletion)\*\*. \### 1. \*\*Eliminación por Lista (Listwise Deletion)\*\* En este método, se eliminan las filas que contienen algún valor faltante en cualquiera de las variables involucradas en el análisis. Este enfoque es simple pero puede resultar en la pérdida de mucha información si hay muchos valores faltantes. \#### Ejemplo en Pandas: ```python import pandas as pd \# Crear un DataFrame de ejemplo con algunos valores faltantes data = {'Variable1': \[1, 2, None, 4, 5], 'Variable2': \[5, None, 7, 8, 9], 'Variable3': \[None, 1, 2, None, 4]} df = pd.DataFrame(data) \# Eliminación por lista: se eliminan filas que contengan algún valor nulo df\_listwise = df.dropna() print("DataFrame después de la eliminación por lista:") print(df\_listwise) ``` \#### Ventajas: \- Fácil de implementar. \- Asegura que se utilicen solo datos completos. \#### Desventajas: \- Puede llevar a la eliminación de muchas filas si hay muchas variables con valores faltantes. \--- \### 2. \*\*Eliminación por Pares (Pairwise Deletion)\*\* En la eliminación por pares, se realiza un análisis variable por variable, eliminando solo las filas donde la variable involucrada tenga valores faltantes. Esto permite que se utilicen la mayor cantidad posible de datos, aunque algunas comparaciones se hacen con menos datos que otras. Este enfoque es útil para calcular correlaciones o regresiones entre pares de variables, ya que solo se eliminan los valores faltantes en las variables involucradas en el análisis particular. \#### Ejemplo de correlación usando eliminación por pares: ```python \# Calcular correlación por pares (omitimos valores faltantes sólo para el par de columnas analizado) pairwise\_corr = df.corr(method='pearson', min\_periods=1) print("Correlación por pares:") print(pairwise\_corr) ``` \#### Ventajas: \- Se utiliza la mayor cantidad posible de datos. \- Es útil cuando se tiene una gran cantidad de valores faltantes y no se quiere perder información. \#### Desventajas: \- Los resultados pueden no ser consistentes entre análisis de diferentes variables, ya que se usan subconjuntos distintos de datos. \--- \### Comparación entre Listwise y Pairwise: \- \*\*Listwise deletion\*\* es más estricto y consistente pero puede resultar en una pérdida significativa de datos. \- \*\*Pairwise deletion\*\* conserva más información, pero las comparaciones entre diferentes análisis pueden basarse en distintos subconjuntos de datos, lo que puede complicar la interpretación.
Buenas 👋 me aventé una función para hacer un análisis rápido del conteo de nulos por columna. Cuando alguna de ellas tenga un porcentaje mayor a la "tolerancia de nulos" indicada, las agrupará en una lista llamada "too much nools", aquellas que tengan nulos, pero que no se acerquen a esta proporción, estarán en otra lista llamada "acceptable nulls", y también otra donde se indiquen aquellas que no tengan nulos. Si a alguien se le ocurre cómo mejorarla, se agradecería una propuesta. ```js #-func 21-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# """ Conteo de valores nulos en cada columna de un df. recibe un df y devuelve: - (1) diccionario con {'columna': número nulos} - (2) print de los valores nulos por columna (summary) Args: - df: DataFrame a analizar - print_counts: imprimir conteo de nulos por col (OPCIONAL) - save_list: guardar el diccionario con los nulos (OPCIONAL) - acceptable_nuls: flotante que indica el porcentaje de nulos aceptable en una columna. Default -> (5% => 0.05) - summary: resumen de las columnas con nulos (OPCIONAL - Se recomienda activarlo) """ def count_nulls_per_col(self, print_counts: bool= False, save_list: bool= False, acceptable_nulls: float = 0.05, summary: bool= False) -> dict | str: df = self._obj dict_nulls = {} for col in df.columns: dict_nulls[col] = df[col].isnull().sum() if print_counts: print(f'\nCol: "{col}" tiene: {"-*"*3} {df[col].isnull().sum()}') if summary: calc = df.shape[0] * acceptable_nulls #resumen cols_no_nulls = ([col for col, val in dict_nulls.items() if val == 0 ]) cols_acceptable_nulls = [col for col, val in dict_nulls.items() if val <= calc and val > 0] cols_non_acceptable_nulls= [col for col, val in dict_nulls.items() if val > calc] print(f'ROWS number: {df.shape[0]}, COLUMNS number: {df.shape[1]}\n') print(f'- Columns without nulls: \n {cols_no_nulls}\n') print(f'- Acceptable columns (nulls less than {int(acceptable_nulls *100)}%):\n {cols_acceptable_nulls}\n') print(f'- Too much nulls:\n {cols_non_acceptable_nulls}\n') print(f'- Null value tolerance: {acceptable_nulls * 100}%') if save_list: dict_nulls = {key_col: nulls_num for key_col, nulls_num in dict_nulls.items() if nulls_num != 0} return dict_nulls ```
Si se fijaron, en dropna cuando puso el parámetro "all" quedaron **más** elementos que con el parámetro "any" Esto se debe a que "all" solo elimina si todos los valores de las filas o columnas seleccionadas son NaN. Y "any" elimina todas las filas o columnas seleccionadas si cualquiera de los valores son NaN. Es decir, any elimina la fila si peso O talla son NaN all elimina la fila SOLO SI peso Y talla son NaN (por eso solo elimina un valor) Les dejo mi apunte sobre este tema El parámetro `how` de la función `dropna` en Pandas es fundamental para determinar cómo se deben tratar las filas o columnas que contienen valores `NaN` (Not a Number) cuando se limpian los datos. Este parámetro define el criterio bajo el cual una fila o columna será eliminada de un DataFrame debido a la presencia de valores nulos. * **Evaluación de Datos**: Antes de decidir entre `'any'` y `'all'`, es importante evaluar la naturaleza de los datos faltantes y el impacto de su eliminación en el análisis posterior. * **Complemento con** `fillna`: Para minimizar la pérdida de datos, considere utilizar el método `fillna` para imputar valores faltantes antes de optar por eliminar filas o columnas con `dropna`. * **Revisión Manual**: En algunos casos, especialmente con datasets pequeños, una revisión manual de los datos puede ofrecer una mejor perspectiva sobre cómo manejar los valores `NaN`. ### Uso ```js how : {'any', 'all'}, default 'any' ``` ### Descripción de los argumentos: * `'any'`: Si se selecciona este valor, la función `dropna` eliminará cualquier fila o columna que contenga al menos un valor `NaN`. Es el valor por defecto porque es una opción conservadora que permite eliminar los datos incompletos sin descartar en exceso filas o columnas que podrían tener la mayoría de sus valores válidos. * `'all'`: Al elegir `'all'`, `dropna` solo eliminará las filas o columnas donde todos los valores son `NaN`. Este enfoque es más permisivo y útil cuando solo se desea eliminar filas o columnas que estén completamente vacías, lo cual puede ser indicativo de datos faltantes en su totalidad o de registros que no fueron ingresados correctamente. ***Buenas prácticas*** * **Evaluación de Datos**: Antes de decidir entre `'any'` y `'all'`, es importante evaluar la naturaleza de los datos faltantes y el impacto de su eliminación en el análisis posterior. * **Complemento con** `fillna`: Para minimizar la pérdida de datos, considere utilizar el método `fillna` para imputar valores faltantes antes de optar por eliminar filas o columnas con `dropna`. * **Revisión Manual**: En algunos casos, especialmente con datasets pequeños, una revisión manual de los datos puede ofrecer una mejor perspectiva sobre cómo manejar los valores `NaN`.
Por favor me pueden ayudar con el siguiente error cuando ejecuto el siguiente código:```python riskfactors_df.mean(skipna=False) ```![]()![](https://ibb.co/193ZmDm)```python TypeError: 'Categorical' with dtype category does not support reduction 'mean' Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings... ```TypeError: 'Categorical' with dtype category does not support reduction 'mean' Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings...
(
    riskfactors_df
    .dropna(
        subset=["weight_lbs", "height_inch"],
        how="any"
    )
    .select_columns(["weight_lbs", "height_inch"])
    .pipe(missingno.matrix)
) 

18. Eliminación de valores faltantes: pairwise y listwise

¿Cómo lograrlo?

  • Eliminación de valores faltantes. Pandas hace pairwise deletion en las operaciones de numeros. Método preferido
  • Imputación de valores faltantes