Файл для практики
client_id,age,salary
1,28,1200
2,29,1300
3,20,1400
4,21,1500
5,22,1600
6,23,1700
7,24,1800
8,25,1900
9,26,2000
10,27,2100
11,28,2200
12,29,2300
13,30,2400
14,31,2500
15,32,2600
16,33,2700
17,34,2800
18,35,2900
19,36,3000
20,37,3100
21,38,3200
22,39,3300
23,40,3400
24,41,3500
25,42,3600
26,43,3700
27,44,3800
28,45,3900
29,46,4000
30,47,4100
31,48,4200
32,49,4300
33,20,4400
34,21,4500
35,22,4600
36,23,4700
37,24,4800
38,25,4900
39,26,5000
40,27,25000
На прошлом уроке мы научились визуализировать категориальные данные и сравнивать различные группы объектов с помощью столбчатых и круговых диаграмм. Однако далеко не все данные состоят из категорий. Очень часто аналитики работают с числовыми признаками: возрастом клиентов, стоимостью заказов, зарплатами сотрудников, количеством покупок и множеством других показателей.
Когда перед нами оказывается большой набор чисел, возникает вопрос: как понять, какие значения встречаются чаще всего? Есть ли среди данных необычно большие или маленькие значения? Насколько равномерно распределены данные?
Ответить на эти вопросы помогают специальные графики для анализа распределений. Одним из самых популярных инструментов является гистограмма.
В этом уроке мы познакомимся с гистограммами в Matplotlib, научимся управлять количеством интервалов, разберемся с понятием распределения данных и научимся находить выбросы с помощью визуализации.
Что вы узнаете в рамках статьи
- Что такое распределение данных.
- Для чего используются гистограммы.
- Как строить гистограммы в Matplotlib.
- Как работает параметр
bins. - Как анализировать распределение числовых значений.
- Как находить выбросы на графиках.
- Что такое кумулятивное распределение.
- Как строить накопительные гистограммы.
Ключевые термины
- Числовой признак — признак, содержащий количественные значения.
- Гистограмма — график, показывающий распределение числовых данных.
- Интервал (bin) — диапазон значений, в который попадают данные на гистограмме.
- Распределение данных — способ расположения значений внутри набора данных.
- Выброс — значение, сильно отличающееся от остальных.
- Кумулятивное распределение — накопленное распределение значений от меньших к большим.
Что такое распределение данных
Представьте, что у вас есть информация о возрасте 100 клиентов интернет-магазина. Даже если вы выведете все значения на экран, понять общую картину будет сложно.
[18, 22, 25, 19, 24, 35, 42, 28, 31, ...]
Нас интересуют более важные вопросы: какой возраст встречается чаще всего, есть ли перекос в сторону молодых или пожилых клиентов, насколько сильно различаются значения между собой и присутствуют ли в данных необычные наблюдения, которые могут повлиять на результаты анализа. Именно ответы на эти вопросы дает анализ распределения данных.
Зачем нужны гистограммы
Для анализа распределения обычно используют гистограммы. Гистограмма очень похожа на столбчатую диаграмму, но между ними есть важное отличие. В столбчатой диаграмме каждый столбец соответствует отдельной категории. В гистограмме столбцы представляют диапазоны чисел.
Например, возраст клиентов можно разбить на интервалы:
18-25
26-35
36-45
46-55
56-65
После этого можно посчитать количество клиентов в каждом диапазоне. Именно это и делает гистограмма автоматически.
Первая гистограмма
Построим простой пример.
import matplotlib.pyplot as plt
ages = [
18, 19, 20, 22, 24,
25, 27, 28, 30, 31,
32, 35, 36, 38, 40,
42, 45, 47, 50, 55
]
plt.hist(ages)
plt.show()
Функция hist() анализирует данные и автоматически разбивает их на несколько диапазонов. Высота каждого столбца показывает количество значений внутри соответствующего интервала. Таким образом мы можем быстро увидеть, какие значения встречаются чаще остальных.
Добавляем оформление
Как и в случае с другими графиками, полезно добавлять подписи.
import matplotlib.pyplot as plt
ages = [
18, 19, 20, 22, 24,
25, 27, 28, 30, 31,
32, 35, 36, 38, 40,
42, 45, 47, 50, 55
]
plt.hist(ages)
plt.title("Распределение возраста клиентов")
plt.xlabel("Возраст")
plt.ylabel("Количество клиентов")
plt.show()
Теперь график становится гораздо понятнее для любого пользователя.
Управление количеством интервалов
Одним из самых важных параметров гистограммы является bins. Он определяет количество интервалов, на которые будут разбиты данные.
Например:
plt.hist(ages, bins=5)
plt.show()
В этом случае данные будут разделены на пять диапазонов.
Можно увеличить детализацию:
plt.hist(ages, bins=15)
plt.show()
Теперь интервалов станет больше. Чем больше значение bins, тем подробнее отображается распределение. Однако здесь важно соблюдать баланс.
- Слишком маленькое количество интервалов скрывает детали.
- Слишком большое количество интервалов делает график шумным и затрудняет анализ.
На практике аналитики обычно экспериментируют с разными значениями и выбирают наиболее читаемый вариант.
Сравнение разных значений bins
Представьте, что у вас есть данные о зарплатах сотрудников.
- Если использовать всего два интервала, график окажется слишком грубым.
- Если использовать пятьдесят интервалов для небольшой выборки, появится множество столбцов с единичными значениями.
В обоих случаях информация воспринимается хуже. Поэтому выбор количества интервалов является важной частью анализа данных.
Анализ распределения
После построения гистограммы можно переходить к интерпретации результатов. Представим, что мы получили график, на котором большинство значений сосредоточено в центральной части, по краям наблюдений заметно меньше, а сама форма распределения напоминает колокол. В таком случае можно говорить о том, что данные распределены достаточно равномерно вокруг некоторого среднего значения.
Такое распределение часто называют нормальным. Подобное распределение встречается во многих реальных задачах. Например, так часто распределяются рост людей, результаты экзаменов и некоторые финансовые показатели, где большинство значений находится около среднего уровня, а очень маленькие и очень большие значения встречаются значительно реже. Но распределение может выглядеть и иначе.
Иногда большая часть данных находится слева, а длинный хвост тянется вправо. Иногда наоборот. Гистограмма позволяет быстро увидеть подобные особенности.
Поиск выбросов
Еще одна важная задача — обнаружение выбросов. Выбросами называют значения, которые сильно отличаются от основной массы данных.
Предположим, что большинство сотрудников компании получают зарплату от 1000 до 3000 долларов. Но один сотрудник получает 25000 долларов. Такое значение может сильно влиять на анализ.
Рассмотрим пример:
import matplotlib.pyplot as plt
salaries = [
1200, 1500, 1700, 1800,
2000, 2200, 2500, 2700,
3000, 25000
]
plt.hist(salaries)
plt.show()
На графике можно заметить, что одно значение находится далеко от основной группы наблюдений.
Это и есть выброс. Важно понимать, что выброс не обязательно является ошибкой. Иногда он отражает реальные данные. Но аналитик должен обязательно обратить на него внимание.
Кумулятивное распределение
Иногда аналитика интересует не количество наблюдений в каждом интервале, а накопленная доля значений. Для этого используется кумулятивное распределение. Построить его можно с помощью параметра cumulative=True.
import matplotlib.pyplot as plt
ages = [
18, 19, 20, 22, 24,
25, 27, 28, 30, 31,
32, 35, 36, 38, 40,
42, 45, 47, 50, 55
]
plt.hist(
ages,
bins=10,
cumulative=True
)
plt.show()
В отличие от обычной гистограммы, здесь каждый следующий столбец учитывает все предыдущие значения. Получается накопительный график.
Такой подход полезен, когда необходимо понять, какая доля клиентов младше определенного возраста, сколько заказов имеют стоимость ниже заданного порога или какая часть всех наблюдений находится в интересующем нас диапазоне значений.
Настройка цвета
Как и другие графики Matplotlib, гистограммы поддерживают настройку цвета.
plt.hist(
ages,
bins=10,
color="skyblue"
)
plt.show()
Обычно рекомендуется использовать спокойные цвета, которые не отвлекают внимание от самих данных.
Наиболее частые ошибки
- Использование слишком маленького количества bins
Важные особенности распределения могут скрыться. - Использование слишком большого количества bins
График становится шумным и плохо читаемым. - Игнорирование выбросов
Необычные значения могут существенно влиять на результаты анализа. - Отсутствие подписей осей
Становится непонятно, какие данные отображаются. - Попытка использовать гистограмму для категориальных данных
Для таких данных лучше подходят столбчатые диаграммы.
Наиболее частые вопросы
- Чем гистограмма отличается от столбчатой диаграммы?
Гистограмма работает с числовыми диапазонами, а столбчатая диаграмма сравнивает категории. - Какое значение bins использовать?
Универсального ответа нет. Обычно выбирают значение экспериментально. - Всегда ли выброс является ошибкой?
Нет. Иногда выброс отражает реальную особенность данных. - Можно ли строить несколько гистограмм на одном графике?
Да, Matplotlib позволяет это делать. - Зачем нужны накопительные распределения?
Они помогают анализировать накопленную долю значений и определять пороговые показатели.
Итоги
В этом уроке вы познакомились с основным инструментом визуализации числовых данных — гистограммой. Мы разобрали, как строить гистограммы в Matplotlib, управлять количеством интервалов через параметр bins, анализировать распределение данных и находить выбросы.
Кроме того, вы узнали, что такое кумулятивное распределение и в каких задачах оно используется. Полученные знания помогут вам исследовать числовые данные и находить закономерности, которые сложно заметить при просмотре обычных таблиц.
В следующем уроке мы перейдем к визуализации изменений и зависимостей и познакомимся с линейными графиками и диаграммами рассеяния.