¿Cómo acelerar Pandas con un cambio de una línea usando Modin?

En este artículo, vamos a ver cómo aumentar la velocidad de cálculo de los pandas utilizando la biblioteca modin. Modin es una biblioteca de python muy similar a pandas (casi idéntica en términos de sintaxis) capaz de manejar un gran conjunto de datos que no puede caber en la RAM de una sola vez. Los pandas son lo suficientemente buenos en términos de velocidad de ejecución para conjuntos de datos con un tamaño de MB y pocos GB, pero cuando se trata de conjuntos de datos realmente grandes, la velocidad para procesar los datos se convierte en un cuello de botella.

La biblioteca de Pandas fue diseñada para funcionar en un solo núcleo y, por lo tanto, con la potencia de cómputo de la era moderna, cada computadora portátil personal ahora viene con al menos 2 núcleos y Modin simplemente aprovecha esta oportunidad de ejecutar las operaciones en todos los núcleos disponibles, acelerando así todo el proceso.

Para instalar Modin y todas sus dependencias, use cualquiera de los siguientes comandos pip.

pip install modin[ray] 

O,

pip install modin[dask] 

O,

pip install modin[all] 

Para limitar la cantidad de CPU a usar, podemos agregar las siguientes 2 líneas de código en su secuencia de comandos

import os

# this specifies the number of
# CPUs to use. 
os.environ["MODIN_CPUS"] = "2"

Ejemplo 1: operación de adición de marco de datos:

Las operaciones Append() son muy comunes en pandas y en el siguiente código aquí lo hemos demostrado ejecutándolo 10 veces usando pandas y Modin y cronometrándolo uno contra el otro para ver la diferencia de aceleración. Claramente, Modin supera a los pandas ya que usa todos los núcleos disponibles en mi sistema. También se usa el módulo de tiempo para medir la velocidad de las operaciones para compararlas entre sí, y resulta que Modin es 25 veces más rápido que los pandas en este caso.

Código:

Python3

import pandas as pd
import modin.pandas as mpd
import time
 
start = time.time()
 
# Creating a Custom Dataframe
data = {'Name': ['Tom', 'nick', 'krish', 'jack',
                 'ash', 'singh', 'shilpa', 'nav'],
         
        'Age': [20, 21, 19, 18, 6, 12, 18, 20]}
 
df = pd.DataFrame(data)
 
# Appending the dataframe to itself 10 times.
for _ in range(10):
    df = df.append(df)
     
end = time.time()
print(f"Pandas Appending Time :{end-start}")
 
start = time.time()
modin_df = mpd.DataFrame(data)
 
# Appending the dataframe to itself 10 times.
for _ in range(10):
    modin_df = modin_df.append(modin_df)
     
end = time.time()
print(f"Modin Appending Time :{end-start}")

Salida :

Pandas Appending Time :0.682852745056152
Modin Appending Time :0.027661800384521484

Ejemplo 2: Modin es 4,4 veces más rápido que pandas.

Aquí estamos utilizando un archivo CSV de 602 MB de tamaño que se puede descargar desde este enlace . También renombré el archivo como demo.csv para que sea breve. En el siguiente código aquí, usamos el método fillna() que recorre todo el marco de datos y llena todos los valores de NaN con el valor deseado en mi ejemplo, es 0.

Código:

Python3

import pandas as pd
import modin.pandas as mpd
 
# Reading demo.csv file into pandas df
df = pd.read_csv("demo.csv")
 
s = time.time()
df = df.fillna(value=0)
 
e = time.time()
print(f"Pandas fillna Time: {e-s})
 
# Reading demo.csv file into modin df
modin_df = mpd.read_csv("demo.csv")
s = time.time()
       
modin_df = modin_df.fillna(value=0)
e = time.time()
print(f"Modin fillna Time: {e - s})

Salida :

Pandas fillna Time: 1.2 sec
Modin fillna Time: 0.27 sec

Publicación traducida automáticamente

Artículo escrito por arun singh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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