Aspiring Data Science
368 subscribers
417 photos
11 videos
10 files
1.84K links
Заметки экономиста о программировании, прогнозировании и принятии решений, научном методе познания.
Контакт: @fingoldo

I call myself a data scientist because I know just enough math, economics & programming to be dangerous.
Download Telegram
#compression #pandas

Часто бывает, что приходится джойнить много файлов: всякие там csv, parquet, feather, pickle, с текстом и без, разные типы столбцов, и не всегда понятно, какой формат выбрать для промежуточного и финального хранения данных. Уже второй раз сталкиваюсь с КРАТНОЙ разницей по времени обработки (записи, чтения) и размеру итоговых файлов, а также по использованию CPU и RAM. А значит, пришло время написать утилитку быстрого тестирования. Идея в том, чтобы отдать ей небольшой кусок основного файла, посмотреть сравнительную таблицу каждой комбинации формата/сжатия, и принять решение, в каком же формате и с какими параметрами сжатия его хранить.

https://www.youtube.com/watch?v=u4rsA5ZiTls
#pandas #compression

Итак, результаты бенчмарка на фрейме пандас с широким текстовым столбцом. Код в комментах.

benchmark_dataframe_compression(df=df, head=1000, benchmark_dir_path=r"R:\Data", nrepeats=10, verbose=True)


Pandas: 2.0.3, DF size: 7.15Mb, Dtypes: {dtype('O'): 17, dtype('float64'): 2, dtype('float32'): 2, dtype('<M8[ns]'): 1}


Лучшие результаты показал пикл+xz сжатие. Наименьший итоговый размер файла, очень быстрое чтение, правда, за счёт долгой записи.

Паркетный brotli ошарашил своим экстремально долгим архивированием. Но только в реализации fastparquet! В версии pyarrow brotli оказался лучшим паркетным вариантом для моей конкретной задачи.
1