Warning: mkdir(): No space left on device in /var/www/group-telegram/post.php on line 37

Warning: file_put_contents(aCache/aDaily/post/c0mmit/--): Failed to open stream: No such file or directory in /var/www/group-telegram/post.php on line 50
commit history | Telegram Webview: c0mmit/44 -
Telegram Group & Telegram Channel
4 месяца назад пересел с pandas на polars.

Короткий итог: с polars пайплайн на старом наборе признаков стал быстрее раз в 6, а пик утилизации памяти меньше в 3 раза. Правда, я не сравнивал с Pandas 2.0, где завезли поддержку arrow.

Pandas – библиотека для анализа данных и работы с табличными данными.
Polars – более молодой аналог pandas для тех же целей

Pandas я использовал для EDA (посмотреть по быстрому какие-то статистики, сделать аналитику, которую муторно считать запросами в кликхаусе или бд) и для того, чтобы считать фичи в фоне на паре табличек. И если с EDA все норм, то считать фичи было не очень приятно.

Пайплайн для фичей выглядит так: подтянуть пару таблиц из MariaDB -> поджойнить/сгруппировать и собрать датафрейм -> посчитать разные счетчики, аггрегации, признаки (например, отношения лайков к просмотрам юзера у конкретного автора за последние 10 суток).

Количество строк в итоговом датафрейме 1-10 миллионов. Потом это все используется, чтобы обучать разные бустинги. Основной нюанс, операции нужно считать rolling с определенным окном. То есть на момент каждого события(каждой строки) нужно взять предыдущие события этой группы (например, юзера) за 1/7/30/..дней и посчитать среднее или другую статистику.

Почему polars оказался экономнее и быстрее:

+ Polars написан на Rust и оптимизирован под параллельные вычисления (когда есть такая возможность).

+ Polars использует arrow. Это такой формат хранения данных в памяти (RAM), который позволяет хранить объект не в одном участке памяти, а кусками в нескольких. А еще arrow хранит данные в колоночном формате.

+ Polars использует Lazy evaluations: (это когда операция выполняется в момент, когда нужен её результат, а не когда она объявлена (eager evaluation). Поэтому большие пайплайны операций может выполнить оптимальнее.

+ Streaming evaluation. Если вдруг датасет не помещается в оперативку, можно стримить кусками и обрабатывать их.

Нюансы и советы:
1. Синтаксис polars не сильно отличается от pandas, за вечер-два можно освоиться.
2. Если вдруг лень смотреть, как это пишется на polars, всегда можно вызвать метод .to_pandas().
3. Для коммуникаций с бд в polars использует библиотеку connector-x. Из плюсов – быстрая, из минусов нет готовой версии для докера под m1 и нельзя задавать схему датафрейма, когда читаешь из базы
4. Для хранения данных на диске теперь использую только parquet. (Быстрее i/o операции и файл легче, чем csv)

Ссылки
1. Если хотите попробовать polars, советую полистать официальный гайд
2. Всякие тесты и сравнение с другими либами от @train_test_split
3. Еще нашел такое сравнение polars с Pandas 2.0 (где используется arrow)



group-telegram.com/c0mmit/44
Create:
Last Update:

4 месяца назад пересел с pandas на polars.

Короткий итог: с polars пайплайн на старом наборе признаков стал быстрее раз в 6, а пик утилизации памяти меньше в 3 раза. Правда, я не сравнивал с Pandas 2.0, где завезли поддержку arrow.

Pandas – библиотека для анализа данных и работы с табличными данными.
Polars – более молодой аналог pandas для тех же целей

Pandas я использовал для EDA (посмотреть по быстрому какие-то статистики, сделать аналитику, которую муторно считать запросами в кликхаусе или бд) и для того, чтобы считать фичи в фоне на паре табличек. И если с EDA все норм, то считать фичи было не очень приятно.

Пайплайн для фичей выглядит так: подтянуть пару таблиц из MariaDB -> поджойнить/сгруппировать и собрать датафрейм -> посчитать разные счетчики, аггрегации, признаки (например, отношения лайков к просмотрам юзера у конкретного автора за последние 10 суток).

Количество строк в итоговом датафрейме 1-10 миллионов. Потом это все используется, чтобы обучать разные бустинги. Основной нюанс, операции нужно считать rolling с определенным окном. То есть на момент каждого события(каждой строки) нужно взять предыдущие события этой группы (например, юзера) за 1/7/30/..дней и посчитать среднее или другую статистику.

Почему polars оказался экономнее и быстрее:

+ Polars написан на Rust и оптимизирован под параллельные вычисления (когда есть такая возможность).

+ Polars использует arrow. Это такой формат хранения данных в памяти (RAM), который позволяет хранить объект не в одном участке памяти, а кусками в нескольких. А еще arrow хранит данные в колоночном формате.

+ Polars использует Lazy evaluations: (это когда операция выполняется в момент, когда нужен её результат, а не когда она объявлена (eager evaluation). Поэтому большие пайплайны операций может выполнить оптимальнее.

+ Streaming evaluation. Если вдруг датасет не помещается в оперативку, можно стримить кусками и обрабатывать их.

Нюансы и советы:
1. Синтаксис polars не сильно отличается от pandas, за вечер-два можно освоиться.
2. Если вдруг лень смотреть, как это пишется на polars, всегда можно вызвать метод .to_pandas().
3. Для коммуникаций с бд в polars использует библиотеку connector-x. Из плюсов – быстрая, из минусов нет готовой версии для докера под m1 и нельзя задавать схему датафрейма, когда читаешь из базы
4. Для хранения данных на диске теперь использую только parquet. (Быстрее i/o операции и файл легче, чем csv)

Ссылки
1. Если хотите попробовать polars, советую полистать официальный гайд
2. Всякие тесты и сравнение с другими либами от @train_test_split
3. Еще нашел такое сравнение polars с Pandas 2.0 (где используется arrow)

BY commit history


Warning: Undefined variable $i in /var/www/group-telegram/post.php on line 260

Share with your friend now:
group-telegram.com/c0mmit/44

View MORE
Open in Telegram


Telegram | DID YOU KNOW?

Date: |

Oleksandra Matviichuk, a Kyiv-based lawyer and head of the Center for Civil Liberties, called Durov’s position "very weak," and urged concrete improvements. On December 23rd, 2020, Pavel Durov posted to his channel that the company would need to start generating revenue. In early 2021, he added that any advertising on the platform would not use user data for targeting, and that it would be focused on “large one-to-many channels.” He pledged that ads would be “non-intrusive” and that most users would simply not notice any change. Messages are not fully encrypted by default. That means the company could, in theory, access the content of the messages, or be forced to hand over the data at the request of a government. WhatsApp, a rival messaging platform, introduced some measures to counter disinformation when Covid-19 was first sweeping the world. If you initiate a Secret Chat, however, then these communications are end-to-end encrypted and are tied to the device you are using. That means it’s less convenient to access them across multiple platforms, but you are at far less risk of snooping. Back in the day, Secret Chats received some praise from the EFF, but the fact that its standard system isn’t as secure earned it some criticism. If you’re looking for something that is considered more reliable by privacy advocates, then Signal is the EFF’s preferred platform, although that too is not without some caveats.
from br


Telegram commit history
FROM American