# Seaborn Countplot – Подсчет категориальных данных в Python

В этом руководстве вы узнаете, как использовать функцию `countplot()` из Seaborn для создания информативных графиков частот. **График частот похож на** **гистограмму** **и** **гистограмму** **и показывает количество категориальных значений**. Seaborn предоставляет простой и интуитивно понятный способ создания информативных графиков частот, которые легко создавать и понимать.

В конце этого урока вы узнаете следующее:

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

Оглавление

* [Понимание функции Seaborn countplot()](#ponimanie-funkcii-seaborn-countplot)
* [Создание простого графического графика Seaborn](#sozdanie-prostogo-countplot-s-pomoshyu-seaborn)
* [Сортировка столбцов Seaborn countplot()](#sortirovka-stolbcov-v-countplot-s-pomoshyu-seaborn)
* [Создайте график сгруппированного подсчета в Seaborn](#sozdanie-gruppirovannogo-grafika-kolichestv-v-seaborn)
* [Создайте график горизонтального подсчета в Seaborn](#sozdanie-gorizontalnogo-grafika-chastoty-v-seaborn)
* [Добавьте значения к графику подсчета Seaborn](#dobavlenie-znachenii-na-grafik-podscheta-seaborn)
* [Измените цвета на графике подсчета Seaborn](#izmenenie-cvetov-v-count-plot-seaborn)
* [Добавьте заголовок и метки осей к графику подсчета Seaborn](#dobavlenie-zagolovka-i-metok-osi-k-grafiku-podscheta-v-seaborn)
* [Изменение местоположения легенды на графике подсчета Seaborn](#izmenenie-raspolozheniya-legendy-v-grafike-podscheta-seaborn)
* [Заключение](#zaklyuchenie)
* [Дополнительные ресурсы](#dopolnitelnye-resursy)

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

Функция `countplot()` из библиотеки Seaborn предоставляет удобный интерфейс для создания графиков частот. Это позволяет работать как с векторными данными, так и с DataFrame из Pandas, что встречается чаще. Ниже приведен обзор параметров и аргументов по умолчанию, доступных в функции `sns.countplot()`:

```python
# Understanding the Seaborn countplot() Function
seaborn.countplot(data=None, *, x=None, y=None, hue=None, order=None, hue_order=None, orient=None, color=None, palette=None, saturation=0.75, width=0.8, dodge=True, ax=None, **kwargs)
```

Хотя мы не будем рассматривать все перечисленные параметры, мы рассмотрим самые важные, включая:

* `data=`, `x=` и `y=` предоставляют DataFrame Pandas и метки столбцов для использования при построении графика данных.
* `hue=` позволяет указать дополнительный столбец для разделения данных по цвету
* `color=` и `palette=` позволяют настроить стиль графика
* `order=` позволяет настроить порядок отображения столбцов на графике количества

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

### Создание простого countplot() с помощью Seaborn

**Для создания простого count plot с использованием Seaborn, вам нужно предоставить Pandas DataFrame, который вы хотите использовать, а также столбец, значения которого вы хотите подсчитать**

Это позволяет передать DataFrame в параметр `data=` и метку столбца в параметр `x=`. Используя параметр `x=`, данные будут отображаться вдоль оси x для вертикального графика с подсчетом.

```python
# Creating a Simple Count Plot
import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('tips')
sns.countplot(data=df, x='day')
plt.show()
```

В приведенном выше блоке кода мы использовали набор данных `'tips'` из библиотеки Seaborn. Данный набор предоставляет информацию о количестве чаевых, оставленных в разные дни недели. Используя функцию `countplot()` из Seaborn, мы смогли создать следующий countplot.

<figure><img src="http://datagy.io/wp-content/uploads/2022/12/01-Creating-a-Simple-Seaborn-Countplot.png" alt="Creating a Simple Seaborn Countplot" height="523" width="764"><figcaption><p>Создание простой графической диаграммы Seaborn</p></figcaption></figure>

Мы видим, что Seaborn создал простой график-количественник для нас. По умолчанию Seaborn использует следующие настройки

* Элементы расположены в порядке их появления в наборе данных
* Для каждой панели свой цвет
* Метки осей используют метки столбцов, предоставленные DataFrame

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

### Сортировка столбцов в countplot() с помощью Seaborn

По умолчанию Seaborn будет сортировать столбцы в count plot в порядке их появления в наборе данных. Однако мы можем настроить этот порядок, используя параметр `order=`. Этот параметр принимает список значений, представляющих метки в наборе данных.

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

#### Сортировка столбцов от большего к меньшему в Countplot Seaborn

Seaborn предоставляет наивный способ сортировки значений, позволяя передавать список меток. Это позволяет задать точный порядок, в котором вы хотите отсортировать значения.&#x20;

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

```python
# Changing Count Order From Most to Least Frequent
import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('tips')
sns.countplot(data=df, x='day', order=['Sat', 'Sun', 'Thur', 'Fri'])
plt.show()
```

Это возвращает визуализацию данных ниже, где столбцы отсортированы от самого высокого к самому низкому.

<figure><img src="http://datagy.io/wp-content/uploads/2022/12/02-Changing-Bar-Order-in-a-Seaborn-Count-Plot.png" alt="Changing Bar Order in a Seaborn Count Plot" height="523" width="764"><figcaption><p>Изменение порядка столбцов на графике подсчета Seaborn</p></figcaption></figure>

Хотя этот метод работает, он не является динамичным. Это означает, что если наши данные изменятся, нам нужно будет задать новый порядок. **Вместо этого мы можем использовать** [**метод value\_counts из Pandas**](https://datagy.io/pandas-value-counts/) для получения порядка от наибольшего к наименьшему

```python
# Changing Count Order From Most to Least Frequent
import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('tips')
sns.countplot(data=df, x='day', order=df['day'].value_counts().index)
plt.show()
```

Используя метод `value_counts()`, мы можем получить порядок категорий, используя атрибут `.index`. Это возвращает объект, похожий на список, где значения отсортированы от большего к меньшему.

#### Сортировка столбцов от наименьшего к наибольшему на графическом графике Seaborn

Аналогично приведенному выше примеру, мы можем сортировать бары от меньшего к большему, изменив порядок сортировки в методе `.value_counts()`. Поскольку мы можем передать аргумент `ascending=True`, Pandas вернет порядок в обратном порядке.

```python
# Changing Count Order From Least to Most Frequent
import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('tips')
sns.countplot(data=df, x='day', order=df['day'].value_counts(ascending=True).index)
plt.show()
```

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

<figure><img src="http://datagy.io/wp-content/uploads/2022/12/03-Ordering-from-Least-to-Most-Common-in-Seaborn-Count-Plot.png" alt="Ordering from Least to Most Common in Seaborn Count Plot" height="523" width="764"><figcaption><p>Упорядочение от наименьшего к наиболее распространенному на графике подсчета Seaborn</p></figcaption></figure>

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

### Создание Группированного Графика Количеств в Seaborn

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

```python
# Creating Grouped Bars in a Seaborn Countplot
import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('tips')
sns.countplot(data=df, x='day', hue='sex')
plt.show()
```

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

<figure><img src="http://datagy.io/wp-content/uploads/2022/12/04-Creating-a-Grouped-Seaborn-Count-Plot.png" alt="Creating a Grouped Seaborn Count Plot" height="523" width="764"><figcaption><p>Создание сгруппированного графика подсчета Seaborn</p></figcaption></figure>

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

### Создание Горизонтального Графика Частоты в Seaborn

До сих пор мы создавали вертикальные графики-диаграммы. Поскольку мы использовали `x=`, Seaborn строил данные вдоль оси x. **Если мы хотим создать горизонтальный график-диаграмму, мы можем просто изменить функцию, использовав параметр `y=`**

```python
# Creating a Horizontal Count Plot
import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('tips')
sns.countplot(data=df, y='day', hue='sex')
plt.show()
```

В приведенном выше блоке кода мы использовали тот же код, но заменили `x=` на `y=`. Это вывело категории по оси y, в результате чего получился горизонтальный график с подсчетами.

<figure><img src="http://datagy.io/wp-content/uploads/2022/12/05-Creating-a-Horizontal-Seaborn-Count-Plot.png" alt="Creating a Horizontal Seaborn Count Plot" height="523" width="785"><figcaption><p>Создание горизонтального графика подсчета Seaborn</p></figcaption></figure>

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

### Добавление значений на график подсчета Seaborn

Одна из функций, которой не хватает в функции countplot библиотеки Seaborn, — это возможность добавления значений на бары, указывающих частоту каждого элемента. Однако, благодаря тому, что Seaborn построен на основе Matplotlib, мы можем использовать базовые объекты figure и axes для значительной кастомизации графика.

С версии 3.4.0, Matplotlib упростил добавление значений к объектам столбцов. Для этого мы можем использовать метод `.bar_label()`, чтобы добавить числовую метку к нашим столбцам.

Посмотрите на приведенный ниже код, чтобы понять, как это работает:

```renpy
# Adding Values to Seaborn Count Plots
import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('tips')
ax = sns.countplot(data=df, x='day', hue='sex')
for label in ax.containers:
    ax.bar_label(label)
plt.show()
```

В кодовом блоке выше мы проходим по каждому элементу в объекте `ax.containers` и добавляем метки к нашим осям. Это возвращает визуализацию ниже, где частоты добавлены к столбцам.

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

<figure><img src="http://datagy.io/wp-content/uploads/2022/12/06-Adding-Values-to-a-Seaborn-Count-Plot.png" alt="Adding Values to a Seaborn Count Plot" height="523" width="764"><figcaption><p>Добавление значений к графику подсчета Seaborn</p></figcaption></figure>

В следующих разделах вы узнаете, как настроить графики количества, изменив цвет столбцов.

### Изменение цветов в Count Plot Seaborn

Самый простой способ изменить цвета в гистограмме Seaborn — использовать параметр `color=`. Этот параметр позволяет передавать любой цвет Matplotlib, включая CSS названия цветов и шестнадцатеричные цвета. Давайте посмотрим, как мы можем изменить цвет нашей гистограммы:

```python
# Modifying Colors in a Seaborn Count Plot
import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('tips')
sns.countplot(data=df, x='day', hue='sex', color='aquamarine')
plt.show()
```

В кодовом блоке выше мы передали `color='aquamarine'`, что создало визуализацию ниже:

<figure><img src="http://datagy.io/wp-content/uploads/2022/12/07-Adding-Values-to-a-Seaborn-Count-Plot.png" alt="Adding Values to a Seaborn Count Plot" height="523" width="764"><figcaption><p>Добавление значений к графику подсчета Seaborn</p></figcaption></figure>

Мы видим, что хотя мы передали только один цвет (и это единственный вариант в Seaborn), Seaborn изменил насыщенность для разных групп.

#### Измените насыщенность на графике подсчета Seaborn

**По умолчанию Seaborn использует более приглушенную насыщенность 0.75 от исходного цвета.** Мы можем изменить эту насыщенность, используя параметр `saturation=`, который принимает необязательное значение с плавающей запятой от 0 до 1. Давайте посмотрим, как изменится наша визуализация при установке значения 0.5.

```python
# Changing Saturation in Seaborn Count Plot
import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('tips')
sns.countplot(data=df, x='day', hue='sex', color='aquamarine', saturation=0.5)
plt.show()
```

Еще больше понижая насыщенность, Seaborn возвращает следующую визуализацию:

<figure><img src="http://datagy.io/wp-content/uploads/2022/12/08-Changing-Saturation-in-a-Seaborn-Count-Plot.png" alt="Changing Saturation in a Seaborn Count Plot" height="523" width="764"><figcaption><p>Изменение насыщенности на графике подсчета Seaborn</p></figcaption></figure>

#### Условное окрашивание столбца в графике подсчета Seaborn

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

Чтобы раскрасить самый высокий (или самый низкий) столбик на count plot графике Seaborn, можно получить высоты каждого из столбиков. Для этого мы используем объекты patches осей и [используем списковое включение](https://datagy.io/list-comprehensions-in-python/), чтобы получить высоту каждого столбика. Затем находим индекс самого высокого с помощью [функции argmax из NumPy](../../uchebniki-po-pandas-i-numpy/numpy/np.argmax-kak-ispolzovat-numpy-argmax)

```python
# Coloring a Single Bar Conditionally
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

df = sns.load_dataset('tips')
ax = sns.countplot(data=df, x='day', hue='sex', color='aquamarine', saturation=0.5)

# Get the patches and color the tallest
patch_h = [patch.get_height() for patch in ax.patches]   
idx_tallest = np.argmax(patch_h)   
ax.patches[idx_tallest].set_facecolor('slateblue') 

plt.show()
```

После того как у нас есть индекс самой высокой полосы (как возвращено функцией NumPy `argmax()`), мы используем метод `.set_facecolor()`, чтобы установить цвет самой высокой полосы на `'slateblue'`.

<figure><img src="http://datagy.io/wp-content/uploads/2022/12/09-Coloring-a-Bar-Conditionally-in-a-Seaborn-Count-Plot.png" alt="Coloring a Bar Conditionally in a Seaborn Count Plot" height="523" width="764"><figcaption><p>Условное раскрашивание столбца на графике подсчета Seaborn</p></figcaption></figure>

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

#### Использование цветовой палитры в графике частот Seaborn

Seaborn также предоставляет большой набор цветовых палитр для стилизации ваших графиков различными способами. **Один из самых интуитивных способов изменить цветовую палитру - использовать параметр `palette=` функции `countplot().`**

```python
# Using a Palette in Seaborn Count Plots
import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('tips')
sns.countplot(data=df, x='day', hue='sex', palette='Set2')
plt.show()
```

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

<figure><img src="http://datagy.io/wp-content/uploads/2022/12/10-Using-a-Color-Palette-in-a-Seaborn-Count-Plot.png" alt="Using a Color Palette in a Seaborn Count Plot" height="523" width="764"><figcaption><p>Использование цветовой палитры на графике подсчета Seaborn</p></figcaption></figure>

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

### Добавление Заголовка и Меток Оси к Графику Подсчета в Seaborn

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

Это можно сделать с помощью функций осей из Matplotlib. В приведенном ниже коде мы сначала создаем объект осей `ax`. Это позволяет вам изменять заголовок и метки осей, используя метод осей.

```python
# Adding a Title and Axis Labels to a Seaborn Count Plot
import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('tips')
ax = sns.countplot(data=df, x='day', hue='sex', palette='Set2')
ax.set_title('Number of Customers by Day and Waitstaff')
ax.set_xlabel('Day of Week')
ax.set_ylabel('# of Customers Served')
plt.show()
```

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

<figure><img src="http://datagy.io/wp-content/uploads/2022/12/11-Adding-Titles-and-Axis-Labels-in-a-Seaborn-Count-Plot.png" alt="Adding Titles and Axis Labels in a Seaborn Count Plot" height="554" width="764"><figcaption><p>Добавление заголовков и меток осей на графике подсчета Seaborn</p></figcaption></figure>

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

### Изменение расположения легенды в графике подсчета Seaborn

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

В приведенном ниже блоке кода мы используем функцию `plt.legend()`, чтобы настроить, где должен быть расположен легенда.

```python
# Changing Legend Location in a Seaborn Count Plot
import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('tips')
ax = sns.countplot(data=df, x='day', hue='sex', palette='Set2')
ax.set_title('Number of Customers by Day and Waitstaff')
ax.set_xlabel('Day of Week')
ax.set_ylabel('# of Customers Served')
plt.legend(loc='upper left', bbox_to_anchor=(1, 1))
plt.show()
```

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

<figure><img src="http://datagy.io/wp-content/uploads/2022/12/12-Changing-Legend-Location-in-a-Seaborn-Count-Plot.png" alt="Changing Legend Location in a Seaborn Count Plot" height="554" width="919"><figcaption><p>Изменение местоположения легенды на графике подсчета Seaborn</p></figcaption></figure>

Изменение расположения легенды позволяет создавать более стилизованные графики.

### Заключение

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

Оттуда мы создали простой countplot и продолжили улучшать его, внося небольшие изменения. Сначала мы научились стилизовать график, изменяя порядок столбиков и добавляя сгруппированные countplots. Затем вы узнали, как стилизовать график с помощью цвета, включая условное окрашивание столбиков.

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

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

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

* Seaborn Catplot — Визуализация категориальных данных в Python
* Seaborn Boxplot – Как создать прямоугольные и усовые диаграммы
* Графики Seaborn Violin на Python: полное руководство
* Seaborn barplot() – создание гистограмм с помощью sns.barplot()
* Swarmplot Seaborn: графики пчелиного роя для распределения категориальных данных
* График Seaborn: графики Jitter  для распределения категориальных данных
* График Seaborn Pointplot: центральная тенденция для категориальных данных
* [График Seaborn - Официальная документация](https://seaborn.pydata.org/generated/seaborn.countplot.html)
