January 28, 2021

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

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

Так, допустим мы работаем с таблицей df (объявления о продажах квартир) следующего вида:

С помощью функции 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) и наша таблица примет вид:

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

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

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

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

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

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

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

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

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

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

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

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

Не пропустите ничего интересного и подписывайтесь на страницы канала в других социальных сетях:

Instagram

Яндекс Дзен

Telegram