Создание визуализаций с помощью Matplotlib и Seaborn

Визуализации с Matplotlib и Seaborn

 

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

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

С другой стороны, Seaborn – это пакет визуализации данных на языке Python, построенный на основе Matplotlib. Он предлагает гораздо более простой высокоуровневый код с различными встроенными темами внутри пакета. Этот пакет отлично подходит, если вы хотите быстро визуализировать данные с красивым видом.

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

 

Визуализация с помощью Matplotlib

 

Как уже упоминалось выше, Matplotlib – это гибкий пакет на языке Python, где мы можем контролировать различные аспекты визуализации. Пакет основан на языке программирования Matlab, но мы применяем его в Python.

Библиотека Matplotlib обычно уже доступна в вашей среде, особенно если вы используете Anaconda. Если нет, вы можете установить их с помощью следующего кода.

pip install matplotlib

 

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

import matplotlib.pyplot as plt

 

Давайте начнем с основной построения с помощью Matplotlib. Для начала я создам пример данных.

import numpy as np

x = np.linspace(0,5,21)
y = x**2

 

С этими данными мы создадим график с помощью пакета Matplotlib.

plt.plot(x, y, 'b')
plt.xlabel('Ось X')
plt.ylabel('Ось Y')
plt.title('Пример графика')

 

  В приведенном выше коде мы передаем данные в функцию matplotlib (x и y) для создания простого графика с синей линией. Кроме того, мы контролируем подписи осей и заголовок с помощью указанного кода.

Давайте попробуем создать несколько графиков matplotlib с помощью функции subplot.

plt.subplot(1,2,1)
plt.plot(x, y, 'b--')
plt.title('Subplot 1')
plt.subplot(1,2,2)
plt.plot(x, y, 'r')
plt.title('Subplot 2')

 

 

В приведенном выше коде мы создаем два графика рядом. Функция subplot управляет позицией графика; например, plt.subplot(1,2,1) означает, что у нас будет два графика в одной строке (первый параметр) и два столбца (второй параметр). Третий параметр позволяет контролировать, на какой график мы сейчас ссылаемся. Так что plt.subplot(1,2,1) означает первый график из графиков, расположенных в одной строке и двух столбцах.

Это основы функций Matplotlib, но если мы хотим больше контроля над визуализацией Matplotlib, нам нужно использовать метод, основанный на объектах (OOM). С помощью OOM мы можем создавать визуализацию непосредственно из объекта фигуры и вызывать любой атрибут из указанного объекта.

Дайте мне пример визуализации с помощью Matplotlib OOM.

#создаем экземпляр фигуры (холст)
fig = plt.figure()

#добавляем оси на холст
ax = fig.add_axes([0.1, 0.1, 0.7, 0.7]) #left, bottom, width, height (диапазон от 0 до 1)

#добавляем график на оси внутри холста
ax.plot(x, y, 'b')
ax.set_xlabel('Метка X')
ax.set_ylabel('Метка Y')
ax.set_title('График с помощью OOM')

 

 

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

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

#создаем экземпляр холста (Canvas)
fig = plt.figure()

#добавляем две оси на холст
ax1 = fig.add_axes([0.1, 0.1, 0.7, 0.7]) 
ax2 = fig.add_axes([0.2, 0.35, 0.2, 0.4]) 

#добавляем график на соответствующие оси на холсте
ax1.plot(x, y, 'b')
ax1.set_xlabel('Метка X оси 1')
ax1.set_ylabel('Метка Y оси 1')
ax1.set_title('График с OOM, ось 1')

ax2.plot(x, y, 'r--')
ax2.set_xlabel('Метка X оси 2')
ax2.set_ylabel('Метка Y оси 2')
ax2.set_title('График с OOM, ось 2')

 

 

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

Также можно автоматически создать фигуру и объекты осей с помощью функции subplot.

fig, ax = plt.subplots(nrows = 1, ncols =2)

ax[0].plot(x, y, 'b--')
ax[0].set_xlabel('Метка X')
ax[0].set_ylabel('Метка Y')
ax[0].set_title('График с OOM subplot 1')

 

 

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

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

Поскольку subplots создает список объектов осей, вы можете использовать их аналогично коду ниже.

fig, axes = plt.subplots(nrows = 1, ncols =2)

for ax in axes:

    ax.plot(x, y, 'b--')
    ax.set_xlabel('Метка X')
    ax.set_ylabel('Метка Y')
    ax.set_title('График с OOM')

plt.tight_layout()

 

 

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

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

fig = plt.figure(figsize = (8,4), dpi =100)

 

   

Параметр figsize принимает кортеж из двух чисел (ширина, высота), где результат похож на график выше.

Затем давайте попробуем добавить легенду к графику.

fig = plt.figure(figsize = (8,4), dpi =100)

ax = fig.add_axes([0.1, 0.1, 0.7, 0.7])

ax.plot(x, y, 'b', label = 'Первая линия')
ax.plot(x, y/2, 'r', label = 'Вторая линия')
ax.set_xlabel('Метка X')
ax.set_ylabel('Метка Y')
ax.set_title('График с OOM и легендой')
plt.legend()

 

 

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

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

fig.savefig('visualization.jpg')

 

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

Точечный график

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

plt.scatter(x,y)

 

 

Гистограмма

Гистограмма визуализирует распределение данных, представленное в интервалах (бинах).

plt.hist(y, bins = 5)

 

 

Ящик с усами

Ящик с усами – это техника визуализации, представляющая распределение данных в квартилях.

plt.boxplot(x)

 

 

Круговая диаграмма

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

freq = [2,4,1,3]
fruit = ['Apple', 'Banana', 'Grape', 'Pear']
plt.pie(freq, labels = fruit)

 

 

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

 

Визуализация с помощью Seaborn

 

Seaborn – это пакет для статистической визуализации на языке Python, построенный на базе Matplotlib. Особенностью Seaborn является то, что он упрощает создание визуализации с отличным стилем. Пакет также работает с Matplotlib, так как многие API Seaborn связаны с Matplotlib.

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

pip install seaborn

 

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

import seaborn as sns

tips = sns.load_dataset('tips')
tips.head()

 

 

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

Графики распределения

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

sns.displot(data = tips, x = 'tip')

 

 

По умолчанию функция displot производит гистограмму. Если мы хотим сгладить график, мы можем использовать параметр KDE.

sns.displot(data = tips, x = 'tip', kind = 'kde')

 

 

График распределения также можно разделить в соответствии с категориальными значениями в DataFrame с использованием параметра hue.

sns.displot(data = tips, x = 'tip', kind = 'kde', hue = 'smoker')

 

 

Мы даже можем разделить график еще дальше с помощью параметра row или col. С помощью этого параметра мы получаем несколько графиков, разделенных комбинацией категориальных значений.

sns.displot(data = tips, x = 'tip', kind = 'kde', hue = 'smoker', row = 'time', col = 'sex')

 

 

Еще один способ отображения распределения данных – использование ящиков с усами (boxplot). Seaborn может легко облегчить визуализацию с помощью следующего кода.

sns.boxplot(data = tips, x = 'time', y = 'tip')

 

 

С помощью графика-скрипки (violin plot) мы можем отобразить распределение данных, объединяющее boxplot с ядерной оценкой плотности (KDE).

 

Наконец, мы можем показать точки данных на графике, объединив графики-скрипки и графики-рои.

sns.violinplot(data = tips, x = 'time', y = 'tip')
sns.swarmplot(data = tips, x = 'time', y = 'tip', palette = 'Set1')

 

 

Категориальные графики

Категориальный график – это несколько различных API Seaborn, которые применяются для создания визуализации с категориальными данными. Давайте рассмотрим некоторые доступные графики. 

Сначала попробуем создать график количества.

sns.countplot(data = tips, x = 'time')

 

 

График количества покажет столбец с частотой категориальных значений. Если мы хотим показать число количества на графике, нам нужно объединить функцию Matplotlib в API Seaborn.

p = sns.countplot(data = tips, x = 'time')
p.bar_label(p.containers[0])

 

 

Мы можем расширить график с помощью параметра hue и показать значения частоты с помощью следующего кода.

p = sns.countplot(data = tips, x = 'time', hue = 'sex')
for container in p.containers:
    ax.bar_label(container)

 

 

Затем мы попытаемся разработать график-столбцы (barplot). График-столбцы – это категориальный график, который показывает агрегацию данных с показателем ошибки. 

sns.barplot(data = tips, x = 'time', y = 'tip')

 

 

График-столбцы использует комбинацию категориальных и числовых признаков для предоставления статистики агрегации. По умолчанию график-столбцы использует функцию усреднения с показателем ошибки интервала доверия 95%. 

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

import numpy as np
sns.barplot(data = tips, x = 'time', y = 'tip', estimator = np.median)

 

 

Графики отношений

График отношений – это метод визуализации, который показывает взаимосвязь между признаками. Он используется в основном для выявления каких-либо закономерностей, существующих в наборе данных.

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

sns.scatterplot(data = tips, x = 'tip', y = 'total_bill')

 

 

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

sns.jointplot(data = tips, x = 'tip', y = 'total_bill')

 

 

Наконец, мы можем автоматически отображать попарные отношения между признаками в DataFrame с помощью pairplot.

sns.pairplot(data = tips)

 

 

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

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

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

tips.corr()

 

 

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

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

 

 

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

sns.clustermap(tips.pivot_table(values = 'tip', index = 'size', columns = 'day').fillna(0))

 

Заключение

 

Визуализация данных является важной частью мира данных, поскольку она помогает аудитории быстро понять, что происходит с нашими данными. Стандартными пакетами Python для визуализации данных являются Matplotlib и Seaborn. В этой статье мы изучили основное использование этих пакетов и представили несколько визуализаций, которые могут помочь в нашей работе.     Cornellius Yudha Wijaya  – это помощник менеджера по науке о данных и писатель. Работая на полную ставку в Allianz Indonesia, он любит делиться советами по использованию Python и данных в социальных сетях и медиа.