"La humanidad creó cinco exabytes de información desde el momento del nacimiento de la civilización hasta 2003, pero ahora se está creando la misma cantidad cada dos días". Eric SchmidtDatatable es una biblioteca de Python para realizar un procesamiento eficiente de datos multiproceso. Datatable admite conjuntos de datos que no caben en la memoria.
Si escribe en R, entonces probablemente ya esté utilizando el paquete 
data.table . 
Data.table es una extensión del paquete 
data.frame R. Además, aquellos que usan R para agregar rápidamente conjuntos de datos grandes no pueden prescindir de este paquete (estamos hablando, en particular, de unos 100 GB de datos en RAM).
El paquete 
data.table para R es muy flexible y potente. Usarlo es fácil y conveniente, los programas en los que se usa se escriben con bastante rapidez. Este paquete es ampliamente conocido entre los programadores R. Se descarga más de 400 mil veces al mes, se usa en casi 650 paquetes CRAN y Bioconductor ( 
fuente ).
¿Para qué sirve la minería de datos para Python? El caso es que hay un paquete de 
datatable Python que es un análogo de 
data.table del mundo R. El paquete de 
datatable claramente enfocado en el procesamiento de grandes conjuntos de datos. Se caracteriza por un alto rendimiento, tanto cuando se trabaja con datos que están completamente ubicados en la RAM, como cuando se trabaja con datos cuyo tamaño excede la cantidad de RAM disponible. Es compatible con el procesamiento de datos multiproceso. En general, el paquete de 
tabla de datos se puede llamar el hermano menor de 
data.table .
Tabla de datos
Los sistemas modernos de aprendizaje automático necesitan procesar cantidades monstruosas de datos y generar muchas funciones. Esto es necesario para construir modelos lo más precisos posible. El módulo Python de 
datatable fue creado para resolver este problema. Este es un conjunto de herramientas para realizar operaciones con grandes volúmenes de datos (hasta 100 GB) en una sola computadora a la mayor velocidad posible. La 
datatable está patrocinada por 
datatable y el primer usuario del paquete es 
Driverless.ai .
Este kit de herramientas es muy similar a los 
pandas , pero está más enfocado en proporcionar procesamiento de datos de alta velocidad y admitir grandes conjuntos de datos. Los desarrolladores del paquete de 
datatable , además, se esfuerzan por hacer que sea conveniente para los usuarios trabajar con él. Es, en particular, una API potente y mensajes de error bien pensados. En este artículo, hablaremos sobre cómo usar la 
datatable y cómo se ve en comparación con los 
pandas al procesar grandes conjuntos de datos.
Instalación
En macOS, 
datatable se puede instalar fácilmente usando 
pip :
 pip install datatable 
En Linux, la instalación se realiza desde distribuciones binarias:
 
Actualmente, la 
datatable no funciona en Windows, pero se está trabajando en esta dirección, por lo que el soporte de Windows es solo cuestión de tiempo.
Los detalles sobre la instalación de la 
datatable se pueden encontrar 
aquí .
El código que se utilizará en este artículo se puede encontrar en 
este repositorio de GitHub o 
aquí en mybinder.org.
Lectura de datos
El conjunto de datos con el que experimentaremos aquí está tomado de Kaggle ( 
Lending Club Loan Data Dataset ). Este conjunto consta de datos completos sobre todos los préstamos emitidos en 2007-2015, incluido el estado actual del préstamo (actual, atrasado, totalmente pagado, etc.) y la información de pago más reciente. El archivo consta de 2,26 millones de filas y 145 columnas. El tamaño de este conjunto de datos es ideal para demostrar las capacidades de la biblioteca de 
datatable .
 
Carguemos los datos en un objeto 
Frame . La unidad básica de análisis en una 
datatable es 
Frame . Esto es lo mismo que un 
DataFrame de una tabla de 
pandas o SQL. Es decir, estamos hablando de datos organizados como una matriz bidimensional en la que se pueden distinguir filas y columnas.
▍ Carga de datos usando tabla de datos
 %%time datatable_df = dt.fread("data.csv") ____________________________________________________________________ CPU times: user 30 s, sys: 3.39 s, total: 33.4 s           Wall time: 23.6 s 
La función 
fread() es un mecanismo potente y muy rápido. Puede detectar y procesar automáticamente parámetros para la gran mayoría de los archivos de texto, descargar datos de archivos .ZIP y archivos de Excel, recuperar datos por URL y mucho más.
Además, el analizador de 
datatable tiene las siguientes características:
- Puede detectar automáticamente delimitadores, encabezados, tipos de columna, reglas de escape de caracteres, etc.
- Puede leer datos de varias fuentes. Entre ellos se encuentran el sistema de archivos, URL, shell de comandos, texto sin formato, archivos.
- Es capaz de realizar lecturas de datos multiproceso para obtener el máximo rendimiento.
- Muestra un indicador de progreso al leer archivos grandes.
- Puede leer archivos que cumplen y no cumplen con RFC4180 .
▍ Descargar datos usando pandas
Ahora veamos cuánto tiempo necesitan los 
pandas leer el mismo archivo.
 %%time pandas_df= pd.read_csv("data.csv") ___________________________________________________________ CPU times: user 47.5 s, sys: 12.1 s, total: 59.6 s Wall time: 1min 4s 
Puede ver que la 
datatable claramente más rápida que los 
pandas al leer grandes conjuntos de datos. 
Pandas en nuestro experimento tardan más de un minuto, y el tiempo requerido por la 
datatable de 
datatable se mide en segundos.
Conversión de objeto de marco
Un objeto de 
Frame paquete de 
datatable existente puede convertirse en un objeto 
DataFrame numpy o 
pandas . Se hace así:
 numpy_df = datatable_df.to_numpy() pandas_df = datatable_df.to_pandas() 
Intentemos convertir una 
datatable de 
datatable Frame existente a 
pandas DataFrame y veamos cuánto tarda.
 %%time datatable_pandas = datatable_df.to_pandas() ___________________________________________________________________ CPU times: user 17.1 s, sys: 4 s, total: 21.1 s Wall time: 21.4 s 
Parece que leer el archivo en una 
datatable Frame y luego convertirlo en un objeto 
DataFrame pandas lleva menos tiempo que cargar datos en un 
DataFrame usando 
pandas . Por lo tanto, tal vez, si planea procesar grandes cantidades de datos usando 
pandas , sería mejor cargarlos usando 
datatable y luego convertirlos en un 
DataFrame .
 type(datatable_pandas) ___________________________________________________________________ pandas.core.frame.DataFrame 
Propiedades básicas del objeto Frame.
Considere las propiedades básicas de un objeto 
Frame de una 
datatable . Son muy similares a las propiedades similares del objeto 
DataFrame de 
pandas :
 print(datatable_df.shape)        
Aquí podemos usar el método 
head() , que muestra las 
n primeras líneas:
 datatable_df.head(10) 
Las primeras 10 filas de un objeto Frame de una tabla de datosLos colores del encabezado indican el tipo de datos. El rojo indica líneas, el verde indica números enteros, el azul indica números de punto flotante.
Estadísticas resumidas
Calcular estadísticas resumidas en 
pandas es una operación que requiere mucha memoria para completarse. En el caso de 
datatable esto no es así. Estos son los comandos que puede usar para calcular varias métricas en una 
datatable :
 datatable_df.sum()      datatable_df.nunique() datatable_df.sd()       datatable_df.max() datatable_df.mode()     datatable_df.min() datatable_df.nmodal()   datatable_df.mean() 
Calculamos el valor promedio sobre las columnas usando 
datatable y 
pandas y analizamos el tiempo requerido para completar esta operación.
▍ Encontrar el promedio usando la tabla de datos
 %%time datatable_df.mean() _______________________________________________________________ CPU times: user 5.11 s, sys: 51.8 ms, total: 5.16 s Wall time: 1.43 s 
▍ Encontrar el promedio usando pandas
 pandas_df.mean() __________________________________________________________________ Throws memory error. 
Como puede ver, en 
pandas no pudimos obtener el resultado: se emitió un error relacionado con la memoria.
Manipulación de datos
Frame y 
DataFrame son estructuras de datos que son tablas. En la 
datatable , los corchetes se utilizan para manipular datos. Esto es similar a cómo funcionan con matrices convencionales, pero aquí, al usar corchetes, puede usar características adicionales.
Trabajar con datos de tabla de datos usando corchetesEn matemáticas, cuando se trabaja con matrices, también se utilizan construcciones de la forma 
DT[i, j] . Se pueden encontrar estructuras similares en C, C ++ y R, en 
pandas y paquetes 
numpy , así como en muchas otras tecnologías. Considere realizar manipulaciones de datos comunes en una 
datatable .
▍ Formando muestras de fila o columna
El siguiente código selecciona todas las filas de la columna 
funded_amnt :
 datatable_df[:,'funded_amnt'] 
Seleccione todas las filas de la columna funding_amntAquí se explica cómo seleccionar las primeras 5 filas y 3 columnas:
 datatable_df[:5,:3] 
Selección de las primeras 5 filas y 3 columnas.▍ Clasificación de datos mediante datatable
Ordene el conjunto de datos por la columna seleccionada:
 %%time datatable_df.sort('funded_amnt_inv') _________________________________________________________________ CPU times: user 534 ms, sys: 67.9 ms, total: 602 ms Wall time: 179 ms 
▍ Clasificación de datos mediante pandas
 %%time pandas_df.sort_values(by = 'funded_amnt_inv') ___________________________________________________________________ CPU times: user 8.76 s, sys: 2.87 s, total: 11.6 s Wall time: 12.4 s 
Tenga en cuenta la diferencia significativa en el tiempo requerido para ordenar 
datatable y 
pandas .
▍Eliminar filas y columnas
Aquí se explica cómo eliminar una columna llamada 
member_id :
 del datatable_df[:, 'member_id'] 
Agrupación
Datatable, como los 
pandas , admite capacidades de agrupación de datos. Echemos un vistazo a cómo obtener el promedio de la columna 
funded_amound , 
funded_amound datos se agrupan por la columna de 
grade .
▍ Agrupar datos usando datatable
 %%time for i in range(100):   datatable_df[:, dt.sum(dt.f.funded_amnt), dt.by(dt.f.grade)] ____________________________________________________________________ CPU times: user 6.41 s, sys: 1.34 s, total: 7.76 s Wall time: 2.42 s 
Aquí puede ver el uso de la construcción 
.f . Este es el llamado proxy de marco, un mecanismo simple que le permite hacer referencia al objeto 
Frame con el que se están realizando algunas acciones actualmente. En nuestro caso, 
dt.f es lo mismo que 
datatable_df .
▍ Agrupar datos usando pandas
 %%time for i in range(100):   pandas_df.groupby("grade")["funded_amnt"].sum() ____________________________________________________________________ CPU times: user 12.9 s, sys: 859 ms, total: 13.7 s Wall time: 13.9 s 
Filtrado de líneas
La sintaxis de filtrado es similar a la sintaxis de agrupación. 
loan_amnt líneas 
loan_amnt para las cuales el valor del 
loan_amnt mayor que el 
funded_amnt .
 datatable_df[dt.f.loan_amnt>dt.f.funded_amnt,"loan_amnt"] 
Guardar un objeto de marco
El contenido del objeto 
Frame se puede escribir en un archivo CSV, lo que permite el uso de datos en el futuro. Se hace así:
 datatable_df.to_csv('output.csv') 
Puede leer sobre otros métodos de 
datatable de datos para trabajar con datos 
aquí .
Resumen
El módulo Python de 
datatable es definitivamente más rápido que los 
pandas habituales. También es una bendición para aquellos que necesitan procesar conjuntos de datos muy grandes. Hasta ahora, la única 
datatable de datos 
datatable en comparación con los 
pandas es la cantidad de funcionalidad. Sin embargo, se está trabajando 
datatable en la 
datatable de 
datatable , por lo que es muy posible que en el futuro, la 
datatable supere a los 
pandas en todas las direcciones.
Estimados lectores! ¿Planea utilizar el paquete de 
datatable en sus proyectos?

