NTA

Polars: самая быстрая библиотека для обработки данных

Polars или Pandas? Кто быстрее?

Устанавливаем Polars:

Перемещаемся в Jupyter Notebook.

Импортируем нужные нам библиотеки:

import polars as pl import pandas as pd

Набор данных, на котором будут проводиться все тесты:

Набор данных представляет из себя таблицу с лучшими бомбардирами футбольных лиг с 2016 по 2020 год.

Время считывания файла:

%time pl_data = pl.read_csv("Data.csv") CPU times: user 7.7 ms, sys: 5.7 ms, total: 13.4 ms Wall time: 9.94 ms %time pd_data = pd.read_csv("Data.csv") CPU times: user 11.9 ms, sys: 4.59 ms, total: 16.5 ms Wall time: 17.1 ms

Видно, что Pandas проиграл по скорости считывания файла практически в два раза.

Далее вызовем метод shape, чтобы посмотреть на размерность нашего набора данных:

%time pl_data.shape CPU times: user 27 µs, sys: 8 µs, total: 35 µs Wall time: 38.1 µs (660, 15) %time pd_data.shape CPU times: user 32 µs, sys: 4 µs, total: 36 µs Wall time: 39.8 µs (660, 15)

В данном противостоянии Polaris оказался ненамного быстрее Pandas. Идем дальше.

Теперь проведем фильтрацию нашего набора данных. Давайте посмотрим на игроков, которые забили больше 20 голов за один сезон и играют в La Liga (Чемпионат Испании):

%time pl_data_filter = pl_data[(pl_data["Goals"] > 20) & (pl_data["League"] == "La Liga")] CPU times: user 744 µs, sys: 469 µs, total: 1.21 ms Wall time: 501 µs %time pd_data_filter = pd_data[(pd_data["Goals"] > 20) & (pd_data["League"] == "La Liga")] CPU times: user 2.22 ms, sys: 98 µs, total: 2.31 ms Wall time: 2.27 ms

Polaris с фильтрацией справился быстрее нежели Pandas. Посмотрим на результат фильтрации:

pl_data_filter

Стоит отметить, что под названием колонки Polaris пишет ее тип, что крайне удобно, на мой взгляд.

Давайте попробуем сгруппировать наши данные, сгруппируем по именам футболистов и подсчитаем среднее количество голов, который каждый игрок забил за 4 сезона и посмотрим на время выполнения группировки:

%time pl_group_by = pl_data.groupby("Player Names").agg([pl.col("Goals").mean()]).sort("Goals_mean", reverse=True) CPU times: user 5.52 ms, sys: 8 ms, total: 13.5 ms Wall time: 4.78 ms %time pd_group_by = pd_data.groupby("Player Names").agg({'Goals': 'mean'}).sort_values("Goals", ascending=False) CPU times: user 7.87 ms, sys: 528 µs, total: 8.4 ms Wall time: 7.9 ms

Pandas проиграл по скорости группировки в 1,5 раза, посмотрим на результат группировки (выберем топ-5):

pl_group_by[:5]

Последним этапом сравнения быстродействия станет запись в CSV файл, возьмем наши сгруппированные данные и сохраним их:

%time pl_group_by.to_csv('Polars.csv') CPU times: user 460 µs, sys: 1.54 ms, total: 2 ms Wall time: 3.41 ms %time pd_group_by.to_csv('Pandas.csv') CPU times: user 5.61 ms, sys: 2.45 ms, total: 8.07 ms Wall time: 7.77 ms

Polars оказался быстрее Pandas по сохранению файла в 2 раза.

В заключение хочу отметить, что всем, кто занимается анализом данных, стоит обратить внимание на данную библиотеку, синтаксис практически не отличается от синтаксиса Pandas, но скорость у Polars выше. Так же оставлю ссылку на документацию Polars: тык.

0
Комментарии
Читать все 0 комментариев
null