Как Jupyter Notebook показал, что такое рабочие задачи

Что делает человек, желающий стать аналитиком данных? В том числе решает учебно-тренировочные задачи с Kaggle. Рано или поздно получает заветный оффер. После чего внезапно сталкивается с тем, что суровая реальность серьезно отличается от тепличной среды, в которой построил не одну модель на многочисленных датасетах.

Например, дают болезненно о себе знать недостатки Jupyter Notebook. Мало того, что ipynb-файлы слабо поддаются отслеживанию в Git. Увы, во многом классный продукт жадно потребляет RAM. И это критично, особенно когда от тебя просят все прелести Big Data на скромных вычислительных ресурсах.

Что же делать? Каким образом в подобных условиях воспользоваться очевидными удобствами Jupyter Notebook?

Применение PySpark тут еще чрезмерно избыточно, поскольку этот фреймворк уместен в историях с данными на сотни ГБ.

Polars выглядит круто в теории благодаря колоночности, а также полноценному параллелизму в силу того, что под капотом находится Rust. Однако на практике он еще сырой.

Поэтому разумно пока действовать в рамках хорошо знакомого Pandas. По дефолту стандарт в мире манипуляций с датафреймами эксплуатирует тяжеловесные типы данных, а также опирается на объекты Python. Из-за чего одни только индексы требуют много-много RAM. Дабы избежать такую проблему, можно перейти к типам данных PyArrow. Благодаря ним обеспечивается не построчный, а колоночный доступ к информации в датафреймам. Более того, существенной экономии памяти на индексах сопутствует ускорение операций. Единственный изъян заключается в том, что очень часто приходится переинициализировать типы данных PyArrow, ибо Pandas стремится вернуться к исходным тяжеловесным.

Причем тут отличие рабочих задач от учебно-тренировочных? Потому что подобное регулярно сопровождает специалистов в течение трудовых будней. Только красивая реклама иллюстрирует, что весь профессионализм сводится к взгляду в монитор под Пина Коладу где-нибудь на Самуи. А бесчисленные EdTech-монстры не просто не рассказывают об описанном выше, но и не учат справляться с такими вызовами. Хотя в общем-то могли бы.