Seaborn kdeplot – Создание графиков оценки плотности ядра

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

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

  • Как работает функция Seaborn kdeplot()

  • Как настроить графики Seaborn KDE, используя цвет, сглаживание и различные интервалы

  • Как визуализировать две непрерывные переменные с помощью функции Seaborn kdeplot

Оглавление

Понимание функции Seaborn kdeplot

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

# Понимание функции kdeplot() в Seaborn
seaborn.kdeplot(data=None, *, x=None, y=None, hue=None, weights=None, palette=None, hue_order=None, hue_norm=None, color=None, fill=None, multiple='layer', common_norm=True, common_grid=False, cumulative=False, bw_method='scott', bw_adjust=1, warn_singular=True, log_scale=None, levels=10, thresh=0.05, gridsize=200, cut=3, clip=None, legend=True, cbar=False, cbar_ax=None, cbar_kws=None, ax=None, **kwargs)

Не волнуйтесь - вам не нужно будет знать все эти параметры. Фактически, мы даже не будем рассматривать все эти параметры в рамках этого руководства. Однако мы исследуем самые важные из них, включая следующие ниже:

  • data= предоставляет данные для построения графика через Pandas DataFrame

  • x= и y= предоставляют переменные для отображения на осях x и y соответственно

  • hue= добавляет дополнительную переменную к графику через цветовое сопоставление

  • multiple= указывает, как обрабатывать сопоставление нескольких переменных, включая суммирование или создание 100%-ных диапазонов.

Теперь, когда у вас есть хорошее понимание некоторых наиболее важных параметров, давайте перейдем к созданию графиков KDE в Seaborn.

Создание графика Seaborn KDE с помощью kdeplot

Для создания оценки плотности распределения (kernel density estimate) с помощью Seaborn, вам нужно лишь предоставить DataFrame через аргумент data= и указать название колонки через аргумент x=. После этого Seaborn автоматически создаст оценку плотности распределения и отобразит её на графике. Давайте посмотрим, как это выглядит:

# Создание графика KDE в Seaborn
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('penguins')

sns.kdeplot(data=df, x='bill_depth_mm')
plt.show()

В кодовом блоке выше мы указали Seaborn построить KDE график для колонки 'bill_depth_mm' нашего DataFrame. Это приводит к изображению ниже, представляющему оценочную функцию:

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

Создание горизонтального графика KDE в Seaborn

В приведенном выше примере наш KDE график был нарисован вертикально. Seaborn также позволяет создать горизонтальный график оценки плотности ядра, просто поместив столбец, который вы хотите построить, в параметр y=, вместо параметра x=

Давайте посмотрим, как можно создать горизонтальный график KDE в Seaborn:

# Создание горизонтального графика KDE в Seaborn
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('penguins')

sns.kdeplot(data=df, y='bill_depth_mm')
plt.show()

Изменяя параметр на y=, Seaborn создает тот же график, что и в предыдущем разделе, и отображает его горизонтально.

По умолчанию Seaborn использует автоматическое масштабирование для создания гладкой кривой. В следующем разделе вы научитесь настраивать сглаживание.

Изменение ширины интервала в графиках Seaborn KDE

Seaborn позволяет настраивать сглаживание (или ширину бина) для оценки плотности распределения с помощью параметра bw_adjust=. Чем больше значение, тем гладче кривая. Мы можем добавить больше деталей к кривой, уменьшив значение.

# Использование меньшей степени сглаживания для графиков
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('penguins')

sns.kdeplot(data=df, x='bill_depth_mm', bw_adjust=0.3)
plt.show()

В приведенном выше блоке кода мы использовали параметр bw_adjust=0.3. Это уменьшает сглаживание и добавляет больше деталей в колебания базовой функции, как показано ниже:

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

Предотвращение расширения прошлых экстремальных точек на графиках Seaborn KDE

Для создания сглаженной линии Seaborn может потребоваться расширить график функции за пределы крайних точек. Этот коэффициент умножается на ширину сглаживания. Однако мы можем обрезать кривую по границам данных, установив параметр cut= равным 0.

Давайте посмотрим, как это выглядит на Python:

# Предотвращение обрезки крайних точек
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('penguins')

sns.kdeplot(data=df, x='bill_depth_mm', cut=0, bw_adjust=3)
plt.show()

В приведенном выше примере мы добавили к нашей функции параметр cut=0. Это привело к обрезке функции на крайних точках (то есть они резко заканчиваются вдоль оси x). Это может гарантировать, что будет меньше предположений относительно распределения базовых данных.

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

Добавление цветов в графики Seaborn KDE

До сих пор мы создавали графики плотности распределения Seaborn, которые отображают одну оценку. Однако мы можем добавить дополнительные детали, используя цветовую семантику, применив параметр hue=. Мы можем передать дополнительный столбец DataFrame Pandas в параметр hue=

# Добавление цвета для дополнительных подкатегорий
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('penguins')

sns.kdeplot(data=df, x='bill_depth_mm', hue='species')
plt.show()

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

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

Объединение данных с цветом на графиках Seaborn KDE

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

Для этого вы можете передать multiple='stack', что позволит складывать отдельные оценки друг на друга. Давайте посмотрим, как это выглядит:

# Наложение для дополнительных подкатегорий
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('penguins')

sns.kdeplot(data=df, x='bill_depth_mm', hue='species', multiple='stack')
plt.show()

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

Мы можем пойти еще дальше, наложив цвета друг на друга в диаграмме до 100%, о чем вы узнаете в следующем разделе.

Увеличение цвета до 100% в графиках Seaborn KDE

Seaborn позволяет даже накладывать оценку плотности до 100%. Это дает вам четкое представление о том, как каждая категория представлена в каждой точке распределения. Для этого можно использовать multiple='fill', что заполнит весь график.

Давайте посмотрим, как это выглядит на Python:

# Наложение на 100% для дополнительных подкатегорий
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('penguins')

sns.kdeplot(data=df, x='bill_depth_mm', hue='species', multiple='fill')
plt.show()

При изменении параметра multiple= на 'fill', вся высота графика используется. Это позволяет увидеть, насколько каждый элемент представлен в распределении.

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

Построение непрерывных переменных в виде графика KDE в Seaborn

Seaborn также упрощает добавление непрерывной переменной к семантике hue=, что означает, что каждое значение будет представлено шкалой цветов.

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

# Построение непрерывных KDE-графиков
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('diamonds')
df['x'] = df['x'].astype('int')
sns.kdeplot(data=df, x='price', hue='x', log_scale=True)
plt.show()

В приведенном выше блоке кода мы изменили одну из переменных на целое число, чтобы наша визуализация выглядела чище. Затем мы передали эту переменную в параметр hue=. По мере увеличения значения 'x', цвет становится темнее.

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

Расчет совокупных графиков KDE в Seaborn

Seaborn упрощает построение кумулятивного графика оценки плотности ядра, используя параметр cumulative=. Создание кумулятивного графика позволяет вам увидеть, какие значения представлены в распределении, что означает возможность лучше понять тенденции в данных.

Давайте посмотрим, как мы можем изменить параметр cumulative=, чтобы создать накопительный график KDE:

# Вычисление накопленных KDE-графиков
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('penguins')

sns.kdeplot(data=df, x='bill_depth_mm', cumulative=True)
plt.show()

При использовании параметра cumulative=True, можно создать накопительный график плотности распределения (KDE), как показано ниже:

Мы можем расширить это еще дальше, используя аргумент hue=. Чтобы значения каждого распределились до 100%, нам также потребуется установить common_norm=False. Без этого значения будут распределяться только до общего их распределения.

# Вычисление накопленных KDE-графиков с несколькими категориями
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('penguins')

sns.kdeplot(data=df, x='bill_depth_mm', cumulative=True, hue='species', common_norm=False)
plt.show()

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

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

Использование логарифмической шкалы на графике Seaborn KDE

При работе с большими объемами данных может быть полезно отображать данные, используя логарифмическую шкалу. Чтобы создать плотность распределения вероятности в Seaborn с использованием логарифмической шкалы, вы можете указать log_scale=True. По умолчанию этот параметр установлен в значение False, что означает, что данные отображаются без использования логарифмической шкалы.

Давайте посмотрим, как мы можем это сделать, используя набор данных 'diamonds', который включен в Seaborn:

# Использование логарифмической шкалы для значений
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('diamonds')

sns.kdeplot(data=df, x='price', log_scale=True)
plt.show()

Запустите приведенный выше код без использования аргумента log_scale=True и посмотрите, как визуализация отличается от показанной ниже. Когда это уместно, логарифмические шкалы могут помочь вам лучше понять распределение набора данных.

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

Построение двумерных распределений на графиках Seaborn KDE

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

Давайте посмотрим, как мы можем это сделать на Python, передав две переменные:

# Построить двумерное распределение
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('penguins')

sns.kdeplot(data=df, x='bill_depth_mm', y='bill_length_mm')
plt.show()

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

Мы можем дополнительно расширить этот график, используя семантику цвета с помощью параметра hue=

Построение двумерных распределений в графиках Seaborn KDE с цветом

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

Давайте посмотрим, как мы можем добавить цвет в наш двумерный график плотности ядра (KDE):

# Построить двумерное распределение с цветом
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('penguins')

sns.kdeplot(data=df, x='bill_depth_mm', y='bill_length_mm', hue='species')
plt.show()

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

It can still be difficult to see where data are clustered. Because of this, we can fill our bivariate KDE plot to see where data are clustered by passing in fill=True.

Иногда может быть сложно увидеть, где данные сгруппированы. Поэтому мы можем использовать заливку нашего двухмерного графика плотности распределения, чтобы лучше увидеть группировку данных, используя параметр fill=True.

# Построить двумерное распределение с заполнением цветом
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('penguins')

sns.kdeplot(data=df, x='bill_depth_mm', y='bill_length_mm', hue='species', fill=True)
plt.show()

Лично я считаю это наиболее интуитивно понятным для понимания бивариатных графиков плотности ядра при добавлении цветовой семантики.

Одна вещь, которую нужно помнить, это то, что некоторые данные теперь скрыты.

Заключение

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

Впервые вы узнали, что предлагает функция Seaborn kdeplot с точки зрения параметров и аргументов по умолчанию. Затем вы научились создавать простые графики KDE. Далее вы использовали полученные знания для создания более сложных и информативных графиков KDE, добавляя цвета, изменяя масштабы и т. д. Наконец, вы научились создавать двумерные графики KDE.

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

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

Last updated