Otra visualización muy porte de missigno es la matriz de correlación. Da mucha información
Excelente visualización, puedes compartir el código por favor?
missingno.heatmap(df = riskfactors_df)
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áletasriskfactors_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 pandasmissingno.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))
hola amigo... qué significa la gráfica de barras horizontal que sale en la última imagen?
Representa la cantidad de valores faltantes que contiene la variable. Saludos
Si tienes el mismo error como yo:
ValueErrorTraceback(most recent call last)CellIn[205], line 1---->1 riskfactors_df.missing.missing_variable_plot()File/var/folders/ts/9c4rwdn15b7cy40fjt97_x6m0000gn/T/ipykernel_57155/805652746.py:147,inMissingMethods.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,inplot(scalex, scaley, data,*args,**kwargs)2755 @_copy_docstring_and_deprecators(Axes.plot)2756 def plot(*args, scalex=True, scaley=True, data=None,**kwargs):->2757returngca().plot(2758*args, scalex=scalex, scaley=scaley,2759**({"data": data}if data is not Noneelse{}),**kwargs)File~/anaconda3/envs/ds-missing-values/lib/python3.9/site-packages/matplotlib/axes/_axes.py:1632,inAxes.plot(self, scalex, scaley, data,*args,**kwargs)1390"""
1391Plot 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.Viewas a scrollable element or open in a text editor.Adjust cell output settings...
Lo solucione en el metodo missing_variable_plot: cambiando la linea:
parece que es una opcion de pandas que es llamado pero no se encuentra, por ello el error (ando asumiendo), pero tu codigo cumple con la visualización esperada. Gracias!
un detalle! en las X debe ir las 'n_missing'. Aquí mi plot, inspirado en el tuyo:
( 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:
Hay aproximadamente 30 registros (filas) en los que no hay valores nulos en ambas variables.
Hay más de 200 registros (filas) con valores nulos en pregnant, en los valores válidos de weight.
Hay 1 aproximadamente valor nulo en weight en los registros (filas)con valores válidos de pregnant.
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:
Es curioso que no te auto complete, yo le intentaria con ctrl + espacio .
a veces con un restart al Kernel se soluciona este y otros problemas.
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.1pandas
pyreadr
seaborn==0.12.2session-info
upsetplot==0.6.1
gracias compañero.
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:
(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):
"""(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.0if 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 FutureWarningswith 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)
De acuerdo!
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.
ya he intentado arreglar el indice pero el error persiste
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:
pip install missingno
#### Ejemplo de uso:
Una vez instalada, puedes usarla para visualizar los valores faltantes en tu DataFrame.
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:
pip install seaborn
#### Ejemplo de uso:
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.
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:
\# 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.