https://github.com/Rdatatable/data.table/wiki/Benchmarks-%3A-Grouping
Тесты data.table не обновлялись с 2014 года. Я слышал где-то, что Pandas
сейчас быстрее, чем data.table
. Это правда? Кто-нибудь делал какие-либо тесты? Я никогда не использовал Python раньше, но подумал бы о переключении, если pandas
может победить data.table
?
Ответы:
Да, эталонный тест, который вы указали в своем вопросе, был недавно обновлен для последней версии data.table и pandas. Дополнительно было добавлено другое программное обеспечение. Вы можете найти обновленный эталонный тест по адресу https://h2oai.github.io/db-benchmark.
К сожалению, он запланирован на 125 ГБ памяти (а не на 244 ГБ как оригинал). В результате pandas и dask не могут сделать попытку данных
groupby
на 1e9 строк (50GB csv), потому что им не хватает памяти при чтении данных. Так что для панд против data.table вы должны посмотреть на данные 1e8 строк (5 ГБ).Чтобы не просто связать контент, который вы запрашиваете, я вставляю последние сроки этих решений.
пожалуйста, обратите внимание, что эти сроки устарели,
посетите https://h2oai.github.io/db-benchmark для получения обновленных таймингов.
В 4 из 5 вопросов data.table быстрее, и мы видим, что он лучше масштабируется.
Сразу отмечу , это тайминги как сейчас , где
id1
,id2
иid3
являются символьными полями.Те будут изменены скоро категориченDONE . Кроме того, существуют другие факторы, которые могут повлиять на эти временные параметры в ближайшем будущем (например,группирование в параллельном режимеDONE ). Мы также собираемся добавить отдельные контрольные показатели для данных, имеющих NA , иразличного кардинальностиDONE .Другие задачи , приходят к этому непрерывному проекту бенчмаркинг , так что если вы заинтересованы в том
join
,sort
,read
и других , не забудьте проверить его позже.И, конечно же, вы можете оставить отзыв в репо проекта!
источник
blocksize
вread_csv
). Вы пытались избежать вызоваcompute()
и вывести вывод на диск, чтобы избежать сборки всей выходной таблицы в памяти?Мы с коллегой провели предварительные исследования различий в производительности между пандами и таблицей данных. Вы можете найти исследование (которое было разделено на две части) в нашем блоге (вы можете найти вторую часть здесь ).
Мы выяснили, что есть некоторые задачи, в которых pandas явно превосходит data.table, но также случаи, когда data.table намного быстрее. Вы можете проверить это сами и сообщить нам, что вы думаете о результатах.
РЕДАКТИРОВАТЬ:
Если вы не хотите читать блоги подробно, вот краткое изложение нашей настройки и наших выводов:
Настроить
Мы сравнили
pandas
иdata.table
на 12 различных смоделированных наборах данных по следующим операциям (пока), которые мы назвали сценариями.Расчеты проводились на машине с процессором Intel i7 2,2 ГГц с 4 физическими ядрами, 16 ГБ ОЗУ и жестким диском SSD. Версии программного обеспечения были OS X 10.13.3, Python 3.6.4 и R 3.4.2. Соответствующие версии библиотеки были 0,22 для панд и 1.10.4-3 для data.table
В двух словах
data.table
кажется, быстрее при выборе столбцов (pandas
в среднем занимает 50% больше времени)pandas
быстрее фильтрует строки (в среднем примерно 50%)data.table
кажется, значительно быстрее при сортировке (pandas
иногда был в 100 раз медленнее)pandas
Обратите внимание, что я старался максимально упростить результаты, чтобы не утомлять вас до смерти. Для более полной визуализации прочитайте исследования. Если вы не можете получить доступ к нашей веб-странице, пожалуйста, отправьте мне сообщение, и я перешлю вам наш контент. Вы можете найти код для полного изучения на GitHub . Если у вас есть идеи, как улучшить нашу учебу, пожалуйста, напишите нам по электронной почте. Вы можете найти наши контакты на GitHub.
источник
Нет, на самом деле, если размер набора данных оооочень велик из-за сбоя панд, вы в основном застряли в dask, который отстой, и вы даже не можете сделать простую групповую сумму. Dplyr не может быть быстрым, но это не портит.
В настоящее время я работаю над небольшим набором данных 2G, и простой
print(df.groupby(['INCLEVEL1'])["r"].sum())
сбой в работе.Не было этой ошибки с dplyr.
Итак, если панды могут обрабатывать набор данных, я использую панд, если нет, придерживаюсь таблицы данных R.
И да, вы можете преобразовать dask обратно в фрейм данных pandas с помощью простого,
df.compute()
но это занимает довольно много времени, так что вы могли бы просто терпеливо ждать загрузки панд или чтения данных.источник
Я знаю, что это старый пост, но подумал, что стоит упомянуть - использование перо (в R и в Python) позволяет работать с фреймами данных / таблицами данных и обмениваться этими результатами через перо.
Смотрите страницу Github из перьев
источник