Введение в seaborn

Введение в seaborn

karpov.courses

Seaborn — библиотека для визуализации данных в Python, которая тесно интегрируется со структурами данных из pandas. Seaborn является высокоуровневой надстройкой над библиотекой matplotlib и позволяет строить разнообразные статистические графики с меньшими усилиями и за меньшее количество строк кода. В этом и заключается ключевое преимущество seaborn — её интерфейс позволяет сосредоточиться на том, что мы хотим визуализировать на графиках, а не на том, как их строить. Это отлично согласуется с философией Python!

Начнём с установки, это можно сделать через pip или conda, используя команды в терминале:

pip install seaborn

Также установить модуль можно прямо в jupyter-ноутбуке, добавив символ «!» к команде терминала:

!pip install seaborn

Теперь импортируем библиотеку, используя общепринятое сокращение sns:

import seaborn as sns

Для примеров визуализации будем использовать датасеты penguins, titanic и diamonds, которые уже есть внутри seaborn. Импортировать их можно так:

penguins = sns.load_dataset('penguins')
penguins.head()
titanic = sns.load_dataset('titanic')
titanic.head()
diamonds = sns.load_dataset('diamonds')
diamonds.head()


Статистическая визуализация

seaborn.relplot() — метод, который позволяет строить графики для визуализации отношений между двумя переменными. Параметр kind, отвечающий за вид графика, по умолчанию имеет значение «scatter». Если его не изменить, то на выходе получится обычный scatterplot, или диаграмма рассеяния.

Визуализируем зависимость длины клюва от массы пингвина:

sns.relplot(data=penguins, x="bill_length_mm", y="body_mass_g")

Если мы установим параметр kind равным «line», то получим линейную диаграмму. Если передать в параметр «hue» категориальную переменную, то график разобьётся на несколько линий, которые будут окрашены в разные цвета в соответствии с принадлежностью к определённой категории.

Визуализируем зависимость длины крыльев от массы и добавим разбиение по полу пингвинов:

sns.relplot(data=penguins, x="flipper_length_mm", y="body_mass_g", kind="line", hue='sex')


Визуализация распределений

sns.displot() — вид графиков, отражающих распределение переменной.

По умолчанию параметр kind имеет значение «hist», поэтому получаем диаграмму распределения возраста пассажиров Титаника с разбиением на классы кают:

sns.displot(titanic, x="age", hue="class")

Если мы установим kind="kde", то получим кривую плотности распределения вероятностей, основанной на методе ядерной оценки плотности. По горизонтальной оси расположены значения переменной, а по вертикальной оси — оценка плотности распределения.

Посмотрим на график KDE цены бриллиантов с разбивкой по качеству их огранки:

sns.displot(diamonds, x="price", hue="cut", kind="kde")

Если мы передадим в sns.displot() сразу две переменные, то получим двумерную гистограмму или, другими словами, heatmap.

Тепловая карта соотношения длины и глубины клюва пингвинов:

sns.displot(penguins, x="bill_length_mm", y="bill_depth_mm")

sns.jointplot — очень красивый вариант визуализации, который есть только в библиотеке seaborn. Этот график отображает зависимости между двумя переменными с двумерными и одномерными визуализациями. Если мы не будем задавать аргумент kind, то получим диаграмму рассеяния между двумя переменными и отдельные кривые плотности (основанные на ядерной оценке) по осям x и y. На jointplot также можно добавить разбивку по категориям, указав параметр hue.

Корреляция длины и глубины клюва пингвинов с разбивкой по их видам:

sns.jointplot(
data=penguins, x="bill_length_mm", y="bill_depth_mm", hue="species"
)


Визуализация категориальных данных

sns.catplot() - метод, позволяющий визуализировать данные с разбивкой по категориям. Catplot может пригодиться, если есть необходимость отразить на одном графике зависимость непрерывной переменной сразу от нескольких категориальных переменных. По умолчанию получаем scatterplot — распределение массы пингвинов в зависимости от их вида и острова проживания:

sns.catplot(data=penguins, x="island", y="body_mass_g", hue="species")

Если установим kind="box", то получим знакомый нам boxplot. Если ящик с усами получается очень узким, можно отфильтровать выбросы, чтобы график получился более наглядным.

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

sns.catplot(
data=titanic[titanic['fare'] < 120], x="survived", y="fare", kind="box"
)

Ещё один очень красивый график — violin plot (скрипичная диаграмма). Violin plot — это небольшие boxplot с добавлением по бокам кривых плотности ядра с каждой стороны.

Seaborn позволяет строить её очень просто, используя метод sns.catplot() и параметр kind="violin".

Построим скрипичный график распределения длины клюва пингвинов с разбивкой по виду и полу:

sns.catplot(
data=penguins, x="sex", y="bill_length_mm", hue="species", kind="violin", height=6
)

Чтобы построить обычный countplot — столбчатую диаграмму, отражающую количество объектов в каждой категории — нужно установить параметр kind="count".

Количество пингвинов на разных островах:

sns.catplot(data=penguins, x="island", kind="count")

Для построения barplot нужно установить параметр kind="bar". Столбцы на графике пропорциональны величинам, которые они отображают.

Посмотрим на зависимость цвета и веса бриллиантов в каратах:

sns.catplot(data=diamonds, x="color", y="carat", kind="bar")

Последний вид диаграммы, которую позволяет строить sns.catplot(), — это pointplot. Pointplot похож на barplot, если мысленно дорисовать столбцы до каждой точки, но вместо столбцов график отображает точечную оценку категорий и строит доверительный интервал.

Для его построения достаточно передать в sns.catplot() аргумент kind="point".

Построим зависимость выживаемости пассажиров «Титаника» от их пола и дополнительно разобьём график по полу пассажиров и классам кают:

sns.catplot(data=titanic, x="sex", y="survived", hue="class", kind="point")



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

Ещё больше красивых графиков и вариантов их построения вы можете найти в документации seaborn.





































Report Page