Как сравнивать данные с помощью усов, ящиков и скрипок?

Например, у нас есть несколько рядов данных из какой-то области деятельности человека (промышленности, медицины, государственного управления,…) , и мы хотим сравнить, насколько они похожи или, наоборот, чем одни показатели выделяются по сравнению с другими.

Для простоты восприятия возьмем данные более простые, универсальные и нейтральные — высоту в холке и вес нескольких пород собак по сведениям Американского клуба собаководства (American Kennel Club). Данные по размерам пород в среднем можно найти здесь. Прибавим к ним функцию random.uniform из Python-библиотеки numpy, переведем дюймы в сантиметры, а фунты в килограммы, и вот мы получаем реалистично выглядящий набор данных по размерам собак нескольких пород, с которым можно работать. В нашем примере это чихуахуа, бигли, ротвейлеры и английские сеттеры.

Рисунок 1. Образец анализируемых данных

Одну из аналитик, которую можно применить для сравнения этих 4 числовых рядов – посмотреть на их медиану. Она разбивает ряд данных на две части: половина значений меньше медианы и остальная половина – больше. Медианные значения находим, группируя с помощью библиотеки pandas по столбцу «Порода» и применяя к сгруппированным данным функцию median. Аналогично можно было бы посмотреть и другие статистические показатели: среднее значение (mean) и моду (mode).

Видим, что половина встреченных нами чихуахуа имеет высоту в холке не больше 18 см, бигль значительно выше – в районе 41 см, и следующие по размерам – ротвейлер и английский сеттер, которые отличаются по росту незначительно: 58 и 63 см.

Рисунок 2. Медианные значения высоты в холке четырех пород собак

Но только одной медианы недостаточно для сравнительного анализа данных. Можно получить больше информации, если рассмотреть такой инструмент как диаграмма размаха (также известная как «ящик с усами», box-and-whiskers plot), построенную с помощью Python-библиотеки для построения графиков seaborn. Линия внутри ящика – это уже знакомая нам медиана. Ее уровень на графике справа (см. Рисунок 3) совпадает с высотой соответствующего столбца слева.

Но при этом диаграмма размаха содержит дополнительную информацию о том, как данные распределены внутри ряда: нижняя граница прямоугольника (ящика) – это первый квартиль (величина, превосходящая 25% значений ряда), а верхняя граница – третий квартиль (величина, превосходящая 75% значений).

А те самые «усы» — отрезки, отходящие вверх и вниз от середины прямоугольника – строятся на основе интерквартильного размаха и обозначают верхнюю и нижнюю границу значимой части наших данных, исключая выбросы. Здесь выбросы отсутствуют (дистрофиков и собак-гигантов нам в рассмотрение не попадалось), при наличии они отобразились бы метками за пределами «усов».

Рисунок 3. Сравнение столбчатой и диаграммы размаха, построенных для одного и того же набора данных

Скрипичный график (violinplot) из той же библиотеки seaborn дает нам еще больше информации о структуре рассматриваемых данных. Ниже на Рисунке 4 представлены все три графика, где породы идут каждый раз в одинаковом порядке, а цвет для соответствующего ряда сохраняется.

Рисунок 4. Сравнение столбчатой диаграммы, диаграммы размаха и скрипичного графика, построенных для одного и того же набора данных

Например, зеленым показаны данные о ротвейлерах.

Сходства и различия диаграммы размаха (ящика с усами) и скрипичного графика показаны на следующем Рисунке 5. Сначала сходства: (1) оба графика в том или ином виде отражают 0.25-квантиль, 0.5-квантиль (медиану) и 0.75-квантиль; (2) и там, и там отражаются крайние значения, которые близки к величине полутора межквартильных интервалов (IQR), отложенных от нижнего и верхнего края коробки – те самые «усы» для диаграммы размаха, за пределами которых находятся «выбросы».

Отличие же состоит в том, что скрипичный график содержит также информацию о том, как данные распределены внутри, т.к. границы построенной «скрипки» — это повернутая на 90 градусов плотность распределения. И в этом случае при анализе графика у нас гораздо больше информации: в дополнение к квантилям и значениям, описывающим 4 интерквартильных расстояния (1.5 + 1 + 1.5) на скрипичном графике можно увидеть, распределены ли данные равномерно или есть несколько центров, где значения встречаются более часто.

Рисунок5. Пояснения по соответствию элементов двух графиков: размаха и скрипичного

Более ярко эту мысль можно увидеть на следующем графике (Рисунок 6), где данные по двум группам ротвейлеров отличаются, но подобраны таким образом, что медианы совпадают (крайний слева график) и даже больше – диаграммы размаха (в центре) тоже совпадают! И только скрипичный график (крайний справа) показывает нам, что на самом деле структура данных значительно отличается.

Рисунок 6. Пример, когда только скрипичные график позволяет нам увидеть отличия во внутренней структуре рассматриваемых данных

Используя кластеризацию К-средних (cluster.KMeans) из модуля sklearn, мы можем визуально представить сгруппированные данные, построив диаграмму разброса с помощью функции scatterplot модуля seaborn. Здесь цвет отделяет один кластер, созданный ML-алгоритмом, от другого, а форма маркера показывает исходную принадлежность к той или иной группе. Понижать размерность с помощью PCA или какого-либо другого метода здесь было не нужно, т.к. данные изначально 2D.

Код для кластеризации и построения диаграммы разброса:

Таким образом, на примере данных о высоте в холке нескольких пород собак мы познакомились с некоторыми статистическими характеристиками числовых рядов и инструментах их визуализации. Простой инструмент дает понятную метрику, но не дает полной картины. Более сложные инструменты дают более глубокую картину данных, но и воспринимаются также сложнее в силу увеличения количества информации на графике. И здесь важно выбирать инструмент под конкретную задачу, чтобы находить баланс между требующейся полнотой информации и простотой ее восприятия на графике.

{ "author_name": "NTA", "author_type": "editor", "tags": [], "comments": 0, "likes": 1, "favorites": 2, "is_advertisement": false, "subsite_label": "dev", "id": 181308, "is_wide": true, "is_ugc": false, "date": "Fri, 27 Nov 2020 14:02:03 +0300", "is_special": false }
0
0 комментариев
Популярные
По порядку

Комментарии

null