https://github.com/Rdatatable/data.table/wiki/Benchmarks-%3A-Grouping
Los puntos de referencia data.table no se han actualizado desde 2014. Escuché en algún lugar que Pandas
ahora es más rápido que data.table
. ¿Es esto cierto? ¿Alguien ha hecho alguna referencia? ¿Nunca he usado Python antes pero consideraría cambiar si pandas
puede vencer data.table
?
Respuestas:
Sí, el punto de referencia que ha vinculado en su pregunta se ha actualizado recientemente para la versión reciente de data.table y pandas. Además se ha agregado otro software. Puede encontrar un punto de referencia actualizado en https://h2oai.github.io/db-benchmark
Lamentablemente, está programado en una máquina de memoria de 125 GB (no 244 GB como el original). Como resultado, los pandas y dask no pueden intentar datos de
groupby
1e9 filas (50GB csv) porque se quedan sin memoria al leer los datos. Entonces, para pandas vs data.table, debe mirar datos de 1e8 filas (5GB).Para no solo vincular el contenido que está solicitando, pego los tiempos recientes para esas soluciones.
tenga en cuenta que esos horarios están desactualizados,
visite https://h2oai.github.io/db-benchmark para ver los horarios actualizados
En 4 de las 5 preguntas, data.table es más rápido y podemos ver que se escala mejor.
Ten en cuenta esta horarios son a partir de ahora , donde
id1
,id2
yid3
son campos de caracteres.Esos se cambiarán pronto aHECHOcategórico. Además, hay otros factores que pueden afectar esos tiempos en un futuro próximo (como laagrupación en paraleloHECHO ). También vamos a agregar puntos de referencia separados para los datos que tienen NA yvarias cardinalidadesHECHO .Otras tareas están llegando a este proyecto de evaluación comparativa continua por lo que si usted está interesado en
join
,sort
,read
y otros, asegúrese de comprobar más tarde.¡Y, por supuesto, puede enviar comentarios en el repositorio de proyectos!
fuente
blocksize
enread_csv
). ¿Intentó evitar llamarcompute()
y volcar la salida al disco para evitar ensamblar toda la tabla de salida en la memoria?Un colega y yo hemos realizado algunos estudios preliminares sobre las diferencias de rendimiento entre pandas y data.table. Puede encontrar el estudio (que se dividió en dos partes) en nuestro Blog (Puede encontrar la segunda parte aquí ).
Pensamos que hay algunas tareas donde los pandas claramente superan a data.table, pero también casos en los que data.table es mucho más rápido. Puede verificarlo usted mismo y decirnos qué piensa de los resultados.
EDITAR:
si no desea leer los blogs en detalle, aquí hay un breve resumen de nuestra configuración y nuestros hallazgos:
Preparar
Comparamos
pandas
ydata.table
en 12 conjuntos de datos simulados diferentes en las siguientes operaciones (hasta ahora), que llamamos escenarios.Los cálculos se realizaron en una máquina con un Intel i7 2.2GHz con 4 núcleos físicos, 16 GB de RAM y un disco duro SSD. Las versiones de software fueron OS X 10.13.3, Python 3.6.4 y R 3.4.2. Las respectivas versiones de la biblioteca utilizadas fueron 0.22 para pandas y 1.10.4-3 para data.table
Resultados en pocas palabras
data.table
parece ser más rápido al seleccionar columnas (pandas
en promedio toma un 50% más de tiempo)pandas
es más rápido al filtrar filas (aproximadamente 50% en promedio)data.table
parece ser considerablemente más rápido en la clasificación (apandas
veces era 100 veces más lento)pandas
Tenga en cuenta que intenté simplificar los resultados lo más posible para no aburrirlo hasta la muerte. Para una visualización más completa, lea los estudios. Si no puede acceder a nuestra página web, envíeme un mensaje y le enviaré nuestro contenido. Puede encontrar el código para el estudio completo en GitHub . Si tiene ideas sobre cómo mejorar nuestro estudio, envíenos un correo electrónico. Puede encontrar nuestros contactos en GitHub.
fuente
No, de hecho, si el tamaño del conjunto de datos es tan grande que los pandas se bloquean, básicamente estás atascado con dask, lo que apesta y ni siquiera puedes hacer un simple groupby-sum. Puede que dplyr no sea rápido, pero no daña.
Actualmente estoy trabajando en un pequeño conjunto de datos 2G y un simple
print(df.groupby(['INCLEVEL1'])["r"].sum())
bloquea el dask.No experimenté este error con dplyr.
Entonces, si los pandas pueden manejar el conjunto de datos, los uso, si no, me quedo con la tabla de datos R.
Y sí, puede convertir dask de nuevo a un marco de datos de pandas con un simple
df.compute()
Pero lleva bastante tiempo, por lo que podría esperar pacientemente a que se carguen los pandas o la tabla de datos para leer.fuente
Sé que esta es una publicación anterior, pero pensé que vale la pena mencionarla: usar feather (en R y en Python) permite operar en marcos de datos / tablas de datos y compartir esos resultados a través de feather.
Ver la página de github de la pluma
fuente