Al trabajar con grandes conjuntos de datos conocer el espacio ocupa en memoria cada una de las características es clave. Especialmente cuando es necesario eliminar características para reducir el tamaño ocupado. La forma para obtener esta información en los DataFrame de Python es mediante el método memory_usage()
, el cual permite evaluar y optimizar el uso de memoria en Pandas. En esta entrada se analizará cómo utilizar este método y se explicará por qué algunos datos pueden ocupar más espacio que otros.
El método memory_usage
En los DataFrame de Pandas, el método memory_usage()
permite analizar el consumo de memoria que realiza cada una de las series del conjunto de datos. Información que se puede utilizar para reducir la huella de memoria. Algo que es especialmente útil cuando se trabaja con grandes conjuntos de datos y es necesario optimizar el rendimiento de los análisis y aplicaciones.
El método se puede llamar tal cual, simplemente escribiendo df.memory_usage()
, donde df
es el DataFrame que se desea analizar. Pero, en el caso de contar con objetos complejos, solamente ofrece una aproximación del uso de memoria. Para conseguir un análisis más preciso del uso de memoria se puede asignar en valor verdadero al parámetro deep
, esto es llamar al método df.memory_usage(deep=True)
. Cuando se activa la opción deep
evaluará el uso de memoria que hacen todos los registros del conjunto de datos.
Ejemplo de uso con el conjunto de datos “tips” de Seaborn
La mejor manera de comprender el uso de memory_usage()
es mediante un ejemplo práctico, para ello se usará el conjunto de datos “tips” de la biblioteca Seaborn. Para ello se debe importar la librería y cargar los datos. Una vez hecho esto, se puede llamar al método para conocer cuál es el uso de memoria de cada una de las columnas. Lo que se muestra en el siguiente ejemplo.
import seaborn as sns import pandas as pd # Cargar el conjunto de datos de ejemplo de Seaborn tips = sns.load_dataset('tips') # Obtener el uso de memoria del DataFrame tips.memory_usage()
Index 132 total_bill 1952 tip 1952 sex 368 smoker 368 day 448 time 368 size 1952 dtype: int64
En donde se puede ver como las columnas que más espacio ocupan son total_bill
, tip
y size
, los valores reales. Pero, como se ha comentado antes, esto es una aproximación si se indica la opción deep=True
en el método los resultados cambiarán.
# Obtener el uso de memoria en detalle del DataFrame tips.memory_usage(deep=True)
Index 132 total_bill 1952 tip 1952 sex 476 smoker 471 day 657 time 477 size 1952 dtype: int64
Nótese como para las columnas que son de tipo texto el valor cambia, esto es así porque en caso anterior solamente utilizo algunos valores para calcular el tamaño. Lo que ofrece una aproximación, pero no un valor exacto.
Identificando las columnas que más memoria consumen
El resultado obtenido en la sección anterior se puede utilizar para identificar las columnas que más memoria consumen. En el caso anterior el conjunto de datos era pequeño y esto se puede hacer a mano, pero en uno con más columnas lo mejor es ordenar los resultados. Lo que se puede conseguir mediante el método sort_values()
.
# Obtener el uso de memoria del DataFrame ordenado tips.memory_usage(deep=True).sort_values(ascending=False)
total_bill 1952 tip 1952 size 1952 day 657 time 477 sex 476 smoker 471 Index 132 dtype: int64
Un resultado que nos facilita la selección de las columnas que se deben eliminar.
Conclusiones
En esta entrada se ha visto el funcionamiento del método memory_usage()
con el cual se puede conocer la memoria usada por cada una de las columnas de un conjunto de datos. Una información que se puede usar para optimizar el uso de memoria en Pandas.
Imagen de Cliff Smith en Pixabay
Deja una respuesta