В прошлых главах мы использовали датасеты, сохранённые в формате csv
. Однако это не единственный формат хранения данных.
В этой главе рассмотрим другие форматы, которые могут вам пригодиться в будущем — но сперва поговорим о том, какие бывают кодировки.
Кодировка
Вы наверняка сталкивались с файлами или письмами, в которых вместо букв отображались квадратики или какие-то непонятные символы, не похожие ни на один известный вам язык. Если вам просто приходит письмо на почту, то можно использовать какой-нибудь из онлайн-декодеров, чтобы понять, какая кодировка используется в тексте. Вот хороший пример.
Но если вы работаете с данными, то вам нужно понимать, что такое кодировка.
🔍 Кодировка — стандарт кодирования символов в памяти компьютера.
У вас может возникнуть вопрос: каких символов? Любых, которые вы видите на экране компьютера. Это буквы, цифры и даже эмодзи. Есть много разных способов записывать их в виде машиночитаемых символов. Обычно говорят, что используется определенная кодировка. Например, UTF-8
или Windows-1251
.
Из названия двух кодировок, которые мы упомянули выше можно догадаться, что операционная система на вашем компьютере работает с использованием определенной кодировки. Вот очень простая табличка соответствия.
Операционная система |
Кодировка |
Windows |
Windows-1251 |
Linux |
UTF-8 |
macOS |
UTF-8 |
При работе с данными мы предлагаем вам очень простой совет: использовать при сохранении файлов с данными кодировку UTF-8
. Это удобно, потому что pandas
использует её по умолчанию, когда открывает файлы или сохраняет их.
Формат данных можно спутать с кодировкой, но это разные вещи. Разницу между ними можно объяснить простым примером. Кодировка — это способ записи буквы, а формат — тетрадка или блокнот, в который вы их записываете. Ну а ручка — это программа, с помощью которой вы создаете записи, если довести аналогию до конца.
Табличные форматы
Как вы помните из параграфа 2.1, в табличных данных ряд соответствует наблюдению, колонка — переменной, а ячейка — конкретному значению переменой для наблюдения.
Обычно данные хранят в формате csv
. Однако это не единственно возможный формат. Существует много форматов данных, и мы не будем подробно останавливаться на различиях между ними. Для нас важно, что эти форматы могут быть привязаны к определенным статистическим пакетам, которые используют исследователи, а могут быть более или менее универсальными.
Статистических пакетов три, у них два собственных формата. Все эти форматы могут быть прочитаны в pandas
. Мы не рекомендуем пользоваться ими без необходимости, однако если вы с ними столкнулись, то ничего страшного.
Статистический пакет |
Собственный формат |
SPSS |
|
Stata |
|
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.
Мы рассказали вам о текстовых данных, потому что изначально они кажутся данными, которые сложно использовать для анализа, хотя это не так. Они относительно легко могут быть преобразованы в таблицу при условии, что вы точно знаете, какие поля необходимы.
В следующем параграфе поговорим о том, что делать с пропущенными значениями в данных — и какие способы обработки пропусков существуют.