Разбиение данных на категории с 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. Единственным ограничением является тот факт, что она применяется для подсчета только целых положительных чисел. Выведем результаты ее работы для подсчета количества квартир с разными значениями общего количества этажей в доме:
Визуализацию разбитых по группам значений можно осуществить с использованием функции построения гистограммы библиотеки Matplotlib – hist. Например, выражение:
density, bins, patches = plt.hist(df['cost']/1e6,bins=50)
выведет распределение цен на квартиры в млн рублей:
В качестве возвращаемых значений можно получить границы полуинтервалов разбиения и количество записей, попавших в каждый из них:
Не пропустите ничего интересного и подписывайтесь на страницы канала в других социальных сетях: