Освоение 1 участка Seaborn за раз

Python Vizardry — это серия коротких статей о различных библиотеках визуализации для Python, в которых мы рассматриваем по одному графику за раз. Это краткое руководство, которое поможет вам освоиться с интуицией и кодом. Не стесняйтесь держать эти статьи под рукой в ​​качестве чит-блокнотов для указанных сюжетов.

Сиборн?

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

Функции:

  • Встроенная поддержка визуализации статистических моделей и их неопределенностей
  • Предоставляет функции для визуализации сложных наборов данных, таких как парные диаграммы, которые упрощают изучение взаимосвязей.
  • Расширенные параметры цветовой палитры
  • Поддержка построения графиков в различных контекстах (например, в блокноте Jupyter или на веб-странице).

Установка и импорт Seaborn

#Installing Seaborn
pip install seaborn
#Importing Seaborn
import seaborn as sns
#Importing the library
import seaborn as sns

Загрузка набора данных

Набор данных «миль на галлон» — это встроенный набор данных в библиотеке Seaborn, который содержит информацию о различных моделях автомобилей и их эффективности использования топлива (измеряется в милях на галлон или миль на галлон). В наборе данных также есть данные о происхождении автомобиля, рабочем объеме, количестве цилиндров, лошадиных силах, весе, году выпуска и ускорении для каждого автомобиля. И, очевидно, название машины.

cars = sns.load_dataset('mpg')

Точечная диаграмма

Интуитивно это самый простой для понимания тип построения графика. У нас столько координат, сколько осей. Мы можем изобразить каждое отдельное наблюдение в виде точки в n-мерной декартовой системе координат.

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

В соответствии со стандартной практикой независимая переменная откладывается по оси x (горизонтальная ось), а зависимая переменная — по оси y (вертикальная ось). Так легче определить, что происходит с нашей зависимой переменной. Вы увидите, как.

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

Seaborn.Scatterplot()

Это параметры, которые у нас есть при выполнении диаграммы рассеяния Seaborn.

seaborn.scatterplot(
  data=None, 
  *, 
  x=None, 
  y=None, 
  hue=None, 
  size=None, 
  style=None, 
  palette=None, 
  hue_order=None, 
  hue_norm=None, 
  sizes=None, 
  size_order=None, 
  size_norm=None, 
  markers=True, 
  style_order=None, 
  legend='auto', 
  ax=None, 
  **kwargs
)

Приступаем к построению…

Для нашего первого графика подойдет базовый x-y график «веса» автомобиля и «топливной эффективности».

sns.scatterplot(
    data=cars,
    x='weight',
    y='mpg'
);

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

Давайте повлияем на то, как выглядит этот сюжет. Мы можем изменить маркеры, используя параметр marker. На момент написания этой статьи у вас есть 11 типов маркеров. Пока мы этим занимаемся, давайте также повлияем на размер маркеров, используя параметр s

sns.scatterplot(
    data=cars, 
    x='weight', y='mpg',
    marker='*', s=150
);

Давайте изменим цвет маркеров, используя шестнадцатеричный код, назначенный параметру marker.

sns.scatterplot(
    data=cars, 
    x='weight', y='mpg',
    marker='*', s=150, color='#FF5733'
);

С перекрывающимися маркерами кажется хорошей идеей сделать их менее непрозрачными. Мы можем сделать это с помощью параметра alpha. Возьмем 0,5 альфа или прозрачность 50 %.

sns.scatterplot(
    data=cars, 
    x='weight', y='mpg',
    marker=7, s=100, color='#581845', alpha=0.5
);

Здесь можно использовать параметры matplotlib. Например, мы можем добавить к маркерам edge_color.

sns.scatterplot(
    data=cars, 
    x='weight', y='mpg',
    s=100, alpha=0.4, edgecolor='black'
);

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

Просто чтобы мы не делали сюжет слишком шумным, я собираюсь отфильтровать автомобили с 4, 6 и 8 цилиндрами. Кроме того, добавьте еще одну категориальную переменную, помечающую автомобили старше 1975 года как ретро.

#Filtering to get 4,6,8 cylinder cars
cars = cars.loc[cars.cylinders.isin([4,6,8]), :]

#Labelling model_year
cars['retro'] = cars.model_year < 75

#Plot 
sns.scatterplot(
    data=cars,
    x='weight',
    y='mpg',
    hue='origin',
    style='cylinders',
    size='retro'
);

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

Давайте перейдем к более тонкой цветовой палитре.

sns.scatterplot(
    data=cars,
    x='weight',
    y='mpg',
    hue='origin',
    style='retro',
    size='cylinders',
    palette='pastel'
);

У нас есть возможность определить порядок любой из этих семантик с помощью параметров hue_order, size_order и style_order. Давайте посмотрим на это в действии.

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

sns.scatterplot(
    data=cars, x='weight', y='mpg',
    hue='origin', style='retro', size='cylinders',
    hue_order=['japan', 'europe', 'usa'],
    size_order=[8, 6, 4],
    style_order=[True, False],
    palette='magma'
);

Удачного заговора!

Вот ссылка на официальную документацию seaborn.scatterplot.