https://github.com/Rdatatable/data.table/wiki/Benchmarks-%3A-Grouping
Os benchmarks data.table não são atualizados desde 2014. Ouvi dizer que Pandas
agora é mais rápido do que data.table
. Isso é verdade? Alguém já fez benchmarks? Eu nunca usei Python antes, mas consideraria mudar se pandas
pode vencer data.table
?
Respostas:
Um colega e eu conduzimos alguns estudos preliminares sobre as diferenças de desempenho entre os pandas e a tabela de dados. Você pode encontrar o estudo (dividido em duas partes) em nosso Blog (você pode encontrar a parte dois aqui ).
Concluímos que há algumas tarefas em que os pandas superam claramente o data.table, mas também os casos em que o data.table é muito mais rápido. Você pode conferir e informar o que acha dos resultados.
EDIT:
Se você não quiser ler os blogs em detalhes, aqui está um breve resumo de nossa configuração e nossas descobertas:
Configuração
Comparamos
pandas
edata.table
em 12 diferentes conjuntos de dados simulados nas seguintes operações (até agora), que chamamos de cenários.Os cálculos foram realizados em uma máquina com Intel i7 de 2,2 GHz com 4 núcleos físicos, 16 GB de RAM e um disco rígido SSD. As versões de software eram OS X 10.13.3, Python 3.6.4 e R 3.4.2. As respectivas versões de bibliotecas utilizadas foram 0,22 para pandas e 1.10.4-3 para data.table
Resultados em poucas palavras
data.table
parece ser mais rápido ao selecionar colunas (pandas
em média, leva 50% mais tempo)pandas
é mais rápido na filtragem de linhas (aproximadamente 50% em média)data.table
parece ser consideravelmente mais rápido na classificação (pandas
às vezes é 100 vezes mais lento)pandas
Observe que tentei simplificar o máximo possível os resultados para não aborrecê-lo até a morte. Para uma visualização mais completa, leia os estudos. Se você não conseguir acessar nossa página, envie-me uma mensagem e eu encaminharemos nosso conteúdo. Você pode encontrar o código para o estudo completo no GitHub . Se você tem idéias de como melhorar nosso estudo, envie um e-mail para nós. Você pode encontrar nossos contatos no GitHub.
fonte
Sim, o benchmark que você vinculou na sua pergunta foi atualizado recentemente para a versão recente do data.table e pandas. Além disso, outro software foi adicionado. Você pode encontrar um benchmark atualizado em https://h2oai.github.io/db-benchmark
Infelizmente, ele está programado na máquina de memória de 125 GB (não 244 GB como a original). Como resultado, os pandas e ask não conseguem tentar dados de
groupby
1e9 linhas (50 GB csv) porque ficam sem memória ao ler dados. Portanto, para pandas vs data.table, é necessário examinar 1e8 linhas (5GB) de dados.Para não apenas vincular o conteúdo que você está solicitando, colo horários recentes para essas soluções.
observe que esses horários estão desatualizados,
visite https://h2oai.github.io/db-benchmark para obter horários atualizados
Em 4 de 5 perguntas, o data.table é mais rápido e podemos ver que ele é melhor.
Basta notar esta horários são a partir de agora , onde
id1
,id2
eid3
são campos de caracteres.Esses serão alterados em breve para categóricoCONCLUÍDO . Além disso, existem outros fatores que possam afetar esses horários no futuro próximo (comoagrupamento em paraleloDONE ). Também adicionaremos benchmarks separados para dados com NAs evárias cardinalidadesCONCLUÍDAS .Outras tarefas estão chegando a esse projeto de benchmarking contínuo; portanto, se você estiver interessado
join
,sort
,read
e outros não se esqueça de verificá-lo mais tarde.E é claro que você pode enviar comentários no repositório de projetos!
fonte
blocksize
inread_csv
). Você tentou evitar chamarcompute()
e despejar a saída no disco para evitar a montagem de toda a tabela de saída na memória?Não, de fato, se o tamanho do conjunto de dados é muuuuuuito grande, o panda trava, você está basicamente preso ao dask, o que é péssimo e você não pode nem fazer um simples grupo por soma. O dplyr pode não ser rápido, mas não estraga.
Atualmente, estou trabalhando em um pequeno conjunto de dados 2G e um simples
print(df.groupby(['INCLEVEL1'])["r"].sum())
travamento do dask.Não encontrou esse erro com o dplyr.
Portanto, se os pandas puderem lidar com o conjunto de dados, eu uso os pandas, caso contrário, atenha-se à tabela de dados R.
E sim, você pode converter o DASK de volta para o dataframe do pandas com um simples.
df.compute()
Mas leva um tempo bastante longo, portanto, você pode esperar pacientemente o carregamento do panda ou a leitura da tabela de dados.fonte
Eu sei que este é um post antigo, mas achei que vale a pena mencionar - o uso de feather (em R e em Python) permite operar em quadros de dados / tabelas de dados e compartilhar esses resultados por meio de feather.
Veja a página do github de feather
fonte