Seaborn catplot – Визуализация категориальных данных в Python

В этом руководстве вы научитесь создавать реляционные графики Seaborn с использованием функции sns.catplot(). Категориальные графики показывают отношения между числовыми и одной или несколькими категориальными переменными. Seaborn предоставляет множество различных функций визуализации категориальных данных, которые охватывают всё разнообразие категориальных точечных диаграмм, распределения категориальных данных и оценочных категориальных графиков.

Seaborn предлагает специализированные функции для обеих этих визуализаций. Так зачем использовать функцию catplot()? Функция catplot() в Seaborn является функцией на уровне фигур, а не на уровне осей. Это открывает разные возможности в плане того, как вы строите свои визуализации.

К концу этого урока вы научитесь следующему:

  • Что такое функция Seaborn catplot()

  • Когда использовать функцию Seaborn catplot() вместо специальных функций

  • Как построить несколько графиков с помощью функции уровня фигуры sns.catplot()

  • Как настроить заголовки, цвета и многое другое

Оглавление

Понимание функции Seaborn catplot()

Функция catplot() в Seaborn используется для создания графиков на уровне фигур на основе Seaborn FacetGrid. Вы можете настроить тип визуализации, используя параметр kind=

Функция catplot() в Seaborn предоставляет интерфейс уровня фигуры для создания категориальных графиков. Это означает, что функция позволяет создавать графики на уровне фигуры, а не объекта осей. Это открывает гораздо больше возможностей.

Давайте посмотрим, как написана функция:

# Понимание функции catplot() в Seaborn
import seaborn as sns
sns.catplot(data=None, *, x=None, y=None, hue=None, row=None, col=None, col_wrap=None, estimator='mean', errorbar=('ci', 95), n_boot=1000, units=None, seed=None, order=None, hue_order=None, row_order=None, col_order=None, height=5, aspect=1, kind='strip', native_scale=False, formatter=None, orient=None, color=None, palette=None, hue_norm=None, legend='auto', legend_out=True, sharex=True, sharey=True, margin_titles=False, facet_kws=None, ci='deprecated', **kwargs)

Функция позволяет вам создавать следующие типы визуализации, модифицируемые с использованием параметра kind=

Категориальный тип диаграммы
Тип графика
Функция Аргумент
Учебное пособие по специальным функциям

Categorical Scatter Plot

Strip Plot

kind='strip'

Categorical Scatter Plot

Swarm Plot

kind='swarm'

Categorical Distribution Plot

Box Plot

kind='box'

Categorical Distribution Plot

Violin Plot

kind='violin'

Categorical Distribution Plot

Boxen Plot

kind='boxen'

sns.boxenplot()

Categorical Estimate Plot

Point Plot

kind='point'

Categorical Estimate Plot

Bar Plot

kind='bar'

Categorical Estimate Plot

Count Plot

kind='count'

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

Функция имеет интерфейс, очень похожий на интерфейсы других функций для создания связанных графиков. Давайте рассмотрим некоторые ключевые опции:

  • data= предоставляет данные для построения графика с помощью Pandas DataFrame

  • x= и y= указывают переменные координат для осей X и Y соответственно

  • hue= добавляет дополнительную переменную в график через цветовое кодирование

Дополнительно, функция предлагает некоторые дополнительные параметры, доступные только в функции catplot(). Давайте исследуем их:

  • kind= определяет тип создаваемой диаграммы. По умолчанию будет создана диаграмма типа "полосы", с использованием ключевого аргумента 'strip'

  • row= позволяет вам разделить ваш набор данных на дополнительные строки визуализаций

  • Опция col= позволяет разделить ваш набор данных на дополнительные колонки визуализаций.

  • height= и aspect= контролируют размер вашей визуализации данных

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

Загрузка образца набора данных

Чтобы следовать этому учебнику, давайте используем набор данных, предоставленный библиотекой Seaborn. Мы будем использовать популярный набор данных о пингвинах, который я подробно рассматриваю в моем учебнике K-Nearest Neighbor, если вы хотите узнать больше о наборе данных.

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

# Исследование образца данных
import seaborn as sns
df = sns.load_dataset('penguins')

print(df.head())

# Возвращает:
#       species     island  bill_length_mm  bill_depth_mm  flipper_length_mm  body_mass_g     sex
# 0     Adelie  Torgersen            39.1           18.7              181.0       3750.0    Male
# 1     Adelie  Torgersen            39.5           17.4              186.0       3800.0  Female
# 2     Adelie  Torgersen            40.3           18.0              195.0       3250.0  Female
# 3     Adelie  Torgersen            36.7           19.3              193.0       3450.0  Female
# 4     Adelie  Torgersen            39.3           20.6              190.0       3650.0    Male

Мы вывели на печать первую запись из набора данных, используя аксессор iloc. Мы видим, что у нас есть данные различных типов, включая как категориальные, так и непрерывные переменные.

Создание базового сюжета с помощью Seaborn

По умолчанию функция catplot() в Seaborn создаст точечную диаграмму. Для создания самой базовой визуализации мы можем просто передать следующие параметры:

  • data= передать в наш DataFrame

  • x= и y= для передачи меток столбцов, которые мы хотим исследовать на диаграмме рассеяния

Давайте посмотрим, как выглядит этот код:

# Исследование образца данных
import seaborn as sns
df = sns.load_dataset('penguins')

print(df.head())

# Возвращает:
#       вид       остров  длина_клюва_mm  глубина_клюва_mm  длина_ласт_mm  масса_тела_g     пол
# 0  Adelie  Torgersen             39.1              18.7           181.0         3750.0    Мужской
# 1  Adelie  Torgersen             39.5              17.4           186.0         3800.0  Женский
# 2  Adelie  Torgersen             40.3              18.0           195.0         3250.0  Женский
# 3  Adelie  Torgersen             36.7              19.3           193.0         3450.0  Женский
# 4  Adelie  Torgersen             39.3              20.6           190.0         3650.0    Мужской

В приведенном выше блоке кода мы передали наш DataFrame df, а также метки столбцов 'island' и 'bill_length_mm'. Это привело к следующей визуализации:

Мы видим, что поскольку мы изображаем две переменные, для нас создана полосчатая диаграмма. Эта диаграмма позволяет исследовать взаимосвязь между двумя переменными, определяя, как эти две переменные взаимодействуют. Обратите внимание, что одна переменная категориальная, а другая непрерывная.

Создание гистограммы с помощью Seaborn Catplot

В функции catplot() библиотеки Seaborn по умолчанию создаются точечные диаграммы, но мы также можем создавать столбчатые диаграммы, используя параметр kind='bar'. Это особенно полезно, когда вы хотите агрегировать данные до одной меры, например, до среднего значения набора данных.

# Создание столбчатой диаграммы с помощью функции catplot() из библиотеки Seaborn
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('penguins')

sns.catplot(data=df, x='остров', y='длина_клюва_mm', kind='bar')
plt.show()

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

Поскольку функция catplot() на самом деле использует функцию barplot() «под капотом», их поведение одинаково. По умолчанию функция будет агрегировать данные в одно значение. Так как у нас есть три разных значения данных для каждой даты, Seaborn вернет среднее значение каждого значения данных.

Производя это, также появляется необходимость понимать, как варьируются эти данные. Вот почему Seaborn добавляет к своим визуализациям погрешностные полосы. Давайте поподробнее рассмотрим эти погрешностные полосы.

Понимание диапазонов ошибок в кошачьем графике Seaborn

При агрегации данных в catplot'ах Seaborn, Seaborn добавляет к визуализации планку ошибки. В приведенном выше примере мы создали столбчатую диаграмму, которая возвращала среднее значение для каждой категории.

По умолчанию Seaborn использует метод, называемый бутстраппингом, для того, чтобы предоставить 95% доверительный интервал, в пределах которого новые данные будут находиться в пределах погрешности.

Это означает, что Seaborn будет использовать выборку с заменой для расчета среднего значения и повторять этот процесс многократно. По умолчанию, этот процесс повторяется тысячу раз для каждого значения по оси x

Это создаёт доверительный интервал, в пределах которого с 95% вероятностью будут находиться новые значения. Однако у вас также есть возможность изменить как уровень доверия, так и количество итераций бутстрапа, которые выполняет Seaborn.

Мы также можем изменить процент, используемый в нашем доверительном интервале, передав кортеж, содержащий ('ci', n), где n представляет собой процент, который мы хотим использовать. Давайте изменим наш интервал так, чтобы он отображал 99% доверительный интервал:

# Изменение планок ошибок в функции catplot() библиотеки Seaborn
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('penguins')

sns.catplot(data=df, x='остров', y='длина_клюва_mm', kind='bar', errorbar=('ci', 99))
plt.show()

Это дает следующую визуализацию. Обратите внимание, что теперь полоса уже, поскольку полоса ошибки теперь намного менее определена.

Вы также можете заметить, что параметр errorbar= не является частью определения функции catplot(). Тем не менее, он является частью функции barplot(). Seaborn позволяет использовать любые ключевые аргументы из этой функции при построении линейного графика.

Если вам нужно изменить тип расчета ошибки, Seaborn тоже облегчает эту задачу!

Seaborn поддерживает следующие расчеты погрешностей: 'ci', 'pi', 'se', или 'sd', которые представляют следующие расчеты:

  • 'ci': интервал уверенности, который вычисляет непараметрическую неопределенность

  • 'pi': интервал процентилей, который рассчитывает непараметрическое распределение

  • 'se': стандартная ошибка, которая рассчитывает параметрическую неопределенность

  • 'sd': стандартное отклонение, которое рассчитывает параметрическое распределение

Давайте теперь погрузимся в настройку нашего отношенческого графика, добавляя цвета, формы и размеры.

Изменение сюжета Seaborn с помощью цвета

Мы можем добавить дополнительные детали в наши графики Seaborn, используя цвета. Это позволяет добавить дополнительные измерения (или столбцы данных) в вашу визуализацию. Это означает, что, хотя наши графики останутся двумерными, мы можем на самом деле изобразить дополнительные измерения.

Мы можем использовать параметр hue= для добавления дополнительных параметров цвета. Давайте исследуем, как мы можем добавлять дополнительные детали, используя цвет.

Добавление цвета в сюжет Seaborn Catplot

Чтобы добавить дополнительную переменную в вашу диаграмму Seaborn catplot(), вы можете использовать параметр hue=, чтобы передать столбец DataFrame, который разделит данные на несколько цветов.

Когда вы работаете с категориальными данными в Seaborn, он создаст цвет для каждого уникального значения в этой колонке. Таким образом, за каждое уникальное значение будет добавлен отдельный цвет.

Добавление цветовых стилей вместо добавления цветовых измерений

В этом случае мы будем добавлять цвет для представления другого измерения данных. Если бы вам, вместо этого, хотелось контролировать стиль вашего графика, вы бы могли использовать параметр palette=. На протяжении оставшейся части урока мы применим стиль, чтобы сделать стандартное оформление немного более эстетичным.

Давайте посмотрим, как мы можем использовать Seaborn, чтобы добавить больше деталей в наш график, используя параметр hue=

# Добавление цвета с помощью параметра hue
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('penguins')

sns.catplot(data=df, x='остров', y='длина_клюва_mm', kind='violin', hue='пол')
plt.show()

В указанном выше блоке кода мы передали hue='Name'. Это означает, что мы хотим окрасить точки на нашем диаграмме рассеяния в разные цвета в зависимости от пола пингвина. (Примечание: мы также применили палитру, хотя это сделано исключительно для стилизации диаграммы). В результате получается следующее изображение:

Теперь мы видим, что визуализация данных стала намного четче. Мы можем гораздо лучше видеть различия в данных.

Создание подмножеств графиков со строками и столбцами

Seaborn обеспечивает значительную гибкость в создании подмножеств графиков, распространяя данные по строкам и столбцам. Это позволяет генерировать "малые множества" графиков.

В отличие от разделения визуализации с помощью цвета или стиля (хотя это также возможно), Seaborn разделит визуализацию на несколько подграфиков. Однако вам не потребуется явно определять подграфики, так как Seaborn автоматически разместит их на сетке фигур FacetGrid.

Давайте теперь исследуем, как мы можем сначала добавить столбцы визуализаций данных.

Добавление столбцов в Seaborn Catplot

Для создания колонок с подграфиками мы можем использовать параметр col=. Этот параметр принимает либо метку колонки DataFrame Pandas, либо массив данных. Давайте разделим нашу визуализацию данных на колонки, основываясь на принадлежности к определенной акции:

# Добавление столбцов данных
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('penguins')

sns.catplot(data=df, x='остров', y='длина_клюва_mm', kind='violin', col='пол')
plt.show()

В указанном выше кодовом блоке мы настроили Seaborn на создание колонок малых множителей с колонкой 'sex'. Это означает, что Seaborn создаст отдельный субплот в более широком FacetGrid для каждого уникального значения в колонке

Но, что происходит, когда у нас много уникальных значений? Seaborn будет продолжать добавлять всё больше и больше столбцов.

Из-за этого мы можем использовать параметр col_wrap=, чтобы организовывать графики в столбцы. Этот параметр принимает целое число, указывающее, сколько столбцов должно быть перед тем, как графики будут перенесены на следующую строку.

# Добавление обёртки для столбцов в графиках
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('penguins')

sns.catplot(data=df, x='пол', y='длина_клюва_mm', kind='violin', col='остров', col_wrap=2)
plt.show()

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

В следующем разделе вы узнаете, как добавлять дополнительные строки визуализаций.

Добавление строк в отчет Seaborn

Seaborn также позволяет передавать строки малых множеств. Это работает так же, как и добавление столбцов. Однако, **вы также можете сочетать параметр rows= с параметром col=, чтобы создавать строки и столбцы малых множеств

Давайте посмотрим, как это выглядит:

# Добавление столбцов и строк данных
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('penguins')

sns.catplot(data=df, x='остров', y='длина_клюва_mm', kind='violin', row='пол', col='вид')
plt.show()

В приведённом выше блоке кода мы использовали row='sex' и col='species', чтобы разделить множественные графики на основе обеих этих колонок. Это приводит к следующей визуализации данных:

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

Изменение названий и меток осей в Seaborn Catplot

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

Добавление названия к сюжету Seaborn Catplot

Чтобы добавить заголовок к catplot() в Seaborn, можно воспользоваться методом fig.suptitle(), доступным в Matplotlib. Для этого сначала потребуется настроить отступы нашего объекта фигуры. Этот процесс может быть немного эвристическим и требовать метода проб и ошибок.

Взгляните на блок кода ниже:

# Добавление заголовков к графикам с помощью функции catplot() из библиотеки Seaborn
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('penguins')

cat = sns.catplot(data=df, x='остров', y='длина_клюва_mm', kind='violin', row='пол', col='вид')
cat.fig.subplots_adjust(top=0.92)
cat.fig.suptitle('Сравнение пингвинов')

plt.show()

В приведенном выше блоке кода мы внесли ряд важных изменений:

  1. Мы отфильтровали DataFrame, чтобы упростить визуализацию

  2. Мы присвоили переменной cat значение catplot

  3. Затем мы отрегулировали верхнее поле, используя fig.subplots_adjust()

  4. Затем мы применили к объекту фигуры метод suptitle()

Это вернуло следующую визуализацию данных:

Аналогичным образом, мы можем настраивать заголовки для каждого из создаваемых нами подграфиков. Давайте рассмотрим это далее.

Добавление заголовков к строкам и столбцам в Seaborn Catplot

Seaborn предлагает невероятно гибкие варианты форматирования для стилизации малых множеств, созданных с использованием параметров col= и row=

# Добавление заголовков строк и столбцов к графикам с помощью функции catplot() из библиотеки Seaborn
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('penguins')

cat = sns.catplot(data=df, x='остров', y='длина_клюва_mm', kind='violin', row='пол', col='вид')
cat.fig.subplots_adjust(top=0.92)
cat.fig.suptitle('Сравнение пингвинов')
cat.set_titles(row_template='Пол пингвина: {row_name}', col_template='Вид пингвина: {col_name}')

plt.show()

В приведенном выше блоке кода мы использовали метод .set_titles(), который доступен для объектов FacetGrid. Этот метод позволяет использовать параметры row_template= и col_template=, которые позволяют доступ к переменным col_name и row_name с использованием форматирования похожего на f-strings

Это возвращает визуализацию данных ниже:

В следующем разделе вы узнаете, как настроить подписи осей в catplot библиотеки Seaborn.

Изменение меток осей в Seaborn Catplot

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

  • .set_xlabel()который устанавливает метку оси X

  • .set_ylabel() который устанавливает метку оси Y

  • .set_axis_labels() который одновременно устанавливает метки осей X и Y

Давайте посмотрим, как это выглядит в Seaborn:

# Изменение подписей осей в графиках с помощью функции catplot() из библиотеки Seaborn
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('penguins')

cat = sns.catplot(data=df, x='остров', y='длина_клюва_mm', kind='violin', row='пол', col='вид')
cat.fig.subplots_adjust(top=0.92)
cat.fig.suptitle('Сравнение пингвинов')
cat.set_titles(row_template='Пол пингвина: {row_name}', col_template='Вид пингвина: {col_name}')

cat.set_xlabels('Длина клюва (мм)')
cat.set_ylabels('Название острова')

plt.show()

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

В следующем разделе вы узнаете, как изменить размер категориального графика (catplot) в Seaborn.

Изменение размера кошачьего сюжета Seaborn

Поскольку функция catplot() в Seaborn возвращает объект FacetGrid, мы можем легко изменить размер возвращаемого объекта фигуры. Чтобы сделать это, мы можем использовать следующие два параметра:

  1. height= который определяет высоту каждой грани в дюймах

  2. aspect= который определяет соотношение сторон, так что ширина равна height * aspect

Давайте посмотрим, как мы можем изменить размер более простой визуализации данных в Seaborn:

# Изменение размера графика с помощью функции catplot() из библиотеки Seaborn
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('penguins')

cat = sns.catplot(data=df, x='остров', y='длина_клюва_mm', kind='violin', height=5, aspect=1.6)

plt.show()

В указанном выше блоке кода мы использовали параметры height=5, aspect=1.6. Это значит, что высота фасета составит 5 дюймов, а ширина — 8 дюймов (5 * 1.6). В результате получается следующая визуализация данных:

Изменить размер вашей визуализации невероятно просто. Это может быть очень полезным при работе с данными, которые распределены горизонтально или вертикально, позволяя уменьшить количество пустого пространства.

Заключение

В этом уроке вы научились использовать функцию catplot() библиотеки Seaborn для создания визуализаций отношений на уровне фигур. Функция позволяет легко создавать категориальные графики, включая столбчатые диаграммы и ящичковые диаграммы, обеспечивая при этом знакомый и последовательный интерфейс.

Вы начали с изучения создания простых объектов-фигур, затем перешли к более сложным примерам, добавляя дополнительные детали с использованием цвета. Далее вы научились создавать наборы малых графиков, добавляя строки и столбцы диаграмм. Наконец, вы изучили, как настраивать визуализации, изменяя заголовки, подписи осей и размер визуала.

Дополнительные ресурсы

Чтобы узнать больше об этой и смежных темах, ознакомьтесь с ресурсами ниже:

  • Seaborn Boxplot – Как создать прямоугольные и усовые диаграммы

  • Сюжеты Seaborn Violin на Python: полное руководство

  • Seaborn Countplot — подсчет категориальных данных в Python

  • Swarmplot Seaborn: графики пчелиного роя для распределения категориальных данных

  • График Seaborn Pointplot: центральная тенденция для категориальных данных

  • График Сиборна: графики джиттера для распределения категориальных данных

Last updated