Язык программирования Python

Эффективное хранение данных с помощью Feather в Python

CSV является одним из самых популярных форматов файлов для обмена данными. Это связано с тем, что он базируется на обычном тексте, поэтому может быть интерпретирован практически на любой системе любой программой.

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

Формат, разработанный на основе принципа максимально эффективного хранения данных в наборах данных (Data Frames). Этот формат также можно использовать в R или Julia. Что позволяет эффективно хранить данные.

Feather в Pandas

Pandas содержит функцию read_feather(), а объекты DataFrame имеют свойство to_feather(), благодаря которому можно работать с Feather.

Работа обоих имитирует использование файлов CSV или Excel. Таким образом, чтобы сохранить набор данных в этом формате, достаточно выполнить следующее:

df.to_feather('data.feather')
Code language: JavaScript (javascript)

Предполагается, что df – это объект DataFrame. С другой стороны, импортировать данные из файла можно с помощью простой функции:

feather = pd.read_feather('data.feather')
Code language: JavaScript (javascript)

Методы Pandas read_feather() и to_feather используют пакет pyarrow.

Пакет, который может работать с оригинальным форматом Feather или со второй версией, которая также известна как Apache Arrow.

По умолчанию будет использоваться вторая версия формата, так как она рекомендуется как наиболее эффективная.

Если вы хотите работать с файлами первой версии, что рекомендуется только из соображений совместимости, вы можете указать это, установив свойство version равным 1.

Преимущества формата Feather перед CSV

Использование файлов Feather по сравнению с CSV имеет два важных преимущества: меньший размер файлов и более быстрые процессы чтения и записи. Оба варианта важны при работе с большими массивами данных.

Пространство, занимаемое файлом Feather, аналогично тому, которое вы получили бы после сжатия эквивалентного файла CSV.

Сравнение Feather с CSV и сжатым форматом CSV

Для сравнения форматов можно создать случайный набор данных и сохранить данные. Измерить время, которое требуется Python в каждом конкретном случае. Например, вы можете создать набор данных с 50 миллионами записей и сохранить их в формате Feather, CSV и сжатом CSV.

Это можно сделать с помощью следующего кода.

import pandas as pd import numpy as np import time cols = 5 rows = 1000000 np.random.seed(0) df = pd.DataFrame(np.random.rand(rows, cols), columns=["A", "B", "C", "D", "E"]) # feather tic = time.process_time() df.to_feather('data.feather') feather_write = time.process_time() - tic tic = time.process_time() feather = pd.read_feather('data.feather') feather_read = time.process_time() - tic # CSV tic = time.process_time() df.to_csv('data.csv') csv_write = time.process_time() - tic tic = time.process_time() csv = pd.read_csv('data.csv') csv_read = time.process_time() - tic # bz2 tic = time.process_time() df.to_csv('data.csv.bz2', compression='bz2') bz2_write = time.process_time() - tic tic = time.process_time() csv = pd.read_csv('data.csv.bz2', compression='bz2') bz2_read = time.process_time() - tic # Сравнение времени times = pd.DataFrame({'write': [feather_write, csv_write, bz2_write], 'read': [feather_read, csv_read, bz2_read]}, index=['Feather', 'CSV', 'bz2'])
Code language: Python (python)

В результате получаем следующее:

ФОРМАТЗАПИСЬ (СЕК.)ЧТЕНИЕ (СЕК.)РАЗМЕР (МБ)
Feather0,1470,09440
CSV10,1740,873103,2
bz219,8888,41441,4
Сравнение времени, необходимого для записи и чтения набора данных в различных форматах, и полученного размера файла

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

По размеру файла также видно, что Feather намного эффективнее, даже чем сжатый CSV-файл. В этом случае он составляет лишь треть от размера, необходимого для записи данных в формате CSV. Хотя следует учитывать, что, поскольку данные рандомизированы, экономия, возможно, меньше, чем та, которая обычно получается при использовании реальных данных. То есть, это значение можно рассматривать как нижний предел.

Заключение

Сегодня мы рассмотрели формат для эффективного хранения данных в Python. Формат, который на два порядка эффективнее CSV при записи данных на диск и создает файлы, занимающие менее трети дискового пространства. Это важно при работе с большими массивами данных.

Одним из возможных недостатков Feather по сравнению с CSV является то, что вы не можете редактировать файл с помощью текстового редактора. Хотя это редко делается с большими файлами.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *