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: |

The original Telegram channel has expanded into a web of accounts for different locations, including specific pages made for individual Russian cities. There's also an English-language website, which states it is owned by the people who run the Telegram channels. Channels are not fully encrypted, end-to-end. All communications on a Telegram channel can be seen by anyone on the channel and are also visible to Telegram. Telegram may be asked by a government to hand over the communications from a channel. Telegram has a history of standing up to Russian government requests for data, but how comfortable you are relying on that history to predict future behavior is up to you. Because Telegram has this data, it may also be stolen by hackers or leaked by an internal employee. On February 27th, Durov posted that Channels were becoming a source of unverified information and that the company lacks the ability to check on their veracity. He urged users to be mistrustful of the things shared on Channels, and initially threatened to block the feature in the countries involved for the length of the war, saying that he didn’t want Telegram to be used to aggravate conflict or incite ethnic hatred. He did, however, walk back this plan when it became clear that they had also become a vital communications tool for Ukrainian officials and citizens to help coordinate their resistance and evacuations. For tech stocks, “the main thing is yields,” Essaye said. The S&P 500 fell 1.3% to 4,204.36, and the Dow Jones Industrial Average was down 0.7% to 32,943.33. The Dow posted a fifth straight weekly loss — its longest losing streak since 2019. The Nasdaq Composite tumbled 2.2% to 12,843.81. Though all three indexes opened in the green, stocks took a turn after a new report showed U.S. consumer sentiment deteriorated more than expected in early March as consumers' inflation expectations soared to the highest since 1981.
from tr


Telegram commit history
FROM American