https://github.com/Rdatatable/data.table/wiki/Benchmarks-%3A-Grouping
Les benchmarks data.table n'ont pas été mis à jour depuis 2014. J'ai entendu quelque part qui Pandas
est maintenant plus rapide que data.table
. Est-ce vrai? Quelqu'un a-t-il fait des repères? Je n'ai jamais utilisé Python auparavant mais envisagerais de changer si je pandas
peux battre data.table
?
Réponses:
Oui, la référence que vous avez liée dans votre question a été récemment mise à jour pour la version récente de data.table et pandas. De plus, d'autres logiciels ont été ajoutés. Vous pouvez trouver un benchmark mis à jour sur https://h2oai.github.io/db-benchmark
Malheureusement, il est prévu sur une machine à mémoire de 125 Go (pas 244 Go comme l'original). Par conséquent, les pandas et les utilisateurs ne peuvent pas essayer de données
groupby
sur 1e9 lignes (50 Go csv) car ils manquent de mémoire lors de la lecture des données. Donc, pour les pandas vs data.table, vous devez regarder les données de 1e8 lignes (5 Go).Pour ne pas simplement lier le contenu que vous demandez, je colle des timings récents pour ces solutions.
veuillez noter que ces horaires sont obsolètes,
visitez https://h2oai.github.io/db-benchmark pour les horaires mis à jour
Dans 4 questions sur 5, data.table est plus rapide et nous pouvons le voir évoluer mieux.
Notez juste cette timings sont d'ores et déjà , où
id1
,id2
etid3
sont des champs de caractère.Ceux - ci seront bientôt changé catégoriqueDONE . En outre, il existe d'autres facteurs qui sont susceptibles d'avoir un impact sur ces délais dans un avenir proche (comme leregroupement en parallèleFAIT ). Nous allons également ajouter des références distinctes pour les données ayant des NA etdiverses cardinalitésFAITES .D' autres tâches arrivent à ce projet continu d'analyse comparative , donc si vous êtes intéressé par
join
,sort
,read
et d' autres assurez - vous de le vérifier plus tard.Et bien sûr, vous êtes invités à fournir des commentaires dans le repo du projet!
la source
blocksize
dansread_csv
). Avez-vous essayé d'éviter d'appelercompute()
et de vider la sortie sur le disque pour éviter d'assembler la table de sortie entière en mémoire?Un collègue et moi avons effectué quelques études préliminaires sur les différences de performance entre les pandas et le tableau de données. Vous pouvez trouver l'étude (qui a été divisée en deux parties) sur notre blog (vous pouvez trouver la deuxième partie ici ).
Nous avons pensé qu'il y a des tâches où les pandas surpassent clairement data.table, mais aussi des cas où data.table est beaucoup plus rapide. Vous pouvez le vérifier vous-même et nous faire savoir ce que vous pensez des résultats.
EDIT:
Si vous ne voulez pas lire les blogs en détail, voici un bref résumé de notre configuration et de nos résultats:
Installer
Nous avons comparé
pandas
etdata.table
sur 12 ensembles de données simulés différents sur les opérations suivantes (jusqu'à présent), que nous avons appelées scénarios.Les calculs ont été effectués sur une machine avec un Intel i7 2,2 GHz avec 4 cœurs physiques, 16 Go de RAM et un disque dur SSD. Les versions du logiciel étaient OS X 10.13.3, Python 3.6.4 et R 3.4.2. Les versions de bibliothèques respectives utilisées étaient 0,22 pour les pandas et 1.10.4-3 pour data.table
Les résultats en bref
data.table
semble être plus rapide lors de la sélection des colonnes (celapandas
prend en moyenne 50% de temps en plus)pandas
est plus rapide pour filtrer les lignes (environ 50% en moyenne)data.table
semble être beaucoup plus rapide au tri (pandas
était parfois 100 fois plus lent)pandas
Veuillez noter que j'ai essayé de simplifier les résultats autant que possible pour ne pas vous ennuyer à mort. Pour une visualisation plus complète, lisez les études. Si vous ne pouvez pas accéder à notre page Web, veuillez m'envoyer un message et je vous ferai parvenir notre contenu. Vous pouvez trouver le code de l'étude complète sur GitHub . Si vous avez des idées pour améliorer notre étude, veuillez nous envoyer un e-mail. Vous pouvez retrouver nos contacts sur GitHub.
la source
Non, en fait, si la taille de l'ensemble de données est si grande que les pandas se bloquent, vous êtes essentiellement coincé avec des tâches, ce qui est nul et vous ne pouvez même pas faire une simple somme de groupe. dplyr n'est peut-être pas rapide, mais il ne gâche pas.
Je travaille actuellement sur un petit ensemble de données 2G et un simple
print(df.groupby(['INCLEVEL1'])["r"].sum())
bloque la tâche.N'a pas rencontré cette erreur avec dplyr.
Donc, si les pandas peuvent gérer l'ensemble de données, j'utilise des pandas, sinon, respectez le tableau de données R.
Et oui, vous pouvez reconvertir dask en une trame de données pandas avec un simple
df.compute()
mais cela prend un temps assez long, donc vous pourriez aussi bien attendre patiemment que les pandas se chargent ou que les données puissent être lues.la source
Je sais que c'est un article plus ancien, mais je pense qu'il vaut la peine de le mentionner - l'utilisation de feather (en R et en Python) permet de travailler sur des trames de données / tableaux de données et de partager ces résultats via feather.
Voir la page du github de plumes
la source