Группировка данных в Pandas с использованием cut и qcut
В этом руководстве вы научитесь бинировать данные в Python с помощью функций Pandas cut
и qcut
. Вы узнаете, почему бинирование — полезный навык в Pandas и как можно использовать его для лучшей группировки и отсеивания информации. К концу этого руководства вы научитесь:
Как использовать функции
cut
иqcut
в PandasКогда использовать каждую из функций
Как изменять поведение этих функций для настройки создаваемых бинов
Содержание
Что такое бинирование в Pandas и Python?
В большинстве случаев, когда работаете с непрерывными числовыми данными (например, возрастом, продажами или доходами), может быть полезно создавать бины данных. Бинаризация данных преобразует данные в дискретные корзины, позволяя получать инсайты о данных логическими способами. Бинаризация данных также часто называется под другими именами, такими как дискретное бинирование, квантизация и дискретизация.
В этом руководстве вы узнаете о двух разных методах Pandas, .cut()
и .qcut()
, для бинирования ваших данных. Эти методы позволят вам бинировать данные в бины пользовательского размера и бины равного размера соответственно. Бинары равного размера позволяют легко получать инсайты о распределении, а группировка данных в пользовательские бины может позволить получать инсайты о логических категориях.
Загрузка примерного DataFrame Pandas
Чтобы следовать за этим руководством, давайте используем очень простой DataFrame Pandas. Данные намеренно сохранены простыми для лучшего понимания того, как данные делятся. Набор данных имеет только две колонки: колонку имени и колонку возраста. Давайте загрузим данные с помощью метода .from_dict()
:
В следующем разделе вы узнаете, как использовать метод Pandas .qcut()
для бинирования данных в бины равного размера.
Pandas qcut: Бинаризация данных в бины равного размера
Метод Pandas .qcut()
делит ваши данные на равные корзины на основе ранга или некоторых выборок квантилей. Этот процесс известен как квантильная дискретизация. Давайте рассмотрим параметры, доступные в функции:
Функция имеет два обязательных параметра: колонка для бинирования (x=)
и количество квантилей для генерации (q=)
. Функция возвращает Series данных, которые могут быть, например, присвоены новой колонке. Давайте посмотрим, как можно разделить колонку Age
на четыре разных квантиля:
На первый взгляд, новая колонка Age Groups может показаться немного странной. Давайте проведем немного времени, чтобы исследовать её. Сначала мы посмотрим на тип данных колонки, используя атрибут .dtype
.
Тип данных, который возвращается, category — это очень экономичный способ для Pandas хранения категориальных данных. Давайте посмотрим, что означают реальные метки в колонке:
Изображение выше показывает, что квадратная скобка, [
или ]
, указывает на то, что точка данных включена в диапазон. Обычная скобка, такая как (
или )
, указывает на то, что край не включен в группу.
Разделение данных на равные перцентили с использованием Pandas qcut
Вместо того чтобы просто указывать количество группировок, которые вы хотите создать, вы также можете передать список квартилей, которые вы хотите создать. Этот список должен представлять собой диапазон от 0 до 1, разбивая данные на равные проценты. Давайте посмотрим, как мы можем разбить наши данные на интервалы в 25%.
Здесь видно, что это вернуло тот же результат, что и раньше. Наши данные разделены на четыре равных сегмента на основе диапазонов данных.
Добавление ярлыков к бинам в Pandas с помощью qcut
Сейчас наши категории данных описательны, но их немного сложно читать. Вы можете передать список меток, которые хотите использовать для переименования вашего набора данных. Длина списка должна соответствовать количеству создаваемых категорий. Давайте посмотрим, как мы можем преобразовать наши сгруппированные данные в описательные метки:
Это делает наш процесс биннинга в Pandas намного легче для понимания!
Изменение точности бина в Pandas с помощью qcut
Давайте вернемся к нашему предыдущему примеру, где мы просто передали q=4
для разделения данных на четыре квантиля. Аккуратно округленные интервалы выглядели так: (6.999, 17.0]
. По умолчанию, Pandas использует аргумент precision=3
, что приводит к отображению и хранению интервалов с точностью до трех знаков.
Хотя это более точно и аккуратно, часто выглядит не очень красиво. Давайте попробуем изменить точность на 1
и посмотрим, как теперь выглядят наши категории:
В следующем разделе вы узнаете, как использовать метод cut
из библиотеки Pandas для определения пользовательских интервалов данных
Pandas cut: группировка данных по пользовательским ячейкам
Функция cut в Pandas тесно связана с функцией .qcut()
. Однако, она используется для разбиения значений на дискретные интервалы, которые вы определяете самостоятельно. Это может быть очень полезно, например, при определении значимых возрастных или доходных групп. Во многих случаях такие группировки имеют какое-то другое значение, например, юридическое или культурное.
Функция Pandas .cut()
может технически давать такие же результаты, как и функция .qcut()
, но также предоставляет значительно больший контроль над результатами. Давайте рассмотрим параметры этой функции:
Функции .qcut()
и .cut()
имеют значительное количество схожих параметров. Однако функция cut
предоставляет значительно больше возможностей. Например, как вы скоро узнаете, можно определить, как Pandas обрабатывает границы своих бинов.
Давайте посмотрим, как мы можем разделить столбец Возраст
на три разные группы: младше восемнадцати, между 19 и 65, и 65 и старше.
Вы можете видеть, что вы создали три отдельные возрастные группы. Как указано в скобках, значения варьируются от >0 до 17, >=18 до 64, >=65 до 100. В следующем разделе вы узнаете, как применить метки к этим группам.
Добавление меток к ячейкам в Pandas с помощью Cut
В этом разделе вы узнаете, как использовать параметр labels=
, чтобы передавать список меток. Подобно функции qcut
, метки должны быть такой же длины, как количество группировок.
Давайте добавим текстовые метки, чтобы упростить чтение группировок:
Можно видеть, что эти результаты гораздо легче читать и интерпретировать!
Изменение поведения кромки в Pandas cut
По умолчанию, Pandas будет включать правую границу группы. Ранее, когда вы определяли границы [0, 17, 64, 100]
, это определяло следующие интервалы:
>0 to 17
>17 to 64
>64 to 100
В нашем примере это нормально, так как мы работаем с целыми значениями. Однако представьте, что наши возрасты определены как дробные значения, и у нас есть возраст 17.5. В нашем примере, так как возраст идет до (и включает) 17, значение 17.5 будет ошибочно включено в возрастную группу 18-64.
Мы можем использовать параметр right=
, чтобы изменить это поведение. Аргумент по умолчанию равен True
и указывает, что крайнее правое значение должно быть включено. Если мы изменим это значение на False
, то диапазон будет включать все значения вплоть до (но не включая) этого значения.
Давайте создадим те же корзины, но с правым пределом исключа
Изменение поведения первого интервала с помощью Pandas cut
По умолчанию Pandas не включает крайнее левое значение в интервал. В вышеупомянутом примере, если бы мы указали возраст 0, это значение не было бы учтено в интервале. Чтобы это значение вошло в интервал, можно использовать аргумент include_lowest=
для изменения поведения.
По умолчанию аргумент будет использовать значение False
. Изменение этого значения на True
позволит включить самое левое значение. Давайте посмотрим, как это сделать:
Создание упорядоченных категорий с помощью Pandas cut
Начиная с версии Pandas 1.1.0, функция cut
будет возвращать упорядоченные категориальные бины. Это присваивает порядок значениям этой категории. Давайте посмотрим, как это поведение выглядит при использовании стандартных настроек.
Это позволяет сортировать категориальные значения, которые часто представлены строками. Это большое преимущество по сравнению с использованием строковых значений, поскольку вы можете сортировать значения осмысленным образом.
Изменение поведения на ordered=False
убирает эту иерархию, если она вам не нужна.
Упражнения
Пора проверить свои знания! Попробуйте решить задания ниже. Если вам нужна помощь или вы хотите проверить своё решение, просто переключите вопрос.
Заключение и резюме
В этом уроке вы узнали, как разбивать ваши данные на категории в Python и Pandas, используя функции cut и qcut. Ниже приведен краткий обзор того, что вы изучили:
Функция
qcut
в Pandas разбивает данные на равные группы элементов.Функция
cut
в Pandas позволяет задавать собственные диапазоны данных.Разбиение данных на бины позволяет лучше понять распределение данных, а также создавать логические категории на основе других абстракций.
Обе функции обеспечивают гибкость в определении и отображении ваших контейнеров.
Дополнительные ресурсы
Чтобы узнать больше связанных тем, ознакомьтесь с руководствами ниже:
Python Defaultdict: Обзор и примеры
Pandas GroupBy: группировка, суммирование и агрегация данных в Python
Pandas Describe: Описательная статистика для вашего DataFrame
Last updated