Skip to content

Cuadernin/OptDataPython

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 

Repository files navigation

Optimización de lectura de datasets usando Pandas

Tanto Python como Pandas están bien optimizados para leer millones de registros de forma rápida y eficaz. Sin embargo, muchas veces es posible optimizar aún más.

La siguiente imagen es un caso real de una base de datos de 20GB cuya lectura a partir de CSV toma 17 mins y gracias a la siguiente guia logré disminuir el tiempo a menos de 2 mins.



Guía 📑 (usando Pandas)

En un primer instante es necesario leer los datos en crudo para iniciar con la optimización.

  1. Realiza un análisis exploratorio haciendo enfasis en identificar los mejores tipos de datos para cada campo. Este paso es sumamente importante ya que a partir de aquí es posible determinar qué campos son optimizables.
    • Por ejemplo, si una variable con 1s y 0s Pandas la identifica como float (suele pasar) es muchísimo mejor cambiar el tipo a boolean
    • Si existe el campo edad o algún otro cuyos valores no son tan altos cambialo a np.int8 o np.int16.
    • Identica los campos de fecha y cambialos a datetime o timedelta según sea el caso
    • En caso que un campo de tipo string cumpla con las reglas de categorical (similar al factor en R), cambíalo. Este paso optimiza muchísimos procesos y es muy recomedable analizar si aplica.

Los casos más sensibles son los númericos, pues la optimización de los campos depende del rango de valores qué tiene cada campo y si esta bien que haya NA. Justo para eso es el análisis exploratorio.

  1. Corrige errores en los campos de tipo object. Por ejemplo, el siguiente bloque de código muestra como es posible hacer algunos cambios en un campo de tipo object para posteriormente convertirlo a boolean
df['Casado'] = df['Casado'].replace({1:True,0:False,'VERDADERO':True,'FALSO':False,'TRUE':True,'FALSE':False,'True':True,'False':False,'false':False,'true':True,'1':True,'0':False},regex=True)
df['Casado'] = df.Casado.astype("boolean")
  1. Después de haber optimizado los campos debes guardar el dataset usando la extensión FEATHER en caso que solo lo vayas a usar en Python o R. En caso que no sea así podrías usar alguna de estas.

Nota: Existen ciertas librerias alternativas a Pandas. Puedes usarlas pero desde mi experiencia antes debes identificar si la librería te ayudará después de la lectura ya que algunas tienen limitaciones o son muy estrictas con los tipos de datos, lo que puede dificultar los pasos siguientes.