Поиск по сайту:

Как использовать Pandas Cut() и qcut()?


Pandas — это библиотека Python, которая используется для манипулирования данными и анализа структурированных данных. Методы pandas Cut() и qcut() используются для создания категориальных переменных из числовых данных. Методы Cut() и qcut() разбивают числовые данные на дискретные интервалы или квантили соответственно и присваивают метки каждому интервалу или квантилю. В этой статье мы разберемся с функциональностью методов Cut() и qcut() с помощью различных примеров.

Функция Cut()

Функция Cut() делит непрерывную переменную на дискретные ячейки или интервалы на основе заданных критериев. Он создает группы или категории данных на основе диапазона значений, присутствующих во входных данных.

Синтаксис


pandas.cut(x, bins, labels=None, right=True, include_lowest=False, ...)

Параметры, используемые в приведенном выше синтаксисе:

  • x: Входные данные, которые могут быть сериями Pandas или массивом NumPy.

  • bins: Это может быть целочисленное значение, определяющее количество создаваемых интервалов одинаковой ширины, или последовательность скалярных значений, определяющих края интервала. Если указано целое число, диапазон значений x будет разделен на такое количество ячеек одинаковой ширины.

  • этикетки (необязательно): объект меток в виде массива, который можно назначить каждому контейнеру. Если не указано иное, метки будут целыми числами, обозначающими индекс ячейки.

  • right (необязательно): логическое значение, указывающее, должны ли интервалы быть закрытыми справа (включая правый край интервала) или закрытыми слева (включая левый край интервала). По умолчанию установлено значение True.

  • include_lowest (необязательно): логическое значение, указывающее, включать ли наименьшее значение интервала. По умолчанию установлено значение False.

Пример 1: Ячейки одинаковой ширины

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


import pandas as pd

# Example 1: Equal-width bins
data = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
bins = 3
categories = pd.cut(data, bins)
print(categories)

Выход


[(9.91, 40.0], (9.91, 40.0], (9.91, 40.0], (9.91, 40.0], (40.0, 70.0], (40.0, 70.0], (40.0, 70.0], (70.0, 100.0], (70.0, 100.0], (70.0, 100.0]]
Categories (3, interval[float64, right]): [(9.91, 40.0] < (40.0, 70.0] < (70.0, 100.0]]

Пример 2: Пользовательский край контейнера и этикетки

В приведенном ниже примере мы определяем пользовательские границы интервала [0, 30, 60, 100] и соответствующие метки ['Низкий', 'Средний', 'Высокий']. Функция Cut() присваивает каждому значению данных соответствующую категорию на основе предоставленных ячеек и меток.


# Example 2: Custom bin edges and labels
import pandas as pd
data = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
bins = [0, 30, 60, 100]
labels = ['Low', 'Medium', 'High']
categories = pd.cut(data, bins, labels=labels)
print(categories)

Выход


['Low', 'Low', 'Low', 'Medium', 'Medium', 'Medium', 'High', 'High', 'High', 'High']
Categories (3, object): ['Low' < 'Medium' < 'High']

Функция qcut()

Функция qcut() разбивает данные на основе квантилей или процентилей, в отличие от функции Cut(), которая разбивает данные на интервалы одинаковой ширины. В каждом интервале содержится одинаковое количество точек данных, что делает его полезным для создания равномерно распределенных групп.

Синтаксис


pandas.qcut(x, q, labels=None, retbins=False, precision=3, duplicates='raise')

Параметры, используемые в синтаксисе:

  • x: Входные данные, которые могут быть сериями Pandas или массивом NumPy.

  • q: Целочисленное значение, определяющее количество создаваемых квантилей, или последовательность квантилей (значения от 0 до 1), которые определяют точки отсечения.

  • этикетки (необязательно): объект меток в виде массива, который можно назначить каждому контейнеру. Если не указано иное, метки будут целыми числами, обозначающими индекс ячейки.

  • Retbins (необязательно): логическое значение, указывающее, следует ли возвращать края интервала вместе с категориями. По умолчанию установлено значение False.

  • точность (необязательно): целочисленное значение, определяющее точность значений квантилей. По умолчанию установлено значение 3.

  • дубликаты (необязательно): как обрабатывать повторяющиеся значения. По умолчанию установлено значение «поднять», что вызывает ошибку.

Пример 1: Равное количество квантилей

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


import pandas as pd

# Example 1: Equal number of quantiles
data = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
quantiles = 3
categories = pd.qcut(data, quantiles)
print(categories)

Выход


[(9.999, 40.0], (9.999, 40.0], (9.999, 40.0], (9.999, 40.0], (40.0, 70.0], (40.0, 70.0], (40.0, 70.0], (70.0, 100.0], (70.0, 100.0], (70.0, 100.0]]
Categories (3, interval[float64, right]): [(9.999, 40.0] < (40.0, 70.0] < (70.0, 100.0]]

Пример 2: Пользовательские квантили и метки

В приведенном ниже примере мы определяем пользовательские квантили [0, 0,3, 0,6, 1] и соответствующие метки ['Низкий', 'Средний', 'Высокий']. Функция qcut() присваивает каждому значению соответствующую категорию на основе предоставленных квантилей и меток.


import pandas as pd

# Example 2: Custom quantiles and labels
data = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
quantiles = [0, 0.3, 0.6, 1]
labels = ['Low', 'Medium', 'High']
categories = pd.qcut(data, quantiles, labels=labels)
print(categories)

Выход


['Low', 'Low', 'Low', 'Medium', 'Medium', 'Medium', 'High', 'High', 'High', 'High']
Categories (3, object): ['Low' < 'Medium' < 'High']

Заключение

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

Статьи по данной тематике: