No tienes acceso a esta clase

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

Amplía tu conjunto de herramientas para explorar valores faltantes

5/17
Recursos

Aportes 9

Preguntas 0

Ordenar por:

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

Solucion planteada por el profe:

def missing_mosaic_plot(
        self,
        target_var: str,
        x_categorical_var: str,
        y_categorical_var: str,
        ax = None
    ):
        return (
            self._obj
            .assign(
                **{target_var: lambda df: df.weight.isna().replace([True, False], ["NA", "!NA"])}
            )
            .groupby(
                [x_categorical_var, y_categorical_var, target_var],
                dropna=False,
                as_index=True,
            )
            .size()
            .pipe(
                lambda df: mosaic(
                    data=df,
                    properties=lambda key: {"color": "r" if "NA" in key else "gray"},
                    ax=ax,
                    horizontal=True,
                    axes_label=True,
                    title="",
                    labelizer=lambda key: "",
                )
            )
        )


5. Amplía tu conjunto de herramientas para explorar valores faltantes

fig, ax = plt.subplots(figsize=(10,10))

(
    nhanes_df
    .select_columns('weight','general_health_condition','gender')
    .assign(
        weight = lambda df: df.weight.isna().replace([True,False],['NA','!NA'])
    )
    .groupby(
        ['gender','general_health_condition','weight'],
        dropna=False,
        as_index = True
    )
    .size()
    .pipe(
        lambda df: mosaic(
            data = df,
            properties=lambda key: {'color':'r' if 'NA' in key else 'gray'},
            horizontal=True,
            axes_label=True,
            title='',
            labelizer=lambda key: '',
            ax = ax
        )
    )
);

yo lo hice directo en el notebook, comparé el codigo y es similar. Noten que el código del profe en pandas_missing_extension tienen un detalle: cambien el nombre de la columna ‘weight’ por el parámetro definido en la función. **{target_var: lambda df: df.weight.isna().replace([True, False], ["NA", "!NA"])}

Aquí mi código:

def missing_mosaic_plot(df, cat1, cat2, var):
    fig, ax = plt.subplots(figsize=(10,10))
    
    my_mosaic = (
            df
            [[cat1, cat2, var]]
            .assign(
                **{
                    var: lambda df: df[var].isna().replace([False, True], ['!NA', 'NA'])
                }    
            )
            .groupby(
                [
                    cat1,
                    cat2,
                    var
                ],
                dropna=False,
                as_index=True
            )
            .size()
            .pipe(
                lambda df: mosaic(
                    df,
                    properties=lambda key: {
                        'color': 'r' if 'NA' in key else 'c'
                    },
                    horizontal=True,
                    axes_label=True,
                    title='',
                    labelizer=lambda key: '',
                    ax= ax
                )
            )
        )

    # plt.show()

    return my_mosaic

missing_mosaic_plot(nhanes_df, 'gender','general_health_condition', 'pulse')
Para explorar y manejar valores faltantes de manera efectiva, es crucial ampliar las herramientas y técnicas que tienes a tu disposición. Aquí te dejo algunas herramientas y enfoques útiles que puedes implementar: \### 1. \*\*Visualización de valores faltantes\*\*: Existen varias librerías en Python que permiten visualizar valores faltantes de manera intuitiva: \- \*\*Matplotlib y Seaborn\*\*: Úsalos para crear gráficos de calor o gráficos de barras que te permitan identificar la cantidad de valores faltantes. ```python import seaborn as sns import matplotlib.pyplot as plt sns.heatmap(df.isnull(), cbar=False) plt.show() ``` \- \*\*Missingno\*\*: Una librería especializada en la visualización de datos faltantes. ```python import missingno as msno \# Visualización básica msno.matrix(df) \# Visualización de dendograma para identificar patrones de valores faltantes correlacionados msno.dendrogram(df) ``` \### 2. \*\*Matriz de sombras\*\*: Una técnica avanzada que permite crear una matriz binaria donde 1 indica la presencia de un valor y 0 indica su ausencia. Esto permite analizar las correlaciones entre la presencia de valores faltantes en diferentes variables. ```python import pandas as pd \# Matriz de sombras shadow\_matrix = df.isnull().astype(int) ``` Esta técnica puede ser útil para identificar si la falta de datos en una columna está correlacionada con la falta de datos en otra. \### 3. \*\*Correlación de nulidad\*\*: Explorar la relación entre valores faltantes en diferentes columnas es clave para entender el origen de los valores faltantes. Esto se puede hacer usando la función `pandas.DataFrame.corr()` para calcular la correlación entre la matriz de nulidad. ```python \# Calcular la correlación entre valores faltantes nullity\_corr = df.isnull().corr() ``` También puedes calcular correlaciones específicas con valores faltantes usando el método `pairwise deletion` o la imputación de valores como último recurso. \### 4. \*\*Imputación de valores faltantes\*\*: Hay múltiples enfoques que puedes usar para imputar valores faltantes: \- \*\*Imputación por la media/mediana/moda\*\*: Fácil de implementar, pero puede sesgar los resultados. ```python df\['column'].fillna(df\['column'].mean(), inplace=True) ``` \- \*\*Imputación usando métodos más avanzados\*\*: \- \*\*K-Nearest Neighbors (KNN)\*\*: Este método utiliza las observaciones más cercanas para imputar valores faltantes. \- \*\*Iterative Imputer\*\*: Realiza imputaciones iterativas en las columnas del conjunto de datos utilizando un modelo de regresión. ```python from sklearn.impute import KNNImputer imputer = KNNImputer(n\_neighbors=5) df\_imputed = imputer.fit\_transform(df) ``` \### 5. \*\*Análisis de patrones de valores faltantes\*\*: Identificar patrones en los datos faltantes te ayudará a elegir la estrategia adecuada. Existen tres tipos de valores faltantes: \- \*\*MCAR (Missing Completely at Random)\*\*: No hay patrón. \- \*\*MAR (Missing at Random)\*\*: Los valores faltantes dependen de otras variables. \- \*\*MNAR (Missing Not at Random)\*\*: Los valores faltantes dependen de la propia variable con valores ausentes. Usando herramientas de visualización como \*\*Missingno\*\* y análisis estadístico, puedes descubrir estos patrones. \### 6. \*\*Funciones adicionales de `pyjanitor`\*\*: `pyjanitor` expande las capacidades de `pandas` con funciones específicas para limpieza, incluidas aquellas que exponen valores faltantes implícitos: ```python import janitor df = df.complete() ``` Puedes utilizar `janitor` para completar los valores implícitos y exponer relaciones entre variables. \### 7. \*\*Uso de máscaras para filtrar y analizar valores faltantes\*\*: Puedes utilizar máscaras booleanas para filtrar filas y columnas con valores faltantes y hacer un análisis más detallado. ```python missing\_mask = df.isnull() missing\_columns = df.columns\[missing\_mask.any()] ``` \### Conclusión Ampliar tu conjunto de herramientas para manejar valores faltantes implica una combinación de \*\*visualización\*\*, \*\*análisis estadístico\*\* y \*\*métodos de imputación\*\* avanzados. Utilizar bibliotecas como \*\*Seaborn\*\*, \*\*Missingno\*\*, \*\*pyjanitor\*\*, junto con las funciones integradas de \*\*Pandas\*\*, te permitirá explorar los datos de manera más efectiva y tomar decisiones informadas sobre cómo manejar valores faltantes.

Este es mi código del reto, funcional en Notebook, teniendo en cuenta que faltarían modificaciones ya que aún no se ha registrado como un accessor de DataFrame y no tiene acceso directo a self._obj.

def missing_mosaic_plot(
        self,
        categorical_variable_1: str,
        categorical_variable_2: str,
        missing_data_variable, str,
):

    fig, ax = plt.subplots(figsize = (15, 10))

    (
        self
        .select_columns(f"{missing_data_variable}", f"{categorical_variable_1}", f"{categorical_variable_2}")
        .assign(
            weight = lambda df : df[f"{missing_data_variable}"].isna().replace([True, False], ["NA", "¡NA"])
        )
        .groupby(
            [f"{categorical_variable_1}", f"{categorical_variable_2}", f"{missing_data_variable}"],
            dropna = False,
            as_index = True
        )
        .size()
        .pipe(
            lambda df : mosaic(
                data = df,
                properties = lambda key : {"color":"r" if "NA" in key else "gray"},
                horizontal = True,
                axes_label = True,
                title = " ",
                
                labelizer = lambda key: " ",
                ax = ax
            )
        )

    ) ;

Muy interesante el Grafico de Mosaico. Nos permite visualizar datos categoricos multivariantes de forma precisa e informativa.

pandas.DataFrame.groupby

dropna: bool, default True

as_index: bool, default True

Clase 04 - Tratamiento de datos faltantes

https://www.youtube.com/watch?v=NtAX81IuiNY
Universidad de Buenos Aires