Файл для практики.
employee_id,department,city,salary
1,IT,Yerevan,3200
2,IT,Yerevan,3500
3,IT,Tbilisi,4100
4,IT,Prague,3900
5,IT,Prague,3700
6,Sales,Yerevan,2500
7,Sales,Yerevan,2700
8,Sales,Tbilisi,2900
9,Sales,Prague,3100
10,Sales,Prague,2800
11,HR,Yerevan,2200
12,HR,Yerevan,2400
13,HR,Tbilisi,2600
14,HR,Prague,2500
15,HR,Prague,2300
16,Marketing,Yerevan,2800
17,Marketing,Tbilisi,3000
18,Marketing,Tbilisi,3100
19,Marketing,Prague,3400
20,Marketing,Prague,3200
21,IT,Yerevan,50000
В предыдущем уроке мы познакомились с библиотекой Seaborn и увидели, насколько удобно она работает с данными из Pandas. Теперь пришло время перейти к одному из самых распространенных сценариев анализа данных — исследованию категориальных признаков.
Представьте, что вам необходимо проанализировать данные интернет-магазина. Какие категории товаров продаются чаще всего? Есть ли разница в среднем чеке между регионами? Отличается ли распределение зарплат в разных отделах компании?
Подобные задачи встречаются практически в любом аналитическом проекте. Именно поэтому Seaborn предоставляет целый набор специализированных инструментов для работы с категориальными данными.
В этом уроке мы познакомимся с графиками countplot(), barplot(), boxplot() и violinplot(), научимся сравнивать категории между собой и искать различия между группами.
Что вы узнаете в рамках статьи
- Когда использовать
countplot(). - Для чего нужен
barplot(). - Как анализировать распределения через
boxplot(). - Что показывает
violinplot(). - Как сравнивать категории между собой.
- Как находить различия между группами.
- Как выбирать подходящий тип визуализации.
Ключевые термины
- Категориальный признак — признак, принимающий значения из ограниченного набора категорий.
- Countplot — график количества объектов в каждой категории.
- Barplot — график агрегированных числовых значений по категориям.
- Boxplot — диаграмма размаха для анализа распределений.
- Violinplot — график распределения данных внутри категорий.
- Медиана — значение, находящееся в центре отсортированной выборки.
- Выброс — значение, существенно отличающееся от остальных наблюдений.
Подготовка данных
Для примеров будем использовать небольшой DataFrame.
import pandas as pd
df = pd.DataFrame({
"department": [
"IT", "IT", "IT",
"Sales", "Sales",
"HR", "HR", "HR"
],
"salary": [
3200, 3500, 4100,
2500, 2700,
2200, 2400, 2600
]
})
В таблице содержатся отделы компании и зарплаты сотрудников. Подобная структура часто встречается в реальных задачах анализа данных.
Countplot — подсчет объектов в категориях
Очень часто аналитика интересует простой вопрос: сколько объектов относится к каждой категории? Например, аналитика может интересовать количество сотрудников в каждом отделе компании, число заказов по категориям товаров или распределение клиентов по странам. Во всех этих случаях задача сводится к подсчету объектов внутри категорий, и именно для таких ситуаций отлично подходит countplot().
import seaborn as sns
import matplotlib.pyplot as plt
sns.countplot(
data=df,
x="department"
)
plt.show()
Seaborn самостоятельно подсчитает количество строк в каждой категории и построит график. По сути countplot() является автоматизированной визуализацией результатов value_counts().
Когда использовать countplot()
Этот график подходит тогда, когда нас интересует количество объектов. Например, если нужно узнать, в каком городе больше клиентов или какая категория товаров встречается чаще всего. Важно понимать, что countplot() не анализирует числовые показатели. Он работает исключительно с количеством наблюдений.
Barplot — агрегированные показатели
Иногда нас интересует не количество объектов, а некоторое числовое значение. Например, нас может интересовать средняя зарплата сотрудников в разных отделах компании, средняя стоимость заказа для различных категорий товаров или средняя оценка, которую пользователи ставят продуктам. В подобных задачах важно сравнить некоторый числовой показатель между категориями, и именно для этого обычно используют barplot().
import seaborn as sns
import matplotlib.pyplot as plt
sns.barplot(
data=df,
x="department",
y="salary"
)
plt.show()
В данном случае Seaborn автоматически вычислит среднюю зарплату для каждого отдела. Получается график средних значений. Это одно из ключевых отличий от countplot().
Как работает barplot()
Многие новички думают, что barplot() просто отображает данные из таблицы. На самом деле внутри происходит агрегация. По умолчанию Seaborn вычисляет среднее значение. Например, для отдела IT (3200 + 3500 + 4100) / 3. Именно это число попадет на график. Поэтому barplot() отлично подходит для сравнения средних показателей между категориями.
Сравнение категорий
Предположим, компания хочет понять, в каком отделе самые высокие зарплаты. По таблице сделать это непросто. Но после построения barplot() различия становятся очевидными. Именно поэтому подобные графики часто используются при подготовке отчетов для бизнеса.
Boxplot — анализ распределения
Среднее значение полезно, но иногда оно скрывает важные детали. Представьте, что в одном отделе большинство сотрудников получает одинаковую зарплату, а в другом зарплаты сильно различаются. Среднее значение может оказаться одинаковым.
Для анализа распределения используется boxplot().
import seaborn as sns
import matplotlib.pyplot as plt
sns.boxplot(
data=df,
x="department",
y="salary"
)
plt.show()
Этот график показывает значительно больше информации, чем обычный столбец.
Что показывает boxplot()
Boxplot позволяет быстро оценить распределение данных внутри каждой категории. На графике отображается медиана — значение, которое находится примерно посередине выборки, а также диапазон, в котором сосредоточено большинство наблюдений. Кроме того, boxplot показывает общий разброс данных и помогает выявлять выбросы — значения, которые сильно отличаются от остальных.
Например, если сравнивать зарплаты сотрудников разных отделов, то boxplot позволит увидеть не только типичный уровень зарплат, но и понять, насколько они отличаются друг от друга внутри каждого отдела. Чем выше прямоугольник на графике, тем сильнее разброс значений. Если отдельные точки находятся далеко от основной группы данных, это может указывать на выбросы.
Поэтому boxplot часто используют на этапе исследовательского анализа данных. Даже если две категории имеют одинаковое среднее значение, boxplot может показать совершенно разные распределения, разбросы и наличие необычных наблюдений.
Поиск выбросов
Одним из преимуществ boxplot является возможность быстро обнаруживать выбросы. Предположим, что один сотрудник получает зарплату 50000, при том что остальные получают около трех тысяч. На boxplot такое значение будет хорошо заметно. Поэтому этот график часто используется для первичного анализа качества данных.
Violinplot — более подробный взгляд на распределение
Boxplot показывает основные характеристики распределения. Однако иногда хочется увидеть форму распределения более подробно.
Для этого существует violinplot().
import seaborn as sns
import matplotlib.pyplot as plt
sns.violinplot(
data=df,
x="department",
y="salary"
)
plt.show()
На первый взгляд график может выглядеть необычно. Но именно эта форма содержит важную информацию.
Как читать violinplot()
Ширина фигуры показывает плотность данных. Если определенные значения встречаются часто, соответствующая часть графика становится шире. Если наблюдений мало, фигура сужается. Благодаря этому можно увидеть структуру распределения гораздо подробнее, чем в boxplot.
Когда использовать violinplot()
Violinplot особенно полезен при сравнении нескольких групп и изучении распределений данных. Он помогает заметить необычные закономерности и понять, в каких диапазонах значения встречаются чаще всего. Однако для бизнес-аудитории boxplot обычно оказывается проще для восприятия. Поэтому выбор графика зависит от аудитории и целей анализа.
Поиск различий между группами
Главная цель всех рассмотренных графиков — сравнение категорий. Например, аналитика может интересовать, отличаются ли зарплаты сотрудников между отделами, есть ли различия в продажах между регионами или показывают ли разные группы пользователей различные результаты в ходе эксперимента. Именно для поиска и визуального анализа таких различий часто используются рассмотренные графики.
Как выбрать подходящий график
Выбор обычно зависит от задачи.
- Если нужно посчитать количество объектов — используйте
countplot(). - Если необходимо сравнить средние значения — подойдет
barplot(). - Если требуется изучить распределение и выбросы — лучше использовать
boxplot(). - Если важна форма распределения и плотность данных — стоит обратить внимание на
violinplot().
Наиболее частые ошибки
- Использовать countplot вместо barplot
Количество объектов и средние значения решают разные задачи. - Оценивать распределение только по barplot
Среднее значение может скрывать важные особенности данных. - Игнорировать выбросы на boxplot
Они могут существенно влиять на результаты анализа. - Использовать violinplot для аудитории без аналитического опыта
График может оказаться сложным для интерпретации. - Сравнивать категории без визуализации распределений
Часть важных закономерностей может остаться незамеченной.
Наиболее частые вопросы
- Что лучше: boxplot или violinplot?
Зависит от задачи. Boxplot проще, violinplot информативнее. - Почему barplot показывает средние значения?
Потому что Seaborn автоматически выполняет агрегацию данных. - Можно ли использовать DataFrame напрямую?
Да, это один из главных плюсов Seaborn. - Подходит ли countplot для числовых данных?
Обычно нет. Он предназначен для категорий. - Какой график чаще всего используется в аналитике?
Boxplot считается одним из самых популярных инструментов анализа категорий и распределений.
Итоги
В этом уроке вы познакомились с основными инструментами Seaborn для анализа категориальных данных. Мы научились использовать countplot() для подсчета объектов, barplot() для сравнения агрегированных показателей, boxplot() для анализа распределений и выбросов, а также violinplot() для более глубокого изучения структуры данных.
Теперь вы умеете выбирать подходящий график в зависимости от аналитической задачи и можете использовать визуализацию для поиска различий между группами и выявления закономерностей в данных.