Альтернатива, которую я использую, позволяет использовать меньшие размеры файлов и лучшую производительность.

CSV хороши, но их переоценивают.

Я давно пользуюсь CSV. Как и все остальное сообщество специалистов по данным. Потом Рассолить на некоторое время.

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

Но мы слишком долго находились в этой зоне комфорта.

Большинству приложений для работы с данными выгодно отказаться от некоторой гибкости. Мы можем значительно ускорить чтение и запись данных, установив еще один пакет.

В этом посте мы обсудим…

· Проблемы с CSV для специалистов по данным;
· Мои мысли об использовании файлов Pickle вместо них;
· Лучшие альтернативы файлам CSV и Pickle;
· Сравнение различных форматов файлов с хранить наборы данных



Вы можете получить доступ к блокноту Colab, который я использовал в этом посте для бенчмаркинга.

Проблемы с CSV для специалистов по данным.

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

Программное обеспечение использует эту информацию для разделения набора данных на столбцы. Столбцы — это не чудо самих CSV-файлов.

Даже заголовки столбцов и строки не различаются внутри CSV-файла. Нам нужно настроить программное обеспечение, которое читает CSV, чтобы выбирать заголовки и номера строк.

Некоторое программное обеспечение достаточно умно, чтобы выбирать заголовки, если остальная часть столбца соответствует другому типу данных. Но это всего лишь обоснованные догадки, запрограммированные кем-то.

Простота работает хорошо во многих случаях. Особенно, если у вас нет информации о том, какое программное обеспечение использует клиент, CSV отлично подходят. Поделись и забудь!



Но CSV не оптимизированы для хранения или производительности.

Мы можем думать о производительности доступности и размере файла как о трех углах треугольника. Вы настраиваете один; два других приспосабливаются.

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

Еще одним недостатком CSV является наличие в тексте символов Юникода. Возможно, вам потребуется явно указать параметр кодирования как одно из многих поддерживаемых значений.

Вот пример того, как вы можете установить кодировку в Pandas.

df = read_csv('/path/to/file.csv', encoding = "ISO-8859-1")

Если ваш набор данных обширен и вы не знаете, какой кодировщик использовать, у вас проблемы.

Нам нужен формат файла, который хранит метаданные файла (например, заголовки и кодировку), занимает меньше времени для чтения и записи с диска и имеет меньший размер.



Как насчет использования Pickle вместо этого?

Pickle — это формат хранения объектов Python. Он не предназначен для хранения фреймов данных, но хорошо с ними работает.

Pickle также может хранить заголовок фрейма данных, номера строк и другую метаинформацию. Итак, если вы читаете кадры данных с помощью Pandas, движку не нужно тратить много времени на определение типов данных и заголовков.

Pickle-to-disk и disk-to-pickle почти такие же, как memory-to-disk и disk-to-memory.

Размер файла Pickle на диске может различаться. В большинстве случаев он немного больше, чем CSV, поскольку в них хранится больше информации о наборе данных. Но Pickle также хранит данные, преобразованные в поток байтов. Это может сделать размер меньше, чем текстовые CSV.

Кроме того, когда вы используете Python, вам не нужна дополнительная установка, чтобы воспользоваться преимуществами Pickle.

df.to_pickle("./path/to/file.pkl") # to write a dataframe as pickle
df = pd.read_pickle("./path/to/file.pkl") # to read a pickled dataframe

В нашем треугольном треугольнике файлы pickle немного уступают в доступности, чтобы получить преимущества в производительности и размере файла. Потому что вы можете читать файлы pickle только из программы Python. Они могут работать некорректно, если другие сотрудники вашей организации используют R, Excel или другое программное обеспечение.



Травление может решить ряд проблем с хранением файлов. Но есть вариант получше, если вы согласны с дальнейшим сужением характеристики доступности.

Идеальный вариант использования файлов Pickle для специалистов по данным.

Мы обсудим мощные альтернативы CSV и Pickle в следующих нескольких разделах.

Однако совсем отказываться от них не стоит. Еще нет!

Поскольку файлы Pickle представляют собой снимок объекта в памяти, очень удобно хранить обученные модели машинного обучения.

Например, мы храним модели машинного обучения и их веса в виде файлов рассола. Популярные библиотеки, такие как scikit-learn и Tensorflow, создают выбираемые модели.

Вот пример с Tensorflow.

import joblib
import tensorflow as tf

model = tf.keras.Sequential([
            tf.keras.layers.Input(shape=(5,)),
            tf.keras.layers.Dense(units=16, activation='elu'),
            tf.keras.layers.Dense(units=16, activation='elu'),
            tf.keras.layers.Dense(units=8, activation='elu'),
            tf.keras.layers.Dense(units=8, activation='elu'),
            tf.keras.layers.Dense(units=5, activation='softmax'),
        ])

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(df['predictorrs'], df['labels'], epochs=200, batch_size=8)
joblib.dump(model, 'classifier.pkl')

Лучшие альтернативы CSV и Pickle

Я давно пользуюсь CSV. Как и все остальное сообщество специалистов по данным. Затем мариновать некоторое время. Сегодня я предпочитаю другие форматы двоичных файлов для хранения данных.

Особенно две из них. Перо и Паркет.



Формат файла пера

Формат файла перьев — это быстрое хранилище фреймов данных, не зависящее от языка, для Python (pandas) и R.

Feather оптимизирован для небольшого объема памяти и высокой производительности. Это делает его немного менее доступным, чем CSV.

В то время как CSV могут работать на любой машине, которая может понимать текст, Feather работает только с Python и R. Кроме того, он не поставляется предварительно установленным. Нам нужно установить его вручную.

Вы можете получить его из репозитория PyPI, если используете Python.

pip install feather-format

Программисты R могут установить Feather непосредственно из репозитория Git, используя следующую команду.

devtools::install_github("wesm/feather/R")

После того, как вы установили пакет, изменения в существующей кодовой базе минимальны.

Использование форматов Feather довольно просто.

Библиотека Pandas имеет встроенные методы для формата пера. Вы можете использовать to_feather и read_feather для сохранения и загрузки данных на диск.

# Change this
df = pd.read_csv(...)
# To this
df = pd.read_feather(...)

# Change this
df.to_csv(...)
#To this
df.to_feather(...)

Формат файла паркета

Parquet — это еще один формат двоичных файлов, который дает преимущества по сравнению с текстовыми файлами.

Паркет использует алгоритм измельчения и сборки пластинок, описанный в Бумаге Дремеля. Он эффективно представляет вложенные структуры в столбчатом хранилище.

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

Размер файла Parquet обычно меньше текстового формата.

Использовать паркет в Pandas так же просто, как формат Feather.

# Change this
df = pd.read_csv(...)
# To this
df = pd.read_parquet(...)
# Change this
df.to_csv(...)
#To this
df.to_parquet(...)

Сравнение различных форматов файлов для хранения наборов данных

Я хотел увидеть это сам. Я хотел протестировать различные аспекты каждого формата файла.

Поэтому я написал небольшой сценарий. Он извлекает данные из общедоступного набора данных. Затем он создает 1000 разных файлов по 10 000 строк из оригинала. Для этого скрипт использует случайную выборку в кадре данных Pandas.



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

Мы измеряем указанные выше три значения для всех форматов файлов. Вот результаты.

Паркет — самый миниатюрный формат файлов.

Файлы Parquet значительно меньше, чем CSV. Они даже меньше, чем файлы перьев.

С другой стороны, JSON — худший формат для хранения файлов на диске. Форматы файлов занимают в два раза больше места, чем CSV.

Что касается размера файла, Feather немного меньше, а Pickle занимает немного больше места по сравнению с CSV.

Feather быстрее всего читается и пишется.

Скорость чтения Feather впечатляет. Загрузка CSV занимает примерно половину времени. Даже файлы Pickle значительно медленнее по сравнению с Feather.

Опять же, для загрузки JSON в память требуется слишком много времени, потому что он занимает много места на диске.

Feather намного лучше, чем CSV, и по скорости записи. Только Pickle имеет сравнительно похожие (все еще медленные) числа с Feather.



Заключительные соображения

Если вы делитесь данными с кем-то еще и не уверены, установлен ли у него Python или другое совместимое программное обеспечение, можно использовать CSV.

Но во всех остальных случаях CSV ужасно вредят вам.

Если вашей основной целью является хранение данных с очень небольшими затратами, используйте Parquet. Он занимает мало места на диске, а его производительность чтения/записи впечатляет.

Если вы используете Python или R и вашей главной заботой является производительность чтения/записи, Feather намного лучше, чем CSV и Pickle. Он также меньше по размеру.

Спасибо за прочтение, друг! Передайте мне привет в LinkedIn, Twitter и Medium.

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