• Ir al contenido principal
  • Skip to secondary menu
  • Ir a la barra lateral primaria
  • Ir al pie de página
  • Inicio
  • Secciones
    • Ciencia de datos
    • Criptografía
    • Herramientas
    • Noticias
    • Opinión
  • Programación
    • JavaScript
    • Julia
    • Matlab
    • Python
    • R
  • Boletín
  • Contacto
  • Acerca de Analytics Lane
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad
    • Tiendas afiliadas
      • AliExpress
      • Amazon
      • GearBest
      • GeekBuying
      • JoyBuy

Analytics Lane

Ciencia e ingeniería de datos aplicada

  • Ciencia de datos
  • Criptografía
  • Python
  • Matlab
  • R
  • Julia
  • JavaScript
  • Herramientas
  • Opinión
  • Noticias

Mejora del rendimiento de pandas con Modin

abril 1, 2019 Por Daniel Rodríguez Dejar un comentario

Una de las bibliotecas más utilizada para la manipulación y análisis de datos en Python es pandas. Con ella es posible manipular tablas y series temporales. Además, ofrece la posibilidad de importar datos desde archivos CSV o Excel para su posterior manipulación. Al trabajar con grandes conjuntos de datos el tiempo de procesado puede ser un problema. Por lo que cualquier mejora del rendimiento de pandas es siempre interesante. Un paquete que promete mejorar el rendimiento de pandas es modin, en esta entrada se va a probar si esto es así.

Instalación de Modin

La instalación de Modin se puede realizar a través de pip como la mayoría de las librerías de Python. La instalación solamente requiere que se escriba en la terminal el siguiente comando.

pip install modin

Modin acelerar el rendimiento de los objetos DataFrame mediante la paralelización de las tareas. Una de sus grandes ventajas es que puede reemplazar a pandas y funcionar con el mismo código. Por lo que cambiar de pandas a Modin solo requiere cambiar la línea en la que se importa la librería.

Evaluación de la mejora del rendimiento de pandas con Modin

La mejora del rendimiento que ofrece Modin dependerá del número de núcleos del ordenador en el que se ejecute. Esperándose un factor de mejora igual al de núcleos disponibles. Una forma de comprobar esto es ver cómo mejora la carga de archivos con Modin respecto a pandas.

Para ello se procederá a importar archivos de diferente tamaño con pandas y Modin. Cada uno de los archivos se importará cinco veces y se medirá su tiempo medio de carga.

Carga de archivos con pandas

La carga de los archivos con pandas se puede realizar y medir con el siguiente código.

from timeit import default_timer as timer
import pandas as pd

files = ['001Mb.csv', '006Mb.csv', '015Mb.csv', '033Mb.csv',
         '090Mb.csv', '271Mb.csv', '723Mb.csv']
sizes = [1, 6, 15, 33, 90, 271, 723]

time = [ [] for i in range(len(files)) ]

for file in range (len(files)):
    for i in range(5):
        start = timer()
        df = pd.read_csv(files[file])
        end = timer()
        time[file].append((end - start)) 

pandas = [sum(t)/len(t) for t in time]

En este se carga cada uno de los archivos cinco veces y se calcula el tiempo necesario para ello. Este tiempo se agrega a un vector y finalmente se calcula la media para cada uno de los archivos.

Carga de archivos con Modin

La carga de los archivos con Modin solamente requiere cambiar una línea de código. En lugar de importar pandas se ha de importar modin.pandas. Esto es lo que se muestra en el siguiente código.

import modin.pandas as pd

time = [ [] for i in range(len(files)) ]

for file in range (len(files)):
    for i in range(5):
        start = timer()
        df = pd.read_csv(files[file])
        end = timer()
        time[file].append((end - start)) 

modin = [sum(t)/len(t) for t in time]

Comparación de los resultados

La mejor forma de comprar los resultados es de forma gráfica. Simplemente representado el tiempo transcurrido con cada una de las librerías. También se puede comprobar cual ha sido la mejora, si esta existe, de utilizar Modin en lugar de pandas. Esto es lo que se hace con el siguiente código.

import matplotlib.pyplot as plt
import numpy as np

index = np.arange(len(sizes))
width = 0.35

fig, ax1 = plt.subplots()

ax1.bar(index, pandas, width, label='pandas')
ax1.bar(index + width, modin, width, label='modin')
ax2 = ax1.twinx()
plt.plot(index, [ m/p for m, p in zip(modin, pandas) ])

ax1.set_xlabel(u'Tamaño (Mb)')
ax1.set_ylabel(u'Tiempo (s)')
ax2.set_ylabel(u'modin / pandas')
ax1.legend()
plt.xticks(index, sizes)

plt.show()

Obteniéndose la siguiente gráfica.

Comparación de la carga de archivos en Modin frente a pandas
Comparación de la carga de archivos en Modin frente a pandas

En esta se puede ver el tiempo necesario para importar los diferentes archivos. Además, en el eje de la derecha se puede apreciar la ratio entre el tiempo que necesita Modin y pandas. Lo primero que se puede apreciar es que, con archivos pequeños, aproximadamente de 1 Mb, Modin es considerablemente más lento que pandas (tarda 12 veces). Pero eso ya cambia cuando el tamaño del archivo supera los 6 Mb. A partir de ahí la mejora que se obtiene es considerable. En la configuración utilizada, un procesador con dos núcleos, Modin tarda en importar los archivos menos de la mitad (0,47 veces) con los archivos más grandes.

Conclusiones

En esta entrada se ha comparado el rendimiento de dos librerías para trabajar con objetos DataFrame en Python: pandas y Modin. Observándose que se puede obtener una mejora del rendimiento de pandas con Modin en un factor proporcional a número de procesadores. Eso sí, cuando el tamaño del archivo supera un cierto límite. En las pruebas este ha sido de 6 Mb.

Así se puede concluir que Modin es una buena opción para reemplazar pandas cuando es necesario trabajar con archivos de cierto tamaño. Aunque, cuando se trabaja con archivos de tamaños modestos, por debajo del par de Mb, no es aconsejable.

Imágenes: Pixabay (Free-Photos)

¿Te ha parecido de utilidad el contenido?

¡Puntúalo entre una y cinco estrellas!

Puntuación promedio 0 / 5. Votos emitidos: 0

Ya que has encontrado útil este contenido...

¡Síguenos en redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?

Contenido relacionado

Archivado en:Python Etiquetado con:pandas

Interacciones con los lectores

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

I accept the Terms and Conditions and the Privacy Policy

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Publicidad


Barra lateral primaria

Suscríbete a nuestro boletín

Suscríbete al boletín semanal para estar al día de todas las publicaciones.

Política de Privacidad

¡Síguenos en redes sociales!

  • facebook
  • github
  • telegram
  • pinterest
  • rss
  • tumblr
  • twitter
  • youtube

Publicidad

Tiendas afiliadas

Ayúdanos realizando tus compras sin coste adicional con los enlaces de la tienda. ¡Gracias!

Entradas recientes

Convertir números en cadenas y cadenas en números en Python

enero 25, 2021 Por Daniel Rodríguez Dejar un comentario

Creación de un certificado Let’s Encrypt en Windows con Win-Acme

enero 22, 2021 Por Daniel Rodríguez Dejar un comentario

Aplicaciones de Node en producción con PM2

enero 20, 2021 Por Daniel Rodríguez Dejar un comentario

Publicidad

Es tendencia

  • ¿Cómo eliminar columnas y filas en un dataframe pandas? bajo Python
  • Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas bajo Python
  • Seleccionar filas y columnas en Pandas con iloc y loc bajo Python
  • Unir y combinar dataframes con pandas en Python bajo Python
  • Excel en Python Guardar y leer archivos Excel en Python bajo Python

Publicidad

Lo mejor valorado

5 (3)

Ordenar una matriz en Matlab en base a una fila o columna

5 (3)

Automatizar el análisis de datos con Pandas-Profiling

5 (5)

Diferencias entre var y let en JavaScript

5 (6)

Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas

5 (3)

Unir y combinar dataframes con pandas en Python

Publicidad

Comentarios recientes

  • Daniel Rodríguez en Calculadora de probabilidades de ganar a la lotería
  • abel en Calculadora de probabilidades de ganar a la lotería
  • David Arias en Diferencias entre regresión y clasificación en aprendizaje automático
  • Juan Aguilar en Archivos JSON con Python: lectura y escritura
  • Camilo en Contar palabras en una celda Excel

Publicidad

Footer

Secciones

  • Ciencia de datos
  • Criptografía
  • Herramientas
  • Noticias
  • Opinión

Programación

  • JavaScript
  • Julia
  • Matlab
  • Python
  • R

Analytics Lane

  • Acerca de Analytics Lane
  • Boletín de noticias
  • Contacto
  • Lo más popular
  • Tienda

Tiendas Afiliadas

  • AliExpress
  • Amazon
  • BangGood
  • GearBest
  • Geekbuying
  • JoyBuy

Sobre de Analytics Lane

En Analytics Lane tratamos de explicar los principales conceptos de la ciencia e ingeniería de datos con un enfoque práctico. Los principales temas tratados son ciencia de datos, ingeniería de datos, inteligencia artificial, machine learning, deep learning y criptografía. Además, también se habla de los principales lenguajes de programación y herramientas utilizadas por los científicos e ingenieros de datos.

Tiendas afiliadas

Ayúdanos realizando tus compras sin coste adicional con los enlaces de la tienda. ¡Gracias!

Amazon

2018-2020 Analytics Lane · Términos y condiciones · Política de Cookies · Política de Privacidad · Herramientas de privacidad · Contacto