Все любят панд, но как насчет полярных?

Polars — это быстрая библиотека DataFrame, написанная на Rust с использованием модели памяти Apache Arrow. Он имеет привязки Python, которые предоставляют аналогичный API для pandas. Polars поддерживает как активный, так и ленивый режимы выполнения, что позволяет оптимизировать запросы и распараллеливать их. Polars использует maturin для компиляции кода Rust в модули Python.

Pandas и Polars — это библиотеки Python для анализа и обработки данных. У них есть некоторые сходства, но также и некоторые различия.

Некоторые из основных отличий:

Плюсы и минусы HL

Панды:

  • Плюсы: более зрелый и стабильный; Больше возможностей и функциональности; Дополнительная документация и поддержка сообщества
  • Минусы: менее производительный; Более подробный; Без ленивой оценки

Поляры:

  • Плюсы: более производительный; Более лаконичный; Ленивая оценка
  • Минусы: Менее зрелый и стабильный; Меньше возможностей и функциональности; Меньше документации и поддержки сообщества

Надеюсь, это поможет вам понять разницу между библиотеками Pandas и Polars Python.

Теперь давайте проверим это сами

Согласно некоторым тестам, polars также быстрее и эффективнее используют память, чем pandas, при чтении и фильтрации больших фреймов данных. Однако это может зависеть от различных факторов, таких как тип данных, формат файла, конфигурация оборудования и т. д.

Чтобы продемонстрировать, вот некоторый код, который показывает разницу в скорости между полярами и пандами.

Этот код Python использует модуль csv для создания файла CSV с 1 миллионом строк и 10 столбцами. Затем он использует модуль random для генерации случайных чисел для каждой ячейки в CSV. Вы можете изменить этот код, чтобы генерировать различные типы данных, если это необходимо. Полученный файл CSV будет сохранен в том же каталоге, что и скрипт Python.

Затем простой пример чтения этого CSV-файла и его фильтрации на основе условия с использованием обеих библиотек. Я также буду использовать модуль `timeit` для измерения времени выполнения каждой операции.

# Import libraries
import pandas as pd
import polars as pl
import timeit
import csv
import random

# Define the number of rows and columns in the CSV file
num_rows = 1000000
num_cols = 10

# Define the header row for the CSV file
header = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

# Generate random data for the CSV file
data = []
for i in range(num_rows):
    row = [random.randint(1, 100) for j in range(num_cols)]
    data.append(row)

# Write the data to a CSV file
with open('data.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(header)
    writer.writerows(data)

# Define file name
file_name = "data.csv"

# Define number of repetitions for timeit
reps = 10

# Define filter condition
condition = lambda df: df["a"] > 10

# Define functions for reading and filtering dataframes using polars and pandas
def read_polars():
    return pl.read_csv(file_name)

def read_pandas():
    return pd.read_csv(file_name)

def filter_polars(df):
    return df.filter(pl.col("a") > 10)

def filter_pandas(df):
    return df[df["a"] > 10]

# Read dataframes using polars and pandas
df_polars = read_polars()
df_pandas = read_pandas()

# Measure execution time for reading dataframes using polars and pandas
read_time_polars = timeit.timeit("read_polars()", globals=globals(), number=reps) / reps
read_time_pandas = timeit.timeit("read_pandas()", globals=globals(), number=reps) / reps

# Measure execution time for filtering dataframes using polars and pandas
filter_time_polars = timeit.timeit("filter_polars(df_polars)", globals=globals(), number=reps) / reps
filter_time_pandas = timeit.timeit("filter_pandas(df_pandas)", globals=globals(), number=reps) / reps

# Print execution times for reading and filtering dataframes using polars and pandas
print(f"Read time (polars): {read_time_polars:.4f} seconds")
print(f"Read time (pandas): {read_time_pandas:.4f} seconds")
print(f"Filter time (polars): {filter_time_polars:.4f} seconds")
print(f"Filter time (pandas): {filter_time_pandas:.4f} seconds")

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

Как видите, polars намного быстрее, чем pandas, как при чтении, так и при фильтрации фреймов данных. Согласно некоторым тестам, это связано с тем, что polars использует мощные функции параллелизма Rust и формат стрелочной памяти для выполнения параллельных операций с большими наборами данных.

Надеюсь, вы найдете это полезным 👍

🤖 Подпишитесь на меня, чтобы быть в курсе предстоящих публикаций о науке о данных, машинном обучении и искусственном интеллекте.

#Python #Data #Pandas #Polars #MachineLearning #AI #ML #DeepLearning #DataScience #YYT

Ресурсы:

1. Начало работы с библиотекой Polars DataFrame. https://towardsdatascience.com/getting-started-with-the-polars-dataframe-library-6f9e1c014c5c

2. Polars vs Pandas — 4 ключевых концептуальных отличия. https://medium.com/@datasciencedisciple/polars-vs-pandas-4-key-concept-differences-3c09713c0fe8

3. Polars, замена Pandas? https://www.linkedin.com/pulse/polars-pandas-replacement-sam-anderson

4. Полярная документация. https://pola-rs.github.io/polars-book/

5. Polars — Молниеносная библиотека DataFrame для Rust и Python. https://www.pola.rs/

6. Является ли Pypolars новой альтернативой Pandas? — Аналитика Видья. https://www.analyticsvidhya.com/blog/2021/02/is-pypolars-the-new-alternative-to-pandas/

7. Знакомство с полярами — Medium. https://r-brink.medium.com/introduction-to-polars-ee9e638dc163

8. Работа с большими наборами данных стала быстрой и простой: библиотека Polars. https://hackernoon.com/crunching-large-datasets-made-fast-and-easy-the-polars-library

9. Быстрое применение функции к Polars Dataframe — Stack Overflow на русском. https://stackoverflow.com/questions/72563617/fast-apply-of-a-function-to-polars-dataframe

10. Pandas vs Polars — Сравнение скорости — Stuff by Yuki. https://stuffbyyuki.com/pandas-vs-polars-speed-comparison

11. Pandas vs Polar — Взгляд на производительность — Studio Terabyte. https://studioterabyte.nl/en/blog/polars-vs-pandas

12. Polars против Pandas: разница в размере и скорости https://stackoverflow.com/questions/75530375/polars-vs-pandas-size-and-speed-difference