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

В этой главе рассмотрим другие форматы, которые могут вам пригодиться в будущем — но сперва поговорим о том, какие бывают кодировки.

Кодировка

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

Но если вы работаете с данными, то вам нужно понимать, что такое кодировка.

🔍 Кодировка — стандарт кодирования символов в памяти компьютера.

У вас может возникнуть вопрос: каких символов? Любых, которые вы видите на экране компьютера. Это буквы, цифры и даже эмодзи. Есть много разных способов записывать их в виде машиночитаемых символов. Обычно говорят, что используется определенная кодировка. Например, UTF-8 или Windows-1251.

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

Операционная система

Кодировка

Windows

Windows-1251

Linux

UTF-8

macOS

UTF-8

При работе с данными мы предлагаем вам очень простой совет: использовать при сохранении файлов с данными кодировку UTF-8. Это удобно, потому что pandas использует её по умолчанию, когда открывает файлы или сохраняет их.

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

Табличные форматы

Как вы помните из параграфа 2.1, в табличных данных ряд соответствует наблюдению, колонка — переменной, а ячейка — конкретному значению переменой для наблюдения.

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

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

Статистический пакет

Собственный формат

SPSS

.sav

Stata

.dta

MATHLAB

Если csv — слишком большой, то можно использовать форматы .pickle или .parquet. Поддержка этих форматов так же есть в pandas. Такая замена позволяет экономить оперативную память и время на открытие файла.

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

Табличные форматы могут быть прочитаны как датафрейм. Практически для всех из них в Pandas есть реализация функционала, который позволяет загружать их в память. Помимо считывания, в Python присутствует возможность сохранять данные. И делать это можно также в разных форматах. Формат открытия и формат сохранения может отличаться. Это полезно, когда нужно:

  • передавать данные другим пользователям, чтобы они могли работать в привычном для них формате;
  • сохранять обработанные или преобразованные данные для работы с ними в других программах;
  • создавать отчёты, используя обработанные данные;
  • записывать информацию для выкладывания её в открытый доступ.

Текстовые форматы

Текстовые данные устроены иначе. Они основываются на структуре, в которой элементы вложены друг в друга. Обычно информация, которую мы получаем при помощи парсинга или API хранится в таких форматах. Самый распространённый из них — JSON. Вот как выглядит информация в JSON:

{
   "name": "Николай",
   "surname": "Иванов",
   "address": {
       "street": "улица Пушковых",
       "city": "Троицк",
       "postal": 108840
   },
   "phone": [
       "995 123-1234",
       "995 123-4567"
   ]
}

Это структура, которая состоит из ключей и значений. В каждом ключе находится значение. Кроме того, значение может содержать другие пары ключ-значение (пример — значение ключа address). Получается такая матрёшка или картотека, где каждый ключ — это один шкафчик. Внутри шкафа есть несколько выдвижных полок, в которых хранятся папочки или листочки, в папочках тоже лежат листочки.

Важно, что мы можем пропускать какие-то элементы и не заполнять их.

JSON легко преобразуется в табличную структуру:

name

surname

street

city

postal

phone

Николай

Иванов

улица Пушковых

Троицк

108840

995 123-1234

У вас может возникнуть вопрос: «Зачем мы используем текстовые форматы, если они преобразуются в табличные?». Ответ в том, что текстовых форматах внутри ключа может быть любое значение: строка, число, список, другая пара ключ-значение или ничего. Поэтому мы можем сохранить несколько телефонов, в то время как табличная запись требует от нас либо брать один, либо создавать несколько колонок.

Табличные данные требуют от нас большей строгости: либо строка, либо число.

Ещё одно достоинство текстовых значений, в том, что в разных наблюдениях может быть разное число элементов. Продолжим первый пример вот такой записью:

{
   "name": "Михаил",
   "surname": "Петров"
}

В табличном формате это бы выглядело вот так:

name

surname

street

city

postal

phone

Николай

Иванов

улица Пушковых

Троицк

108840

995 123-1234

Михаил

Петров

None

None

None

None

Очень много пропусков! Текстовые форматы оказываются гибче, чем табличные, когда структура данных динамически меняется с течением времени. Помимо JSON существуют и другие похожие форматы: XML и YAML.

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

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

Отмечайте параграфы как прочитанные чтобы видеть свой прогресс обучения

Вступайте в сообщество хендбука

Здесь можно найти единомышленников, экспертов и просто интересных собеседников. А ещё — получить помощь или поделиться знаниями.
Вступить
Сообщить об ошибке
Предыдущий параграф7.3. Парсинг данных и автоматизация браузера, регулярные выражения
Следующий параграф8.2. Обработка пропущенных значений