Рубрики
Без рубрики

Библиотека Seaborn для визуализации данных на Python: Часть 2

Автор оригинала: Usman Malik.

В предыдущей статье Seaborn Library for Data Visualization in Python: Part 1 мы рассмотрели , как библиотека Seaborn используется для построения распределенных и категориальных графиков. В этой статье мы продолжим наше обсуждение и рассмотрим некоторые другие функции, предлагаемые Seaborn для рисования различных типов графиков. Мы начнем наше обсуждение с матричных графиков.

Матричные графики

Матричные графики-это тип графиков, которые показывают данные в виде строк и столбцов. Тепловые карты являются основными примерами матричных графиков.

Тепловые карты

Тепловые карты обычно используются для построения корреляции между числовыми столбцами в виде матрицы. Здесь важно отметить, что для построения матричных графиков необходимо иметь значимую информацию как о строках, так и о столбцах. Продолжая тему из предыдущей статьи, давайте построим первые пять строк набора данных Titanic, чтобы увидеть, содержат ли как строки, так и заголовки столбцов значимую информацию. Выполните следующий сценарий:

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
import seaborn as sns

dataset = sns.load_dataset('titanic')

dataset.head()

В выводе вы увидите следующий результат:

Из выходных данных вы можете видеть, что заголовки столбцов содержат полезную информацию, такую как выжившие пассажиры, их возраст, стоимость проезда и т. Д. Однако заголовки строк содержат только индексы 0, 1, 2 и т. Д. Чтобы построить матричные графики, нам нужна полезная информация как о столбцах, так и о заголовках строк. Один из способов сделать это-вызвать метод corr() в наборе данных. Функция corr() возвращает корреляцию между всеми числовыми столбцами набора данных. Выполните следующий сценарий:

dataset.corr()

В выходных данных вы увидите, что как столбцы, так и строки имеют значимую информацию заголовка, как показано ниже:

Теперь, чтобы создать тепловую карту с этими значениями корреляции, вам нужно вызвать функцию heatmap() и передать ей свой корреляционный фрейм данных. Посмотрите на следующий сценарий:

corr = dataset.corr()
sns.heatmap(corr)

Вывод выглядит следующим образом:

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

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

corr = dataset.corr()
sns.heatmap(corr, annot=True)

Выход:

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

corr = dataset.corr()
sns.heatmap(corr, cmap='winter')

Вывод выглядит следующим образом:

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

Выполните следующий сценарий для импорта набора данных и просмотра первых пяти строк набора данных:

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
import seaborn as sns

dataset = sns.load_dataset('flights')

dataset.head()

Выход:

Теперь, используя функцию pivot_table , мы можем создать тепловую карту, которая отображает количество пассажиров, путешествовавших в определенный месяц определенного года. Для этого мы передадим month в качестве значения параметра index . Атрибут index соответствует строкам. Далее нам нужно передать year в качестве значения для параметра column . И, наконец, для параметра values мы передадим столбец passengers . Выполните следующий сценарий:

data = dataset.pivot_table(index='month', columns='year', values='passengers')
sns.heatmap(data)

Вывод выглядит следующим образом:

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

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

data = dataset.pivot_table(index='month', columns='year', values='passengers' )
sns.heatmap(data, linecolor='blue', linewidth=1)

В приведенном выше скрипте мы передали “синий” в качестве значения параметра line color , в то время как параметр linewidth имеет значение 1. На выходе вы увидите синюю границу вокруг каждой ячейки:

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

Карта кластера

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

Давайте построим карту кластера для количества пассажиров, которые путешествовали в определенный месяц определенного года. Выполните следующий сценарий:

data = dataset.pivot_table(index='month', columns='year', values='passengers')
sns.clustermap(data)

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

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

На этом мы завершаем наше обсуждение матричных графиков. В следующем разделе мы начнем обсуждение грид-возможностей библиотеки Seaborn.

Сети Сиборна

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

Парная сетка

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

Давайте пересмотрим график пар здесь, прежде чем мы сможем перейти к сетке пар. Набор данных, который мы будем использовать для раздела парной сетки, – это набор данных “iris”, который загружается по умолчанию при загрузке библиотеки seaborn . Выполните следующий сценарий для загрузки набора данных iris:

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
import seaborn as sns

dataset = sns.load_dataset('iris')

dataset.head()

Первые пять строк набора данных iris выглядят следующим образом:

Теперь давайте нарисуем парный график на наборе данных iris. Выполните следующий сценарий:

sns.pairplot(dataset)

Снимок выхода выглядит следующим образом:

Теперь давайте построим парную сетку и посмотрим разницу между парной сеткой и парной сеткой. Чтобы создать парную сетку, вам просто нужно передать набор данных в функцию Pair Grid , как показано ниже:

sns.PairGrid(dataset)

Выход:

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

Далее вам нужно вызвать функцию map для объекта, возвращаемого функцией pair grid, и передать ей тип графика, который вы хотите нарисовать на сетках. Давайте построим точечную диаграмму, используя сетку пар.

grids = sns.PairGrid(dataset)
grids.map(plt.scatter)

Вывод выглядит следующим образом:

Вы можете увидеть точечные диаграммы для всех комбинаций числовых столбцов в наборе данных “iris”.

Вы также можете построить различные типы графиков на одной и той же сетке пар. Например, если вы хотите построить график “распределения” по диагонали, “kdeplot” по верхней половине диагонали и “scatter” по нижней части диагонали, вы можете использовать функции map_diagonal , map_upper и map_lower соответственно. Тип графика, который будет нарисован, передается в качестве параметра этим функциям. Взгляните на следующий сценарий:

grids = sns.PairGrid(dataset)
grids.map_diag(sns.distplot)
grids.map_upper(sns.kdeplot)
grids.map_lower(plt.scatter)

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

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

Фасетные Сетки

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

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

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
import seaborn as sns

dataset = sns.load_dataset('titanic')

Для рисования facetgrid используется функция FacetGrid () . Первый параметр функции-это набор данных, второй параметр col определяет объект для построения на столбцах, а параметр row определяет объект на строках. Функция FacetGrid() возвращает объект. Как и парная сетка, вы можете использовать функцию map , чтобы указать тип участка, который вы хотите нарисовать.

Выполните следующий сценарий:

grid = sns.FacetGrid(data=dataset, col='alive', row='sex')
grid.map(sns.distplot, 'age')

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

На выходе вы можете увидеть четыре графика. По одному на каждую комбинацию пола и выживаемости пассажира. Столбцы содержат информацию о выживании, в то время как строки содержат информацию о поле, как указано функцией FacetGrid () .

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

В дополнение к распределительным диаграммам для одного объекта мы также можем построить точечные диаграммы, включающие два объекта на сетке фасетов.

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

grid = sns.FacetGrid(data= dataset, col= 'alive', row = 'sex')
grid.map(plt.scatter, 'age', 'fare')

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

Регрессионные графики

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

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

Набор данных, который мы будем использовать для этого раздела, – это набор данных “алмазы”, который по умолчанию загружается вместе с библиотекой seaborn . Выполните следующий сценарий для загрузки набора данных:

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
import seaborn as sns

dataset = sns.load_dataset('diamonds')

dataset.head()

Набор данных выглядит следующим образом:

Набор данных содержит различные характеристики алмаза, такие как вес в каратах, цвет, чистота, цена и т. Д.

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

Для построения линейной модели используется функция lm plot () . Первый параметр-это объект, который вы хотите построить на оси x, а вторая переменная-это объект, который вы хотите построить на оси y. Последний параметр-это набор данных. Выполните следующий сценарий:

sns.lmplot(x='carat', y='price', data=dataset)

Вывод выглядит следующим образом:

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

sns.lmplot(x='carat', y='price', data=dataset, hue='cut')

Вывод выглядит следующим образом:

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

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

sns.lmplot(x='carat', y='price', data=dataset, col='cut')

В выходных данных вы увидите отдельный столбец для каждого значения в столбце cut набора данных diamonds, как показано ниже:

Вы также можете изменить размер и соотношение сторон графиков с помощью параметров aspect и size . Взгляните на следующий сценарий:

sns.lmplot(x='carat', y = 'price', data= dataset, col = 'cut', aspect = 0.5, size = 8 )

Параметр aspect определяет соотношение сторон между шириной и высотой. Соотношение сторон 0,5 означает, что ширина равна половине высоты, как показано на выходных данных.

Вы можете видеть, что размер сюжета изменился, размер шрифта по-прежнему очень мал. В следующем разделе мы рассмотрим, как управлять шрифтами и стилями сюжетов Seaborn.

Стиль сюжета

Библиотека Seaborn поставляется с различными вариантами оформления. В этом разделе мы рассмотрим некоторые из них.

Установить Стиль

Функция set_style() используется для установки стиля сетки. Вы можете передать dark grid , white grid , dark , white и ticks в качестве параметров функции set_style .

Для этого раздела мы снова будем использовать “титанический набор данных”. Выполните следующий скрипт, чтобы увидеть dark grid style.

sns.set_style('darkgrid')
sns.distplot(dataset['fare'])

Вывод выглядит следующим образом;

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

sns.set_style('whitegrid')
sns.distplot(dataset['fare'])

Вывод выглядит следующим образом:

Теперь вы можете видеть, что у нас все еще есть сетки на заднем плане, но темно-серый фон не виден. Я бы посоветовал вам попробовать поиграть с остальными вариантами и посмотреть, какой стиль вам подходит.

Изменить Размер Фигуры

Поскольку Seaborn использует функции Matplotlib за кулисами, вы можете использовать пакет Matplotlib pyplot для изменения размера рисунка, как показано ниже:

plt.figure(figsize=(8,4))
sns.distplot(dataset['fare'])

В приведенном выше сценарии мы устанавливаем ширину и высоту участка на 8 и 4 дюйма соответственно. Вывод приведенного выше скрипта выглядит следующим образом:

Установить контекст

Помимо блокнота, вам может понадобиться создать сюжеты для плакатов. Для этого вы можете использовать функцию set_context() и передать ее poster в качестве единственного атрибута, как показано ниже:

sns.set_context('poster')
sns.distplot(dataset['fare'])

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

Вывод

Seaborn Library – это продвинутая библиотека Python для визуализации данных. Эта статья является частью 2 серии статей о Seaborn для визуализации данных в Python. В этой статье мы видели, как построить регрессионные и матричные графики в Seaborn. Мы также видели, как изменять стили графиков и использовать сеточные функции для управления подзаголовками. В следующей статье мы увидим, как встроенные возможности библиотеки Python Pandas могут быть использованы для визуализации данных.