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
16 Hrs
27 Min
19 Seg

Visualización de valores faltantes

7/21
Recursos

Aportes 16

Preguntas 2

Ordenar por:

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

Otra visualización muy porte de missigno es la matriz de correlación. Da mucha información

Si tienes el mismo error como yo:

ValueError                                Traceback (most recent call last)
Cell In[205], line 1
----> 1 riskfactors_df.missing.missing_variable_plot()

File /var/folders/ts/9c4rwdn15b7cy40fjt97_x6m0000gn/T/ipykernel_57155/805652746.py:147, in MissingMethods.missing_variable_plot(self)
    143 plot_range = range(1, len(df.index) + 1)
    145 plt.hlines(y=plot_range, xmin=0, xmax=df.n_missing, color="black")
--> 147 plt.plot(df.n_missing, plot_range, "o", color="black")
    149 plt.yticks(plot_range, df.variable)
    151 plt.grid(axis="y")

File ~/anaconda3/envs/ds-missing-values/lib/python3.9/site-packages/matplotlib/pyplot.py:2757, in plot(scalex, scaley, data, *args, **kwargs)
   2755 @_copy_docstring_and_deprecators(Axes.plot)
   2756 def plot(*args, scalex=True, scaley=True, data=None, **kwargs):
-> 2757     return gca().plot(
   2758         *args, scalex=scalex, scaley=scaley,
   2759         **({"data": data} if data is not None else {}), **kwargs)

File ~/anaconda3/envs/ds-missing-values/lib/python3.9/site-packages/matplotlib/axes/_axes.py:1632, in Axes.plot(self, scalex, scaley, data, *args, **kwargs)
   1390 """
   1391 Plot y versus x as lines and/or markers.
   1392 
   (...)
   1629 (``'green'``) or hex strings (``'#008000'``).
...
    344         "Multi-dimensional indexing (e.g. `obj[:, None]`) is no longer "
    345         "supported. Convert to a numpy array before indexing instead."
    346     )

ValueError: Multi-dimensional indexing (e.g. `obj[:, None]`) is no longer supported. Convert to a numpy array before indexing instead.
Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings...

Lo solucione en el metodo missing_variable_plot: cambiando la linea:

        plt.plot(df.n_missing, plot_range, 'o', color="black")

a esta:

        plt.plot(np.array(df.n_missing), plot_range, 'o', color="black")

PD: es una conversion a un array de numpy(compatibilidad)

Visualizacion de Datos Faltantes

Las tablas nos permite conocer las variables con su respectivo porcentaje de datos faltantes. Sin embargo para visualizar aparaciones conjuntas de valores faltantes, es decir que en una variable aparezca un valor faltante y en el mismo registro aparezca un valor faltante en otra variable, las tablas no ayudan. Para ello, utilizamos los utsetplot que establecen diferentes conjuntos de datos y su relacion.

  • Visualizacion de de los datos faltantes para cada variable mediante un grafico de paleta
# Grafica de páletas
riskfactors_df.missing.missing_variable_plot()
  • Visualizacion de datos faltantes en los registros/Filas
riskfactors_df.missing.missing_case_plot()
  • Visualizacion de datos faltantes para bloques de 10 registros
(
    riskfactors_df
    .missing
    .missing_variable_span_plot(
        variable='weight_lbs',
        span_every=10,
        rot=0 #rotacion de los labels
    )
)
  • Visualizacion de datos faltantes para todas las variables del dataFrame
#Visualiacion mediante una funcion de pandas
missingno.bar(df = riskfactors_df)
  • Visualizacion de datos faltantes para cada variable mediante una matriz
missingno.matrix(df = riskfactors_df)
  • Visualizacion de apariciones conjuntas de varias variables
(
    riskfactors_df
    .missing
    .missing_upsetplot(
        variables=['pregnant', 'weight_lbs', 'smoke_stop'], # None para mostrar la relacion de todas las variables
        element_size = 30  # tamaño de la visualizacion
    )
)

Cuando inntntento utilizar el código:

riskfactors_df.missing.missing_case_plot()

Me aparece el siguiente error:

OptionError: "No such keys(s): 'mode.use_inf_as_null'"

No pude solucionarlo, por lo que opté por una alternativa:

(
    riskfactors_df
    .missing
    .missing_case_summary()
    .plot(
        kind='hist',
        x='case',
        y='pct_missing',
        bins=15,
    )
)

Una breve explicación de la librería missingno

https://www.youtube.com/watch?v=Wdvwer7h-8w&t=523s

Tratando de entender un gráfico UpSetPlot:

Si tenemos el siguiente bloque de código:

(
    riskfactors_df
    .missing
    .missing_upsetplot(
        variables = ["pregnant", "weight_lbs"], #  Estas son las variables sobre las que se analizarán los valores faltantes.
        element_size = 30
    )
)

La salida es:

Mi interpretación de la gráfica sería:

  1. Hay aproximadamente 30 registros (filas) en los que no hay valores nulos en ambas variables.

  2. Hay más de 200 registros (filas) con valores nulos en pregnant, en los valores válidos de weight.

  3. Hay 1 aproximadamente valor nulo en weight en los registros (filas)con valores válidos de pregnant.

  4. Hay aproximadamente 10 registros (filas) en los que hay valores nulos en ambas variables.

Para visualizar

riskfactors_df.missing.missing_case_plot()

Creo que hay un detalle con una opción en pandas que fue eliminado pero que sigue siendo invocado en seaborn, por ello los errores. Aquí un codigo temporal:

plt.hist(
    riskfactors_df
    .missing
    .missing_case_summary()['n_missing']
)
plt.show()
Qué onda 👋 el upsetplot que hicimos en clase es bastante útil. Al al ser nuevo para mi quise enfatizar la forma de leerlo. quizás es algo muy obvio pero no está demás reiterarlo: ![](https://static.platzi.com/media/user_upload/Captura%20de%20pantalla%202024-07-14%20a%20la%28s%29%2012.06.36p.m.-09f2f8f7-5d3c-484e-b8b9-d58c3154c7cf.jpg) * **(1) magenta**: Frecuencia en la que cada caso se repite *(una determinada aparición conjunta de valores nulos)*. * **(2) azul**: Cantidad total de valores nulos en cada columna individual. *(Las barras negras representan la frecuencia de valores nulos en cada columna)*. * **(3) amarillo**: *Una ocurrrencia*. Combinaciones específicas de columnas que tienen valores nulos. * *Cada fila de puntitos en el recuadro amarillo representa un caso donde varias columnas tienen valores nulos **simultáneamente***. * **(4) verde**: Indica si una columna tiene un valor nulo en un caso específico. * Un puntito indica la presencia de un valor nulo, mientras que su ausencia indica que no hay nulos en esa columna *(para esa ocurrencia)*. **Observaciones** La visualización de valores nulos indica dos grupos principales de columnas con valores faltantes relacionados al estilo de vida: uno asociado con la dieta y otro relacionado a hábitos de estilo de vida deficiente. * La presencia de valores nulos en columnas relacionadas con el consumo de tabaco y alcohol tiende a coincidir con valores nulos en otras columnas del mismo grupo. Sin embargo, la frecuencia de aparición conjunta de valores nulos en las columnas relacionadas con la dieta es considerablemente menor. * **(A)** Relación inversa entre los grupos de estilo de vida deficiente y dieta: * Existe una relación lineal negativa entre los valores nulos en los grupos de estilo de vida y dieta. Es decir, cuando hay valores nulos en las columnas relacionadas con el consumo de tabaco y alcohol, es más probable encontrar valores completos en las columnas relacionadas con la dieta. * *Esto sugiere que los individuos que no responden preguntas sobre el consumo de tabaco y alcohol tienden a proporcionar información completa sobre su dieta\**. * **(B)** Ausencia de patrones significativos en otras columnas: * No se observan agrupaciones significativas de valores nulos en las columnas restantes, que incluyen datos demográficos y generales de salud, excepto en las columnas mencionadas anteriormente. * *Esto indica que la mayoría de los datos demográficos y generales de salud están completos y no muestran un patrón claro de valores nulos*. También le hice unos ajustes a la función para evitar conflictos por versiones anteriores que daban como resultado un festival de warnings *(al parecer se necesita modificar el código desde upsetplot, por lo que no podemos hacer mucho hasta que lo actualicen)*: ```js """(1) Plots the nulls whose values appear together (in successive rows) - using an 'upsetplot'""" def missing_upsetplot(self, cols: List[str] = None, **kwargs): #pandas version -> 2.2.1 #upsetplot version -> 0.9.0 if cols is None: cols = self._obj.columns.tolist() # se convierten 'Series' a una lista # null values values count missing_data = self._obj.isna().value_counts(subset=cols) # remove the FutureWarnings with warnings.catch_warnings(): warnings.simplefilter(action='ignore', category=FutureWarning) # upsetplot -> library upsetplot.plot(missing_data, **kwargs) ```

En el minuto 4:18 me parece que tuvo que decir que la mayoria de las filas tuvo 4 errores faltantes (no 5)

El error 'InvalidIndexError: Reindexing only valid with uniquely valued Index objects' sugiere que hay índices duplicados en tu DataFrame al intentar usar 'missing_upsetplot'. Asegúrate de que los índices sean únicos o considera usar 'reset_index()' para resolver el problema.
Para visualizar los valores faltantes en un DataFrame de Pandas, hay varias formas efectivas, y puedes aprovechar bibliotecas de visualización como `matplotlib`, `seaborn`, o incluso herramientas específicas como `missingno`. A continuación, te mostraré algunas de las formas más comunes. \### 1. Usar `missingno` para visualizar los valores faltantes La biblioteca `missingno` es una excelente opción para visualizar los valores faltantes de manera rápida y efectiva. \#### Instalación: Si no tienes instalada la biblioteca `missingno`, puedes instalarla con pip: ```bash pip install missingno ``` \#### Ejemplo de uso: Una vez instalada, puedes usarla para visualizar los valores faltantes en tu DataFrame. ```python import missingno as msno import matplotlib.pyplot as plt \# Supongamos que riskfactors\_df es tu DataFrame msno.matrix(riskfactors\_df) plt.show() \# También puedes utilizar un heatmap de correlación de valores faltantes msno.heatmap(riskfactors\_df) plt.show() ``` \- \*\*`msno.matrix()`\*\*: Muestra una vista visual de los valores faltantes y no faltantes en el DataFrame. \- \*\*`msno.heatmap()`\*\*: Visualiza las correlaciones de valores faltantes entre las columnas del DataFrame. \### 2. Usar un `heatmap` con Seaborn para visualizar valores faltantes Puedes crear un heatmap usando `seaborn` para representar los valores faltantes. \#### Instalación: Si no tienes instalada `seaborn`, instálala con pip: ```bash pip install seaborn ``` \#### Ejemplo de uso: ```python import seaborn as sns import matplotlib.pyplot as plt \# Crear un mapa de calor donde se visualicen los valores faltantes plt.figure(figsize=(10,6)) sns.heatmap(riskfactors\_df.isnull(), cbar=False, cmap='viridis') plt.title("Mapa de calor de valores faltantes") plt.show() ``` Este heatmap marcará con un color los valores que son nulos (True) y con otro color los que no lo son (False). \### 3. Usar un gráfico de barras con Matplotlib Puedes visualizar los valores faltantes de cada columna usando un gráfico de barras. ```python import pandas as pd import matplotlib.pyplot as plt \# Contar los valores faltantes por columna missing\_values = riskfactors\_df.isnull().sum() \# Filtrar las columnas con valores faltantes missing\_values = missing\_values\[missing\_values > 0] \# Crear gráfico de barras missing\_values.plot(kind='bar', figsize=(10,6)) plt.title("Valores faltantes por columna") plt.xlabel("Columnas") plt.ylabel("Número de valores faltantes") plt.show() ``` Este gráfico de barras te mostrará cuántos valores faltantes tienes en cada columna. \### 4. Mostrar la distribución de valores faltantes con un conteo Si prefieres simplemente contar los valores faltantes sin visualización gráfica: ```python \# Contar los valores faltantes en cada columna missing\_summary = riskfactors\_df.isnull().sum() print(missing\_summary) ``` Estas son algunas de las formas más útiles para identificar y visualizar los valores faltantes en tus datos. Dependiendo de la naturaleza de tu proyecto, puedes optar por una u otra, o combinarlas para obtener una visión más clara de los datos faltantes.

Explicación visual de qué es un UpSet:

ERROR: OptionError: "No such key(s): ‘mode.use_inf_as_null’ missing_case_plot

#Solucion de este error en requirements.txt
#Debe usarse seaborn 0.12.2 o superior

pyjanitor
missingno
numpy
matplotlib==3.5.1
pandas
pyreadr
seaborn==0.12.2
session-info
upsetplot==0.6.1

para el .missing_case_plot()

coloqué este código

plt.hist(
riskfactors_df
.missing
.missing_case_summary()[‘n_missing’],color=‘black’,bins=15
)
plt.show()

Para los que tienen problemas con missing_variable_plot()

Lo solucione con este codigo

def missing_variable_plot(self):
df = self._obj.missing.missing_variable_summary().sort_values(“n_missing”)

plot_range = range(1, len(df.index) + 1)

plt.hlines(y=plot_range, xmin=0, xmax=df.n_missing.values, color="black")  # Convierte df.n_missing en un array de NumPy

plt.plot(np.array(df.n_missing), plot_range, 'o', color="black")

plt.yticks(plot_range, df.variable)

plt.grid(axis="y")

plt.xlabel("Number missing")
plt.ylabel("Variable")

plt.show()

Las visualizaciones son esenciales en los procesos de análisis de datos.