Почему слияния pandas в python были быстрее, чем слияния data.table в R в 2012 году?

Недавно я наткнулся на библиотеку pandas для python, которая, согласно этому бенчмарку, очень быстро объединяет данные в памяти. Она даже быстрее, чем data.table пакет в R (мой любимый язык для анализа).

Почему pandas намного быстрее, чем data.table? Это связано с присущим python преимуществом в скорости по сравнению с R, или есть какой-то компромисс, о котором я не знаю? Есть ли способ выполнять внутренние и внешние соединения в data.table, не прибегая к merge(X, Y, all=FALSE) и merge(X, Y, all=TRUE)?

Comparison

Вот код R и код Python, использованные для сравнения различных пакетов.

156
задан Hugh 15 July 2018 в 07:17
поделиться

1 ответ

Существуют большие ответы, особенно сделанные авторами обоих инструментов, о которых спрашивает вопрос. Ответ Matt объясняет случай, о котором сообщают в вопросе, что он был вызван ошибкой и не алгоритмом слияния. Ошибка назад уже была закреплена в следующий день, больше, чем 7 несколько лет.

В моем ответе я обеспечу некоторые актуальные синхронизации объединяющейся операции для data.table и панд. Обратите внимание, что plyr и базируются, слияние R не включены.

Синхронизации, которые я представляю, происходят от сравнительный тест дб проект, непрерывно выполняемый восстанавливаемый сравнительный тест. Это обновляет инструменты до последних версий и повторно выполненных сценариев сравнительного теста. Это выполняет много других программных продуктов. Если Вы интересуетесь Spark, Dask, и немногие другие, несомненно, проверят ссылку.

<час>

На данный момент... (все еще, чтобы быть реализованным: еще один размер данных и еще 5 вопросов)

Мы тестируем 2 различных размера данных таблицы LHS.
Для каждого из тех размеров данных мы выполняем 5 различных вопросов о слиянии.

q1: внутреннее объединение RHS- LHS, маленькое на целом числе
q2: RHS-носитель внутреннего объединения LHS на целом числе
q3: LHS , внешний RHS-носитель соединения на целом числе
q4: RHS-носитель внутреннего объединения LHS на [1 129] фактор (категориальный)
q5: внутреннее объединение RHS- LHS, большое на целом числе

, таблица RHS имеет 3 различных размера

  • маленькая , переводит в размер носителя LHS/1e6
  • , переводит в размер LHS/1e3
  • , большого , переводит в размер LHS

Во всех случаях существует приблизительно 90% соответствия строкам между LHS и RHS и никакими дубликатами в RHS присоединяющийся столбец (никакое декартово произведение).

<час>

На данный момент (выполненный 2-го ноября 2019)

панды 0.25.3 выпущенных 1-го ноября 2019
data.table 0.12.7 (92abb70) выпущенный 2-го ноября 2019

Ниже синхронизаций находятся в секундах для двух различных размеров данных LHS. Столбец pd2dt является добавленным полевым отношением хранения того, сколько раз панд медленнее, чем data.table.

  • данные LHS на 0,5 ГБ
+-----------+--------------+----------+--------+
| question  |  data.table  |  pandas  |  pd2dt |
+-----------+--------------+----------+--------+
| q1        |        0.51  |    3.60  |      7 |
| q2        |        0.50  |    7.37  |     14 |
| q3        |        0.90  |    4.82  |      5 |
| q4        |        0.47  |    5.86  |     12 |
| q5        |        2.55  |   54.10  |     21 |
+-----------+--------------+----------+--------+
  • данные LHS на 5 ГБ
+-----------+--------------+----------+--------+
| question  |  data.table  |  pandas  |  pd2dt |
+-----------+--------------+----------+--------+
| q1        |        6.32  |    89.0  |     14 |
| q2        |        5.72  |   108.0  |     18 |
| q3        |       11.00  |    56.9  |      5 |
| q4        |        5.57  |    90.1  |     16 |
| q5        |       30.70  |   731.0  |     23 |
+-----------+--------------+----------+--------+
2
ответ дан 23 November 2019 в 21:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: