No tienes acceso a esta clase

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

Convierte tus certificados en títulos universitarios en USA

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

17 Días
17 Hrs
29 Min
2 Seg

Tabulación de valores faltantes

6/21
Recursos

Aportes 24

Preguntas 6

Ordenar por:

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

Me sucedió que al ejecutar los métodos de tabulación como:

df.missing.missing_variable_table()
df.missing.missing_case_table()

Me devolvía un error porque no encontraba la variable “n_variables”
.
Esto ocurre porque en el método escrito de pandas-missing-extension, que es esta para missing_variable_table():

    def missing_variable_table(self) -> pd.DataFrame:
        return (
            self._obj.missing.missing_variable_summary()
            .value_counts("n_missing")
            .reset_index()
            .rename(columns={"n_missing": "n_missing_in_variable", 0: "n_variables"})
            .assign(
                pct_variables=lambda df: df.n_variables / df.n_variables.sum() * 100
            )
            .sort_values("pct_variables", ascending=False)
        )

Durante value_counts, se genera una columna llamada “count” y no “0”, entonces rename no consigue renombrarla a “n_variables” y en consecuencia assign no la encuentra.
Para corregir esto desde la función reset_index se puede asignar name=“n_variables” y eso sería más universal. Aquí estaría el código modificado para que se ejecute correctamente:

    def missing_variable_table(self) -> pd.DataFrame:
        return (
            self._obj.missing.missing_variable_summary()
            .value_counts("n_missing")
            .reset_index(name="n_variables")
            .rename(columns={"n_missing": "n_missing_in_variable"})
            .assign(
                pct_variables=lambda df: df.n_variables / df.n_variables.sum() * 100
            )
            .sort_values("pct_variables", ascending=False)
        ) 

Tabulacion de Valores Faltantes

Tabular es expresar valores, magnitudes u otros datos por medio de tablas.

  • Siempre empieza los analisis con preguntas simples, que lleven a un numero:
    • cuantos valores deberian existir en el conjunto de datos?
  • Construir resumenes por variables y observaciones:
    • Cuantos valores faltantes existen por cada variable?
    • ¿Cuantas variables tiene X numero de valores faltantes?
    • ¿Cuantas observaciones tiene X numero de valores faltantes?
    • Cuenta los registros con datos faltantes
  • Salir de la caja y hacer mas preguntas
    • ¿Cuantos valores faltantes tengo en una variable cada X pasos? para el caso de trabajar con series de tiempo
    • ¿Cual es la racha de valores completos y faltantes en una variable?

Analisis de Valores Faltantes en el DataFrame riskfactors

  • Mostrar los valores faltantes en el dataframe de manera general
riskfactors_df.isna()
  • Fila y columnas del dataFrame
riskfactors_df.shape
--> (245, 34)  #245 registros, 34 variables

En lo que sigue, utilizamos las funciones creadas para extender la funcionalidad de pandas

  • Numero de valores completos en el DataFrame
riskfactors_df.missing.number_complete()
--> 7144
  • Numero de valores faltantes en el dataframe
riskfactors_df.missing.number_missing()
--> 1186

Resumenes Tabulares de Valores Faltantes

  • Resumen por variable
riskfactors_df.missing.missing_variable_summary()
# missing_variable_summary() indica un resumen en cuanto a los datos
# faltantes por variable. Muestra el N° de datos faltantes, el N° de registros 
# y el porcentaje de datos faltantes que representa en el dataframe
  • Tabulacion del resumen por variable
riskfactors_df.missing.missing_variable_table()
# missing_variable_table() muestra una tabla con el N° de datos faltantes, 
# el N° de variables que contienen esos datos faltantes y el % que representa
# esa cantidad de variables respecto al total
  • Resumen por caso
riskfactors_df.missing.missing_case_summary()
# missing_case_summary() muestra todos los registros junto al N° de variables con datos 
# faltantes y el % de esas variables que representa respecto al total 
  • Tabulacion del resumen por caso
riskfactors_df.missing.missing_case_table()
# missing_case_table() muestra una tabla con el N° de datos faltantes, la cantidad
# de registros que contienen ese N° de datos faltantes y e % de registros que 
# representan respecto al total de registros

Intervalos de Valores Faltantes

  • Numero de valores faltantes por cada 50 registros para la variable ‘weight_lbs’
riskfactors_df.missing.missing_variable_span(variable='weight_lbs',span_every=50)
# missing_variable_span() muestra el resumen de datos faltantes, datos completos,
# % de datos faltantes y % de datos completos por bloques de registros

  • En caso de trabajar con una serie de tiempo nos interesa saber en que punto o tiempo, alguna variable en particular muestra un comportamiento atipico. La siguiente funcion muestra el N° de registros consecutivos que estan completos seguido del N° de registros consecutivos que tienen datos faltantes
riskfactors_df.missing.missing_variable_run(variable='weight_lbs')

Es importante aclarar que el 3 de abril de 2023 se lanzó una nueva versión de la API de Pandas (la 2.0.0). Entonces algunas funciones del cuaderno de pandas-missing-extension generan errores.

Una solución rápida para este problema es asegurarse que se está ejecutando la versión 1.5.3 de Pandas o anteriores.

Si se está ejecutando el código en DeepNote, basta con ejecutar la instrucción:

!pip install pandas==1.5.3

antes de

import pandas

O si se está ejecutando el código desde un entorno local, basta con reinstalar el paquete de Pandas a la versión 1.5.3 desde el gestor de ambientes virtuales (venv, Anaconda, etc.)

Para los que usan VSC con sus librerías y entornos bien configurados y les sale error con estas líneas de codigo:

<code> 
riskfactors_df.missing.missing_case_summary()
riskfactors_df.missing.missing_case_table()

lo pude solucionar cambiando el codigo en “pandas-missing-extension” en las funciones de:

“missing_variable_table”

<code> 
def missing_variable_table(self) -> pd.DataFrame:
        return (
            self._obj.missing.missing_variable_summary()
            .value_counts("n_missing")
            .reset_index()
            .rename(columns={"n_missing": "n_missing_in_variable", "count": "n_variables"})
            .assign(
                pct_variables=lambda df: df.n_variables / df.n_variables.sum() * 100
            )
            .sort_values("pct_variables", ascending=False)
        )

Y en la funcion “missing_case_table”

<code> 
def missing_case_table(self) -> pd.DataFrame:
        return (
            self._obj.missing.missing_case_summary()
            .value_counts("n_missing")
            .reset_index()
            .rename(columns={"n_missing": "n_missing_in_case", "count": "n_cases"})
            .assign(pct_case=lambda df: df.n_cases / df.n_cases.sum() * 100)
            .sort_values("pct_case", ascending=False)
        )

Durante .value_counts, se genera una columna llamada “count” y no “0”, entonces sustituyendo se soluciona el problema.

missing_variable_summary() #metodo para obtener tabla con el conteo de datos faltantes en todas las columnas

missing_variable_table() #metodo para obtener tabla agrupada por el conteo de datos faltantes en todas las columnas

Aparentemente, existe un error en el cálculo durante la verificación de valores faltantes por registro. Se estipula que cada registro consta de un total de 34 campos posibles, y nuestra tarea es determinar cuántos de estos campos se encuentran incompletos. Es decir, el porcentaje de valores faltantes por registro se calcula como la relación entre la cantidad de campos faltantes (n_faltantes) y el número total de campos (n_totales), que en este caso es 34.
En el ejemplo de clase, se observa que uno de los registros presenta 6 campos incompletos. Esto representaría aproximadamente el 17.64% del total de campos disponibles (34 campos). Sin embargo, el ejercicio obtiene un valor del 16.66%, que no concuerda con el cálculo anterior.
Es importante señalar que me podría encontrar en un error, agradecería que proporcionaran una explicación para entender la razón detrás del resultado observado en la clase.
Propongo la siguiente corrección para calcular correctamente la relación entre la cantidad de campos faltantes (n_faltantes) y el número total de campos (n_totales):

Me costó entender el funcionamiento de `itertools.groupby`, deberían explicar el funcionamiento detrás de esas funciones de la clase para entenderlo mejor...

y pensar que para ver los valores faltantes sólo hacía

 base.info()

y ya me mostraba

al correr riskfactors\_df.missing.missing\_variable\_table() tenia el error: AttributeError: 'DataFrame' object has no attribute 'n\_variables' seguí las sugerencias de comentarios, pero no solucionaba nada. lo logré con ` def missing_variable_table(self) -> pd.DataFrame:` ` n_rows = len(self._obj)` ` missing_data = self._obj.isnull().sum()` ` missing_percentage = (missing_data / n_rows) * 100` ` variable_summary = pd.DataFrame({` ` 'n_missing_in_variable': missing_data,` ` 'pct_missing_in_variable': missing_percentage` ` })` ` return variable_summary`
Hola. Como lo escribí en la clase anterior (Y para los que no leyeron mi aporte y hasta ahora están necesitando ayuda), dejé un aporte en la primera clase donde les menciono que subí mi repositorio a GitHub para que lo puedan clonar y tomar el curso en VSCode ya con los problemas de las dependencias y errores de código de la librería MissingMethods. En el Readme podrán leer más acerca del contenido. Espero que les ayude: <https://github.com/onnymm/missing_data_exploration>
  • conteo de variables faltantes en todas las columnas
riskfactors_df.missing.missing_variable_summary()
  • conteo de variables faltantes en las columnas que tienen valores faltantes
riskfactors_df.missing.missing_variable_table()

6. Tabulación de valores faltantes

  • Tabular es expresar valores, magnitudes u otros datos por medio de tablas

Empezar con resúmenes simples, como números.

  • ¿Cuántos valores deberían existir en el conjunto de datos?
  • ¿Cuántos valores faltantes existen en el conjunto de datos?
  • ¿Cuántos valores completos existen en el conjunto de datos?

Construir resúmenes por variables y observaciones

  • ¿Cuántos valores faltantes existen por cada variable?
  • ¿Cuántos valores faltantes existen por cada observación?
  • ¿Cuántas variables tiene X número de valores faltantes?
  • ¿Cuántas observaciones tiene X número de valores faltantes?

Salir de la caja y hacer más preguntas

  • Preguntas relacionadas al negocio
  • ¿Cuántos valores faltantes tengo en una variable cada X pasos?
  • ¿Cuál es mi racha de valores completos y faltantes en una variable?


En mi caso estoy usando variables y no la función con la clase, pero veo un detalle en la función, `misssing_case_summary()`, ya que primero estas clonando el index, deberías de poner el `case` como index, no poner dos índices, es raro, segundo, en el `df.shape[1]` estás contando las variables(columnas) que acabas de crear, es decir, `case` y `n_missing`, las cuales no CREO que no deberían aportar al porcentaje, en mi caso puse `df.shape[1]-1` restando n\_missing y poniendo case como index, así ```js case_summary = riskfactors_df.assign( n_missing = lambda df: df.apply( # Axis por defecto es 0, es para saber en que se aplica, si columns o rows axis="columns",func=lambda row: row.isna().sum() ), pct_missing = lambda df: df["n_missing"] / (df.shape[1]-1) * 100 ).rename_axis('case')[["n_missing", "pct_missing"]] case_summary ```

El error está en pandas-missing-extension. Busca la función “missing_variable_table”. El error es que quiere renombrar la columna “0” pero no hay ninguna con ese nombre al momento de hacer la transformación del dataframe. El código debe ser el siguiente:

def missing_variable_table(self) -> pd.DataFrame:
        return (
            self._obj.missing.missing_variable_summary()
            .value_counts("n_missing")
            .reset_index()
            .rename(columns={"n_missing": "n_missing_in_variable", "count": "n_variables"})
            .assign(
                pct_variables=lambda df: df.n_variables / df.n_variables.sum() * 100
            )
            .sort_values("pct_variables", ascending=False)
        )
cuando ejecuto el comando: riskfactors\_df.missing.missing\_case\_table() Execution error AttributeError: 'DataFrame' object has no attribute 'n\_cases'
La \*\*tabulación de valores faltantes\*\* en un conjunto de datos es una práctica esencial en el preprocesamiento para la limpieza y preparación de los datos. En \*\*Pandas\*\*, podemos realizar esta tabulación para obtener un resumen claro de cuántos valores faltantes tiene cada columna, lo que nos permite entender mejor la calidad de los datos y tomar decisiones informadas sobre su manejo. \### 1. \*\*Tabulación básica de valores faltantes\*\* Pandas ofrece el método `isnull()` que genera un DataFrame de booleanos (True si el valor es nulo y False en caso contrario), y `sum()` para contar el número de valores nulos por columna. \#### Ejemplo: ```python import pandas as pd \# Crear un DataFrame con algunos valores faltantes data = { 'Nombre': \['Ana', 'Luis', None, 'Carlos', 'Pedro'], 'Edad': \[29, None, 22, None, 35], 'Ciudad': \['Madrid', 'Barcelona', None, 'Sevilla', 'Valencia'] } df = pd.DataFrame(data) \# Contar los valores faltantes por columna faltantes = df.isnull().sum() print(f"Valores faltantes por columna:\n{faltantes}") ``` \#### Salida: ``` Valores faltantes por columna: Nombre 1 Edad 2 Ciudad 1 dtype: int64 ``` En este ejemplo, la columna `Edad` tiene 2 valores faltantes, mientras que las columnas `Nombre` y `Ciudad` tienen 1 valor faltante cada una. \### 2. \*\*Tabulación de valores faltantes en porcentaje\*\* También es útil obtener el porcentaje de valores faltantes por columna para tener una idea de la magnitud de los datos faltantes. \#### Ejemplo: ```python \# Porcentaje de valores faltantes por columna porcentaje\_faltantes = df.isnull().mean() \* 100 print(f"Porcentaje de valores faltantes por columna:\n{porcentaje\_faltantes}") ``` \#### Salida: ``` Porcentaje de valores faltantes por columna: Nombre 20.0 Edad 40.0 Ciudad 20.0 dtype: float64 ``` \### 3. \*\*Tabulación de valores faltantes por fila\*\* Si deseas tabular los valores faltantes por cada fila, puedes utilizar el mismo enfoque pero con el parámetro `axis=1` en la función `sum()`. \#### Ejemplo: ```python \# Contar los valores faltantes por fila faltantes\_filas = df.isnull().sum(axis=1) print(f"Valores faltantes por fila:\n{faltantes\_filas}") ``` \#### Salida: ``` Valores faltantes por fila: 0 0 1 1 2 2 3 1 4 0 dtype: int64 ``` Esto muestra cuántos valores faltan en cada fila del DataFrame. \### 4. \*\*Visualización de valores faltantes\*\* La librería \*\*seaborn\*\* tiene una función `heatmap()` que permite visualizar los valores faltantes de forma gráfica. \#### Ejemplo: ```python import seaborn as sns import matplotlib.pyplot as plt \# Crear un mapa de calor de los valores faltantes sns.heatmap(df.isnull(), cbar=False, cmap='viridis') plt.title("Valores Faltantes") plt.show() ``` Esto genera un gráfico de calor donde los valores nulos aparecen en un color distinto, facilitando la identificación de patrones en los datos faltantes. \### 5. \*\*Resumen de valores faltantes en múltiples datasets\*\* Si tienes varios DataFrames y deseas obtener un resumen de los valores faltantes en todos ellos, puedes escribir una función que procese cada uno y devuelva un resumen. \#### Ejemplo: ```python \# Supongamos que tenemos varios DataFrames df1 = df df2 = pd.DataFrame({ 'Producto': \['A', 'B', None, 'C', 'D'], 'Precio': \[100, None, 150, 200, 250], 'Stock': \[None, 50, 60, None, 30] }) datasets = {'df1': df1, 'df2': df2} \# Función para obtener el resumen de valores faltantes def resumen\_valores\_faltantes(datasets): for name, dataset in datasets.items(): print(f"Dataset: {name}") print(dataset.isnull().sum(), "\n") \# Llamar la función resumen\_valores\_faltantes(datasets) ``` \#### Salida: ``` Dataset: df1 Nombre 1 Edad 2 Ciudad 1 dtype: int64 Dataset: df2 Producto 1 Precio 1 Stock 2 dtype: int64 ``` \### Conclusión La tabulación de valores faltantes es un paso crucial para evaluar la integridad de los datos. En \*\*Pandas\*\*, puedes hacerlo fácilmente utilizando métodos como `isnull()` y `sum()` para obtener conteos o porcentajes de valores faltantes por columna o fila, y con herramientas de visualización como \*\*seaborn\*\*, puedes obtener un análisis más visual de los datos incompletos. Esto te permitirá decidir si debes rellenar, eliminar o imputar estos valores antes de realizar análisis adicionales.
El profesor es un crack y sabe mucho, pero que frustrante es que pase cosas sin actualizar y con fallas. Eso no debería pasar. @PlatziTeam, actualicen los CURSOSS!
al correr riskfactors\_df.missing.missing\_variable\_table() tenia el error: AttributeError: 'DataFrame' object has no attribute 'n\_variables' seguí las sugerencias de comentarios, pero no solucionaba nada. lo logré con def missing\_variable\_table(self) -> pd.DataFrame: n\_rows = len(self.\_obj) missing\_data = self.\_obj.isnull().sum() missing\_percentage = (missing\_data / n\_rows) \* 100 variable\_summary = pd.DataFrame({ 'n\_missing\_in\_variable': missing\_data, 'pct\_missing\_in\_variable': missing\_percentage }) return variable\_summary


riskfactors_df.missing.missing_case_table()
----
(
    riskfactors_df
    .missing
    .missing_variable_span(
        variable="weight_lbs",
        span_every=50
    )
)
-----
(
    riskfactors_df
    .missing
    .missing_variable_run(
        variable="weight_lbs"
    )
)