![](https://habrastorage.org/webt/hz/o6/j4/hzo6j4ykijetmxxc07ami3kyl04.jpeg)
Очень часто данные необходимо сравнивать. Например, у нас есть несколько рядов данных из какой-то области деятельности человека (промышленности, медицины, государственного управления, …), и мы хотим сравнить, насколько они похожи или, наоборот, чем одни показатели выделяются по сравнению с другими. Для простоты восприятия возьмем данные более простые, универсальные и нейтральные — высоту в холке и вес нескольких пород собак по сведениям Американского клуба собаководства (American Kennel Club). Данные по размерам пород в среднем можно найти здесь. Прибавим к ним функцию random.uniform из Python-библиотеки numpy, переведем дюймы в сантиметры, а фунты в килограммы, и вот мы получаем реалистично выглядящий набор данных по размерам собак нескольких пород, с которым можно работать. В нашем примере это чихуахуа, бигли, ротвейлеры и английские сеттеры.
![](https://habrastorage.org/webt/v1/vv/kn/v1vvknmcpenlos_zovvouvafmt8.png)
Одну из аналитик, которую можно применить для сравнения этих 4 числовых рядов – посмотреть на их медиану. Она разбивает ряд данных на две части: половина значений меньше медианы и остальная половина – больше. Медианные значения находим, группируя с помощью библиотеки pandas по столбцу «Порода» и применяя к сгруппированным данным функцию median. Аналогично можно было бы посмотреть и другие статистические показатели: среднее значение (mean) и моду (mode).
Видим, что половина встреченных нами чихуахуа имеет высоту в холке не больше 18 см, бигль значительно выше – в районе 41 см, и следующие по размерам – ротвейлер и английский сеттер, которые отличаются по росту незначительно: 58 и 63 см.
![](https://habrastorage.org/webt/d7/ne/vi/d7neviecyqreya3y_tq1pt3dlek.png)
Рисунок 2. Медианные значения высоты в холке четырех пород собак.
Но только одной медианы недостаточно для сравнительного анализа данных. Можно получить больше информации, если рассмотреть такой инструмент как диаграмма размаха (также известная как «ящик с усами», box-and-whiskers plot), построенную с помощью Python-библиотеки для построения графиков seaborn. Линия внутри ящика – это уже знакомая нам медиана. Ее уровень на графике справа (см. Рисунок 3) совпадает с высотой соответствующего столбца слева. Но при этом диаграмма размаха содержит дополнительную информацию о том, как данные распределены внутри ряда: нижняя граница прямоугольника (ящика) – это первый квартиль (величина, превосходящая 25% значений ряда), а верхняя граница – третий квартиль (величина, превосходящая 75% значений). А те самые «усы» — отрезки, отходящие вверх и вниз от середины прямоугольника – строятся на основе интерквартильного размаха и обозначают верхнюю и нижнюю границу значимой части наших данных, исключая выбросы. Здесь выбросы отсутствуют (дистрофиков и собак-гигантов нам в рассмотрение не попадалось), при наличии они отобразились бы метками за пределами «усов».
![](https://habrastorage.org/webt/ea/oq/oy/eaoqoygvus1uyngtcy6uyeoqsrc.png)
Рисунок 3. Сравнение столбчатой и диаграммы размаха, построенных для одного и того же набора данных.
Скрипичный график (violinplot) из той же библиотеки seaborn дает нам еще больше информации о структуре рассматриваемых данных. Ниже на Рисунке 4 представлены все три графика, где породы идут каждый раз в одинаковом порядке, а цвет для соответствующего ряда сохраняется.
![](https://habrastorage.org/webt/7t/jz/sn/7tjzsnuxggfdwzr2zzzkofldcii.png)
Рисунок 4. Сравнение столбчатой диаграммы, диаграммы размаха и скрипичного графика, построенных для одного и того же набора данных.
Например, зеленым показаны данные о ротвейлерах.
Сходства и различия диаграммы размаха (ящика с усами) и скрипичного графика показаны на следующем Рисунке 5. Сначала сходства: (1) оба графика в том или ином виде отражают 0.25-квантиль, 0.5-квантиль (медиану) и 0.75-квантиль; (2) и там, и там отражаются крайние значения, которые близки к величине полутора межквартильных интервалов (IQR), отложенных от нижнего и верхнего края коробки – те самые «усы» для диаграммы размаха, за пределами которых находятся «выбросы».
Отличие же состоит в том, что скрипичный график содержит также информацию о том, как данные распределены внутри, т.к. границы построенной «скрипки» — это повернутая на 90 градусов плотность распределения. И в этом случае при анализе графика у нас гораздо больше информации: в дополнение к квантилям и значениям, описывающим 4 интерквартильных расстояния (1.5 + 1 + 1.5) на скрипичном графике можно увидеть, распределены ли данные равномерно или есть несколько центров, где значения встречаются более часто.
![](https://habrastorage.org/webt/8e/rl/e5/8erle5v-akgkwfufdocqfrgxzrm.png)
Рисунок5. Пояснения по соответствию элементов двух графиков: размаха и скрипичного.
Более ярко эту мысль можно увидеть на следующем графике (Рисунок 6), где данные по двум группам ротвейлеров отличаются, но подобраны таким образом, что медианы совпадают (крайний слева график) и даже больше – диаграммы размаха (в центре) тоже совпадают! И только скрипичный график (крайний справа) показывает нам, что на самом деле структура данных значительно отличается.
![](https://habrastorage.org/webt/su/gm/cu/sugmcuj3wptilne2_6idz4tibgo.png)
Рисунок 6. Пример, когда только скрипичные график позволяет нам увидеть отличия во внутренней структуре рассматриваемых данных.
Используя кластеризацию К-средних (cluster.KMeans) из модуля sklearn, мы можем визуально представить сгруппированные данные, построив диаграмму разброса с помощью функции scatterplot модуля seaborn. Здесь цвет отделяет один кластер, созданный ML-алгоритмом, от другого, а форма маркера показывает исходную принадлежность к той или иной группе. Понижать размерность с помощью PCA или какого-либо другого метода здесь было не нужно, т.к. данные изначально 2D.
![](https://habrastorage.org/webt/7e/2m/0z/7e2m0zdjarv69olp2jyhm7mtbpa.png)
Код для кластеризации и построения диаграммы разброса:
![](https://habrastorage.org/webt/f6/d8/nz/f6d8nzubzdop4cbnqpsdojky_r8.png)
![](https://habrastorage.org/webt/lz/rf/lr/lzrflrralza0fl-wgbjsznwdvvo.png)
Таким образом, на примере данных о высоте в холке нескольких пород собак мы познакомились с некоторыми статистическими характеристиками числовых рядов и инструментах их визуализации. Простой инструмент дает понятную метрику, но не дает полной картины. Более сложные инструменты дают более глубокую картину данных, но и воспринимаются также сложнее в силу увеличения количества информации на графике. И здесь важно выбирать инструмент под конкретную задачу, чтобы находить баланс между требующейся полнотой информации и простотой ее восприятия на графике.