Время прочтения: 3 мин.
Устанавливаем 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: тык.