Python

Pickle – или как быстро замариновать данные

Время прочтения: 4 мин.

Ежедневно аналитики, эксперты и множество организаций используют Excel файлы. История excel началась еще 14 января 1985 года – это самая популярная программа в мире Microsoft Excel.

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

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

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

Поэтому, каждый из вас должен быть посвящен в дальнейшее использование такого формата данных как Pickle. Это самый быстрый и удобный способ хранения набора данных по моему мнению. Так как даже csv файл не сравнится со скоростью чтения, обработки и просмотра файлов PKL. Вам даже не нужно знать сложных конструкций в программировании на Python, чтобы овладеть просмотром и обработкой такого формата данных.

Кратко о Pickle

Итак, давайте же посмотрим, что же из себя представляют такие файлы. Главным преимуществом такого формата является то, что он может хранить не только табличные данные, но и любые другие данные, в том числе любые объекты Python.

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

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

Чтобы начать работу необходимо импортировать некоторый набор модулей, а именно:

Import numpy as np
Import pandas as pd
Import pickle
Import bz2

Нам понадобятся такие модули как numpy, pandas, pickle и bz2, который будет использоваться для сжатия данных.

Создадим датафрейм с рандомными значениями из 5 столбцов и 20 млн. строк.

np.random.seed = 57
df_s = 20_000_000
df = pd.Dataframe({
	‘столбец 1’: np.rand(df_s),
‘столбец 2’: np.rand(df_s),
‘столбец 3’: np.rand(df_s),
‘столбец 4’: np.rand(df_s),
‘столбец 5’: np.rand(df_s)
})
df.head(10)

Давайте посмотрим на результат создания и выведем первые 10 строк датафрейма:

Pickle – в переводе с английского означает соленый огурец. Почему же название библиотеки именно такое, спросите вы? – ответ довольно прост: все дело в том, что мы пытаемся закатать данные (соленые огурцы) в формат pkl (банку).

И, как ни странно, сохранение данных – мы называем маринованием набора данных. Поэтому, давайте замаринуем наш набор через стандартное сохранение файлов with open.

with open(‘ 20M.pkl’, ‘wb’) as f:
	pickle.dump(df, f)

За считанные секунды мы получили файл на наш компьютер, в сравнении с сохранением файлов формата excel – такой набор данных мы бы смогли сохранить в течение минимум 15 минут.

Открыть файл, который мы сохранили локально можно аналогичным образом, через with open.

with open(‘20M.pkl’, ‘rb’) as f:
	df = pickle.load(f)

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

Для того, чтобы получить файл меньшей размерностью, используем библиотеку bz2:

with open(‘20M_сжатый файл.pkl’, ‘wb’) as f:
	compressed_file = bz2.BZ2File(f, ‘w’)
	pickle.dump(df, compressed_file)

Таким образом, разница в размерности файлов равна 35 Мб.

Для чтения сжатого файла нужно дописать еще одну строку:

with open(‘20M_сжатый файл.pkl’, ‘rb’) as f:
	compressed_file = bz2.BZ2File(f, ‘r’)
	df = pickle.load(compressed_file)

Можем сделать вывод о полезности сохранения данных в формате pkl – это быстро, удобно и занимает меньше места.

Ежедневно мы выгружаем огромные наборы данных с миллионами записей и эта библиотека – палочка-выручалочка для таких big data. Но, есть одно «но» – для людей далеких от изучения питона, обработка данных будет иметь место только после изучения базовых знаний pandas, но и это будет огромным плюсом для вашего развития и повышения знаний аналитика.

Используйте новые технологии с умом и рационально распределяйте пространство вашего диска, так вы, как минимум уменьшите нагрузку на задействование памяти, и как максимум в короткие сроки сможете решить задачу, нежели экспертно оценивать данные в «эксельках».

Удачи в кодировании 😊

Советуем почитать