September 25, 2021

Красота родом из морских глубин

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

Подключим нужные библиотеки и загрузим набор данных с помощью библиотеки Scikit-learn:

from sklearn.datasets import load_iris
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
np.random.seed(0)
data = load_iris()
X = pd.DataFrame(data.data, columns=data.feature_names)
y = pd.Series(data.target, name='target').astype('str').\
            replace({str(it):data.target_names[it] for it in data.target})
df = X.join(y)
df

Распределения значений в столбцах

Дискретная величина

Если распределение дискретное, то удобно использовать функцию countplot:

sns.countplot(x=df['target'])

Когда значения переменной и их частоты находятся в разных столбцах, используйте barplot:

df_bar = df.target.value_counts().reset_index()
df_bar
sns.barplot(data = df_bar, y = 'index', x = 'target', palette='inferno')

Обратите внимание, что в этой версии в функцию передаются названия столбцов датафрейма (а не колонки) и он сам в параметре data, что также допустимо.

Непрерывная величина

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

sns.displot(df['sepal length (cm)'], kind='hist')
sns.displot(df['sepal length (cm)'], kind='kde')
sns.displot(df['sepal length (cm)'], kind='ecdf')

Обратите внимание, что вывод displot регулируется параметром kind. Для данных типов графиков существуют собственные функции с "говорящими" названиями histplot, kdeplot, ecdfplot.

А так можно на одном графике получить и гистограмму, и плотность (kde=True):

sns.displot(df['sepal length (cm)'], kde=True)

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

sns.displot(data=df, y='sepal length (cm)', kind='hist', hue='target')

Здесь столбцы перекрываются, что немного осложняет анализ. Однако видно, что значения 'sepal length (cm)' для setosa отличаются от других цветков.

Точечное распределение

Диаграммы рассеяния строятся, используя scatterplot:

sns.scatterplot(data=df,x='sepal width (cm)', y='sepal length (cm)', hue='target')

Обратите внимание, что здесь подмеченная выше тенденция так же видна.

Попарное распределение

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

g = sns.pairplot(df, hue = 'target')
g.fig.set_figwidth(10)
g.fig.set_figheight(6)

Обратите внимание на регулировку размера графика.

Линейный график с регрессией

С помощью Seaborn можно строить график зависимости y от x и одновременно регрессионную прямую с помощью regplot:

x = np.random.uniform(100, size=100)
y = np.power(x, 0.5)
sns.regplot(x=x, y=y)

Простой график зависимости

Самый простой график для связи точек с заданными координатами задается функцией lineplot:

sns.lineplot(x=x, y=y)