Visualización de valores faltantes en una variable
Resumen
En el caso de que estén teniendo problemas con el método displot de Seaborn lo que tienen que hacer es simplemente actualizar Seaborn a su última versión
Comparando los datos faltantes de la variable Peso con los valores de la variable Edad
( riskfactors_df
.missing.bind_shadow_matrix(only_missing=True).pipe(lambda df:( sns.boxenplot( data=df, x ='weight_lbs_NA',#variables con datos faltantes y ='age'#variable de comparacion))))
Visualizacion alternativa mediante funciones de densidad
( riskfactors_df
.missing.bind_shadow_matrix(only_missing=True).pipe(lambda df:( sns.displot( data=df, x ='age',#variable de distribucion hue ='weight_lbs_NA',#variable de comparacion kind='kde'#distribucion de densidad))))
Visualizacion de la variable Edad y los valores faltantes de la variable Peso mediante histogramas independientes. Este tipo de grafico son muy dificiles de comparar debido a que tenemos mas datos que no faltan de los que faltan
( riskfactors_df
.missing.bind_shadow_matrix(only_missing=True).pipe(lambda df:( sns.displot( data=df, x ='age',#variable de distribucion col ='weight_lbs_NA',#variable de comparacion))))
Visualizacion altenativa de los datos anteriores donde el eje de las Y es independiente para cada grafico
# Eje de las y independientes para cada grafico( riskfactors_df
.missing.bind_shadow_matrix(only_missing=True).pipe(lambda df:( sns.displot( data=df, x ='age',#variable de distribucion col ='weight_lbs_NA',#variable de comparacion facet_kws={'sharey':False}))))
Grilla de graficos con dos variables de datos faltantes
( riskfactors_df
.missing.bind_shadow_matrix(only_missing=True).pipe(lambda df:( sns.displot( data=df, x ='age',#variable de distribucion col ='marital_NA',#variable de comparacion row ='weight_lbs_NA'))))
La visualizacion de valores faltantes en una variable permite detectar si esta ocurriendo un sesgo en la presencia o ausencia de valores faltantes ocasionado por otra variable
Claro, y si hay correlación?
En la grafica displot me salia este error:
ValueError: Multi-dimensional indexing (e.g. obj[:, None]) is no longer supported. Convert to a numpy array before indexing instead.
Por lo que cambie el codigo este:
( riskfactors_df
.missing.bind_shadow_matrix(only_missing=True).pipe( lambda df:( sns.displot( data = df, x ='age', kind ='kde' hue ='weight_lbs_NA'))))
Por este codigo:
( riskfactors_df
.missing.bind_shadow_matrix(only_missing=True).pipe( lambda df:( sns.displot( data = df, x ='age', kind ='kde' hue ='weight_lbs_NA', fill =True))))
Y me funcionó.
Gracias! Habia cambiado a seaborn==0.11 en el requirements.txt y no me funcionaba este bloque de codigo.
Al agregar fill=True lo logre
Muchas gracias por la ayuda.
Tratando de seguir la clase, me aparece este error con las gráficas de displot y boxenplot
OptionError: "No such keys(s): 'mode.use_inf_as_null'"
Con gráficas tipo Boxplot, si funciona con normalidad
Tengo exactamente el mismo problema y no supe como arreglarlo, me rendí
Tuve el mismo problema, pero pude resolverlo. Es un error desde Seaborn porque Conda utiliza una versión vieja.
En su entorno, eliminen seaborn. Luego, hagan un
pip install seaborn
De esta manera tendrán la versión más reciente, y todas las gráficas en el curso les funcionará.
En esta clase aplicamos el concepto de la matriz de sombras para crear visualizaciones de una variable que no tiene valores faltantes, con otra que sí, permitiéndote construir visualizaciones que te ayuden a identificar rápidamente si existen sesgos o no en la presencia o ausencia de otros valores faltantes.
La visualización de valores faltantes en una variable es una técnica útil para identificar qué parte de los datos está incompleta y cómo afecta el análisis. Puedes usar bibliotecas como seaborn, matplotlib o missingno en Python para crear gráficos que muestren los valores faltantes.
### Ejemplo 1: Gráfico de Barras con seaborn
Puedes visualizar los valores faltantes en una variable mediante un gráfico de barras que muestre la proporción de valores faltantes y no faltantes.
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
\# Crear un DataFrame de ejemplo
data ={'Variable': \[1,2,None,4,None,6,7,None,9,10]}df = pd.DataFrame(data)
\# Crear una columna booleana para indicar si hay valores faltantes
df\['Missing']= df\['Variable'].isnull()
\# Visualización con seaborn
sns.countplot(x='Missing', data=df, palette='viridis')plt.title('Valores Faltantes en la Variable')plt.xlabel('Valores Faltantes')plt.ylabel('Conteo')plt.xticks(\[0,1], \['No Faltante','Faltante'])plt.show()
### Ejemplo 2: Usar missingno para Visualizar Valores Faltantes
La biblioteca missingno es excelente para visualizar los valores faltantes en un conjunto de datos con gráficos fáciles de interpretar.
import pandas as pd
import missingno as msno
\# Crear un DataFrame de ejemplo con valores faltantes
data ={'Variable1': \[1,2,None,4,5],  'Variable2': \[5, None, 7, None, 9],  'Variable3': \[None, 2, 3, 4, None]}df = pd.DataFrame(data)
\# Visualización de un gráfico de valores faltantes con missingno
msno.bar(df)plt.show()
### Ejemplo 3: Mapa de Calor para Ver la Distribución de Valores Faltantes
Otra forma es crear un **mapa de calor** para ver los valores faltantes en todo el conjunto de datos y visualizar dónde se encuentran esos valores faltantes.
import seaborn as sns
import matplotlib.pyplot as plt
\# Crear un DataFrame con algunos valores faltantes
data ={'Variable1': \[1,2,None,4,5],  'Variable2': \[None, None, 7, 8, 9],  'Variable3': \[1, None, 3, None, 5]}df = pd.DataFrame(data)
\# Visualización de valores faltantes en un mapa de calor
plt.figure(figsize=(8,6))sns.heatmap(df.isnull(), cbar=False, cmap='viridis')plt.title('Mapa de Calor de Valores Faltantes')plt.show()
### Descripción de los Ejemplos:
1. **Gráfico de Barras con seaborn**: Muestra un conteo de los valores faltantes y no faltantes en una variable específica.
2. **Gráfico de Barras con missingno**: Presenta un resumen visual de los valores faltantes en todas las variables de un DataFrame.
3. **Mapa de Calor**: Ofrece una visualización general de los valores faltantes en forma de mapa de calor, mostrando dónde se encuentran esos valores en las columnas.
Estas técnicas son útiles para diagnosticar la cantidad y distribución de valores faltantes en los datos antes de realizar un análisis o imputación.
¿Te gustaría ver más ejemplos o explicaciones más detalladas?
Matriz de sombras (Shadow Matrix)
1.-4 Palabras clave
Shadow matrix
Nabular data
isna()
suffix / concat
2.-4 Preguntas
¿Qué es una matriz de sombras y para qué sirve?
¿Cómo transforma la información de faltantes en variables más útiles para analizar?
¿Por qué agregar un sufijo a las columnas ayuda a comparar datos?
¿Cómo permite la shadow matrix estudiar relaciones entre faltantes y otras variables?
3.-Notas completas del tema
A) Idea central
La shadow matrix convierte la ausencia de datos en información explícita:
missing
not missing
Así puedes:
visualizar faltantes,
comparar grupos,
y estudiar si la ausencia de una variable se relaciona con otras variables observadas.
B) Construcción paso a paso
Detectar faltantes
usar isna() para obtener True/False
Recodificar estados
True → "missing"
False → "not missing"
Agregar sufijo
por ejemplo "_na"
así las nuevas columnas se distinguen de las originales
Concatenar
unir el dataset original con la matriz de sombras
Analizar
comparar estadísticos o hacer gráficos entre grupos
C) ¿Por qué sirve?
Porque convierte una pregunta como:
“¿falta o no falta este dato?”
en algo que puedes usar para:
agrupar,
comparar promedios,
detectar patrones,
estudiar relaciones entre variables.
D) Aplicación analítica
Una vez creada la shadow matrix, puedes hacer preguntas como:
¿La edad cambia según falte o no el peso?
¿Hay diferencias entre pacientes con y sin cierta medición?
¿Los faltantes se relacionan con una variable específica?
E) only_missing=True
Permite agregar solo las columnas que tienen faltantes.
Útil cuando no quieres llenar el dataset con columnas que no aportan variación.
F) Matriz nabular
Al combinar:
los datos originales,
y la shadow matrix,
obtienes una estructura más rica llamada matriz nabular, útil para análisis y visualización conjunta.
4.-Código necesario
import pandas as pd
import numpy as np
# ==========================================================# Dataset de ejemplo# ==========================================================df = pd.DataFrame({"edad":[55,62,70,58,65,49,61,73],"peso":[80, np.nan,75,90, np.nan,68,72, np.nan],"glucosa":[100,120,130,110,140,105,115,125]})print("== DataFrame original ==")print(df)# ==========================================================# Ejercicio 1/2: Construir la shadow matrix# ==========================================================print("\n--- Ejercicio 1/2: shadow matrix ---")shadow =( df.isna().replace({True:"missing",False:"not missing"}).add_suffix("_na"))print("\n== Shadow matrix ==")print(shadow)# Unir al dataset originalnabular = pd.concat([df, shadow], axis=1)print("\n== Datos nabulares ==")print(nabular)# ==========================================================# Ejercicio 2/2: Analizar una variable según faltantes de otra# ==========================================================print("\n--- Ejercicio 2/2: comparación por grupos ---")# Comparar la edad según falte o no el pesoresultado = nabular.groupby("peso_na")["edad"].describe()print("\n== Edad según presencia/ausencia de peso ==")print(resultado)# Si se desea ver como tabla más limpiaprint("\n== Reset index ==")print(resultado.reset_index())# ==========================================================# Extra: shadow matrix solo para columnas con faltantes# ==========================================================print("\n--- Extra: solo columnas con faltantes ---")cols_with_missing = df.columns[df.isna().any()]shadow_only =( df[cols_with_missing].isna().replace({True:"missing",False:"not missing"}).add_suffix("_na"))nabular_only = pd.concat([df, shadow_only], axis=1)print("\n== Nabular con solo columnas faltantes ==")print(nabular_only)
4.- Mapa conceptual
Dataset original
|
v
isna()
|
v
True / False
|
v
missing / not missing
|
v
add_suffix("_na")
|
v
concat(original, shadow)
|
v
Matriz nabular
|
v
Comparar estadísticos y relaciones
5.-Pequeño resumen
La shadow matrix transforma la ausencia de datos en columnas explícitas que indican si un valor está presente o no. Al combinarla con el dataset original, puedes comparar estadísticos entre grupos con y sin faltantes y así buscar patrones o relaciones con otras variables. Es una forma muy potente de pasar de “ver NA” a entender qué significan esos NA.
Si quieres, ahora te hago el siguiente apunte sobre visualización con shadow matrix y relaciones entre faltantes.
¿Por qué visualizar una sola variable?
Analizar una variable de forma aislada te ayuda a entender la magnitud del problema antes de buscar correlaciones complejas. Si notas que una columna crítica tiene un alto porcentaje de valores nulos, sabrás de inmediato que cualquier modelo predictivo basado en ella estará sesgado, permitiéndote descartarla o buscar fuentes alternativas.
¿Alguno sabe cómo solucionar el error "No such keys(s): 'mode.use_inf_as_null'"?
Pregunta: A raíz del análisis de la columna age vs la presencia / ausencia de nulos en otras columnas, se me ocurre entrenar un modelo que sea capaz de predecir en función de una edad, cuál sería la probabilidad de que haya nulos.
Sin embargo el problema es que precisamente el análisis debería tener datos sobre los nulos. Lo que me preocupa es la naturaleza de los datos (son nulos). De qué forma podría hacerlo?
Se me ocurre usar como variable objetivo a la edad, y como variables de análisis las columnas binarias de la matriz de sombras. Quizás una regresión logística. Es posible hacer esto?