Python (pandas) vs SQL
Тут я не буду очень оригинальным и скажу, что без sql быть аналитиком сложно, а вот без знаний pandas вполне можно. Но давайте поймём почему?
1) Большое данные
если у вас не Spark или Modin (или другие апгрейды pandas), то скорей всего ваш код выполняется на одном ядре, и даже не смотря на всякие векторизации и ускорения на больших (1 млн строк и более) данных pandas будет достаточно медленный.
SQL же в компаниях обычно используют MPP системы (Greenplum, click house, vertica). Они специально сделаны для параллельной обработки данных (если не накосячил в запросе), что может дать большой выигрыш в скорости.
2) JOIN
90% работы аналитика это join (merge в pandas). Опять же, обычно в компаниях используют так называемые колончатые базы. Которые как раз запросы типо join выполняют быстро.
2*) JOIN с условием
Отдельная боль для Pandas Если вам нужно сложное условие на ключи:
left join a on (a.1 = b.1 and a.2 != b.2)
Я не очень знаю, как такое сделать в Pandas. В таком случае проще использовать sql, чем pandas.
3) Оконные функции (и группировки). Вообще оконки можно делать в pandas, но честно говоря мне кажется это не так удобно, как в SQL. Аналогично с группировками. Не так давно в pandas появилась функция agg (очень рекомендую), но работа с группами, с тем, что надо делать reset_index, как уж очень наворочено (ну либо я не разобрался).
Поругали Pandas, теперь давайте SQL
3) Функции
Да в sql есть функции, но опять же использовать их не очень приятно. В итоге в SQL приходиться дублировать код.
4) pivot table, сводные таблицы и это все. В питоне делается гораздо проще. В целом за вас это может сделать BI инструменты, но все же. Более подробно про pivot table, cross-table
5) работа с регулярками. Тут без комментариев, если вам нужно написать 10 регулярок, которые чистят данные, то лучше pandas,
Итог. Я сейчас почти для всего использую SQL. Но если нужно чистить данные или сделать pivot table использую pandas.
В следующий серии расскажу, как я ботал pandas, numpy и это все.
#SQL #python #pandas
Post #34
553