Найти тему
Властелин машин

Разбиение данных на категории с Python

Для визуализации непрерывных данных, их систематизации по группам и вычисления групповых значений полезны методы разбиения на категории имеющиеся в библиотеках Pandas, NumPy и Matplotlib.

Так, допустим мы работаем с таблицей df следующего вида:

-2

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

df['sq_grs'] = pandas.cut(df['total_square'],[10,20, 30, 40, 50, 60, 70, 80, 90, 100, 1000])

В результате будет добавлен столбец (sq_grs) категорий общей площади (total_square) и наша таблица примет вид:

-3

Следует отметить, что в pandas.cut в качестве второго аргумента можно также задать число. Тогда она поделит все значения на равные интервалы заданного количества:

df['sq_grs'] = pandas.cut(df['total_square'],5)

-4

Обратившись к столбцу df['sq_grs'], можно получить сведения обо всех выбранных полуинтервалах (на рисунке в самом низу):

-5

Также в библиотеке Pandas имеется схожая функция qcut, которая позволяет распределить значения по полуинтервалам, так чтобы количество значений, попавших в каждый, было одинаковым:

df['sq_grs'] = pd.qcut(df['total_square'],5)

-6
-7

Обратившись к методу value_counts (см. статью ), можно вывести категории и их количество (в каждой категории не удалось получить равное количество элементов, что является следствием наличия повторяющихся значений, которые вынуждают переполнять некоторые полуинтервалы при разбиениях):

-8

Другая библиотека NumPy (обычно используется с псевдонимом np) также содержит полезный набор инструментов для разбиения на группы. Например, numpy.histogram возвращает кортеж из двух списков с количеством вхождений в полуинтервалы и границами разбиений:

-9
-10

Для подсчета в какой группе, сколько элементов удобно использовать numpy.bincount. Единственным ограничением является тот факт, что она применяется для подсчета только целых положительных чисел. Выведем результаты ее работы для подсчета количества квартир с разными значениями общего количества этажей в доме:

-11

Визуализацию разбитых по группам значений можно осуществить с использованием функции построения гистограммы библиотеки Matplotlib – hist. Например, выражение:

density, bins, patches = plt.hist(df['cost']/1e6,bins=50)

выведет распределение цен на квартиры в млн рублей:

-12

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

-13