Сюжет для скрипки Seaborn - Учебное пособие и примеры

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

Вступление

Seaborn - одна из наиболее широко используемых библиотек визуализации данных в Python как расширение Matplotlib . Он предлагает простой, интуитивно понятный, но настраиваемый API для визуализации данных.

В этом уроке мы рассмотрим, как построить сценарий скрипки в Seaborn .

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

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

Импорт данных

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

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

Графики скрипки по сути показывают ту же сводную статистику, что и коробчатые диаграммы, но они также включают дополнительную информацию. Форма «скрипки» на графике скрипки - это оценка плотности ядра, которая представляет форму / распределение данных.

В этом руководстве мы будем работать с набором данных Gapminder.

Начнем с импорта Seaborn, модуля PyPlot из Matplotlib и Pandas:

 import pandas as pd 
 import seaborn as sns 
 import matplotlib.pyplot as plt 

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

Мы также проверим, нет ли недостающих данных:

 dataframe = pd.read_csv("gapminder_full.csv", error_bad_lines=False, encoding="ISO-8859-1") 
 print(dataframe.head()) 
 print(dataframe.isnull().values.any()) 

Это приводит к:

 country year population continent life_exp gdp_cap 
 0 Afghanistan 1952 8425333 Asia 28.801 779.445314 
 1 Afghanistan 1957 9240934 Asia 30.332 820.853030 
 2 Afghanistan 1962 10267083 Asia 31.997 853.100710 
 3 Afghanistan 1967 11537966 Asia 34.020 836.197138 
 4 Afghanistan 1972 13079460 Asia 36.088 739.981106 

Мы выберем наши непрерывные функции и сохраним их как переменные для передачи функциям Seaborn:

 country = dataframe.country 
 continent = dataframe.continent 
 population = dataframe.population 
 life_exp = dataframe.life_exp 
 gdp_cap = dataframe.gdp_cap 

Создание простого скрипичного сюжета в Seaborn

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

Чтобы создать сценарий скрипки, мы просто используем violinplot() в Seaborn.

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

 sns.violinplot(x=life_exp) 
 
 plt.show() 

{.ezlazyload}

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

 sns.violinplot(x="life_exp", data = dataframe) 

Это дает точно такой же результат.

Обратите внимание: на этом изображении Seaborn отображает распределение ожидаемой продолжительности жизни по всем странам, поскольку мы предоставили life_exp переменную life_exp. В большинстве случаев мы захотим также разделить такую переменную на основе другой переменной, например country или continent .

Построение графика скрипки с переменными X и Y

Здесь мы передадим категориальную переменную X и непрерывную переменную Y, поскольку есть конкретное распределение, которое мы хотели бы сегментировать по типам.

В этом наборе данных много стран. Если мы построим их все, их будет слишком много, чтобы увидеть их практически, и фигура будет слишком переполнена. Мы могли бы подгруппировать набор данных и просто нанести на график, скажем, 10 стран.

Вместо этого мы могли бы строить график по континентам.

 sns.violinplot(x=continent, y=life_exp, data=dataframe) 

{.ezlazyload}

Настройка сюжета

Мы можем настроить наш скрипичный сюжет несколькими способами.

Измените метки сюжета скрипки с помощью Seaborn

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

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

Чтобы пометить оси, мы используем set() и предоставляем метки xlabel и ylabel или используем функции оболочки set_xlabel() / set_ylabel() :

 ax = sns.violinplot(x=continent, y=life_exp) 
 ax.set_title("Life Expectancy By Country") 
 ax.set_ylabel("Gapminder Life Expectancy") 
 ax.set_xlabel("Nations") 
 
 plt.show() 

{.ezlazyload}

Измените цвет сюжета скрипки с помощью Seaborn

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

 colors_list = ['#78C850', '#F08030', '#6890F0', '#A8B820', '#F8D030', '#E0C068', '#C03028', '#F85888', '#98D8D8'] 
 
 ax = sns.violinplot(x=continent, y=life_exp, palette=colors_list) 
 ax.set_title("Life Expectancy By Country") 
 ax.set_ylabel("Gapminder Life Expectancy") 
 ax.set_xlabel("Nations") 
 
 plt.show() 

{.ezlazyload}

Наложение Swarmplot на скрипку в Seaborn

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

 colors_list = ['#78C850', '#F08030', '#6890F0', '#A8B820', '#F8D030', '#E0C068', '#C03028', '#F85888', '#98D8D8'] 
 
 plt.figure(figsize=(10,6)) 
 sns.violinplot(x=continent, y=life_exp,palette=colors_list) 
 sns.swarmplot(x=continent, y=life_exp, color="k", alpha=0.8) 
 plt.title("Life Expectancy By Country") 
 plt.ylabel("Gapminder Life Expectancy") 
 plt.xlabel("Nations") 
 
 plt.show() 

{.ezlazyload}

Измените стиль сюжета скрипки с помощью Seaborn

Мы можем легко изменить стиль и цветовую палитру нашего графика, используя функции set_style() и set_palette() соответственно.

Seaborn поддерживает ряд различных опций для изменения стиля и палитры фигуры:

 plt.figure(figsize=(10,6)) 
 sns.set_palette("RdBu") 
 sns.set_style("darkgrid") 
 sns.violinplot(x=continent, y=life_exp, data=dataframe) 
 sns.swarmplot(x=continent, y=life_exp, data=dataframe, color="k", alpha=0.8) 
 plt.title("Life Expectancy By Country") 
 plt.ylabel("Gapminder Life Expectancy") 
 plt.xlabel("Nations") 
 
 plt.show() 

{.ezlazyload}

Подсюжеты скрипичных сюжетов с помощью Seaborn

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

Затем мы просто используем add_subplot() и указываем, где в сетке мы хотим разместить текущий подзаголовок, создавая график, как обычно, используя объект axes.

Здесь мы можем либо установить y=variable , либо использовать data=variable .

 fig = plt.figure(figsize=(6, 6)) 
 gs = fig.add_gridspec(1, 3) 
 
 ax = fig.add_subplot(gs[0, 0]) 
 
 sns.violinplot(data=population) 
 ax.set_xlabel("Population") 
 
 ax = fig.add_subplot(gs[0, 1]) 
 sns.violinplot(data=life_exp) 
 ax.set_xlabel("Life Exp.") 
 
 ax = fig.add_subplot(gs[0, 2]) 
 sns.violinplot(data=gdp_cap) 
 ax.set_xlabel("GDP Capacity") 
 
 fig.tight_layout() 
 plt.show() 

{.ezlazyload}

Группировка скрипичных сюжетов по оттенку

Действительно полезная вещь, которую можно сделать со сценами для скрипки, - это группировка по оттенку. Если у вас есть категориальное значение, которое имеет два значения (обычно это true / false ), вы можете группировать графики по оттенку.

Например, у вас может быть набор данных о людях и employment со значениями « employed и « unemployed . Затем вы можете сгруппировать скрипичные сюжеты по «оттенку» - этим двум разновидностям занятий.

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

Затем мы можем присвоить значение Yes / No новому столбцу - above_average_life_exp для каждой страны. Если средняя продолжительность жизни выше, чем в среднем по континенту, это значение будет Yes , и наоборот:

 # Separate European countries from the original dataset 
 europe = dataframe.loc[dataframe["continent"] == "Europe"] 
 
 # Calculate mean of the `life_exp` variable 
 avg_life_exp = dataframe["life_exp"].mean() 
 
 # Declare an empty list 
 above_average_life_exp = [] 
 
 # Iterate through the rows in the dataset, assigning Yes/No 
 # Depending on the value of the variable in the iterated row 
 for index, row in europe.iterrows(): 
 if row["life_exp"] > avg_life_exp: 
 above_average_life_exp.append("Yes") 
 else: 
 above_average_life_exp.append("No") 
 
 # Add new column to dataset 
 europe["above_average_life_exp"] = above_average_life_exp 

Теперь, если мы распечатаем наш набор данных, у нас будет что-то вроде:

 country year population continent life_exp gdp_cap avle 
 12 Albania 1952 1282697 Europe 55.230 1601.056136 No 
 13 Albania 1957 1476505 Europe 59.280 1942.284244 No 
 14 Albania 1962 1728137 Europe 64.820 2312.888958 Yes 
 15 Albania 1967 1984060 Europe 66.220 2760.196931 Yes 
 16 Albania 1972 2263554 Europe 67.690 3313.422188 Yes 
 ... ... ... ... ... ... ... ... 
 1603 United Kingdom 1987 56981620 Europe 75.007 21664.787670 Yes 
 1604 United Kingdom 1992 57866349 Europe 76.420 22705.092540 Yes 
 1605 United Kingdom 1997 58808266 Europe 77.218 26074.531360 Yes 
 1606 United Kingdom 2002 59912431 Europe 78.471 29478.999190 Yes 
 1607 United Kingdom 2007 60776238 Europe 79.425 33203.261280 Yes 

Для краткости имя переменной avle

Теперь давайте выберем меньшее подмножество этих стран с помощью europe.head() и построим графики скрипки, сгруппированные по новому столбцу, который мы вставили:

 europe = europe.tail(50) 
 
 ax = sns.violinplot(x=europe.country, y=europe.life_exp, hue=europe.above_average_life_exp) 
 ax.set_title("Life Expectancy By Country") 
 ax.set_ylabel("Gapminder Life Expectancy") 
 ax.set_xlabel("Nations") 
 
 plt.show() 

Теперь это приводит к:

{.ezlazyload}

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

Вот где начинается разделение.

Разделение скрипичных сюжетов по оттенку

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

Если вы установите для него значение True и присутствует hue , он разделит скрипки между значениями hue

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

Разделить скрипичные сюжеты по HueSeaborn{.ezlazyload}

Заключение

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

Если вас интересует визуализация данных и вы не знаете, с чего начать, обязательно ознакомьтесь с нашим комплектом книг по визуализации данных в Python{.ebook-link} :

::: {style=“border: 1px solid #ebebeb;padding: 15px;"} {.ebook-link}

Визуализация данных в Python

::: {.row} ::: {.col-md-4 .col-xs-12} {.ezlazyload .img-responsive .center-block} :::

::: {.col-md-8 .col-xs-12 .my-auto} Станьте опасными с визуализацией данных

✅ 30-дневная гарантия возврата денег без вопросов

✅ от новичка до продвинутого

✅ Регулярно обновляется бесплатно (последнее обновление в апреле 2021 г.)

✅ Обновлено с бонусными ресурсами и руководствами ::: ::: :::

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

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

Книга «Визуализация данных в Python» , книга для начинающих и средних разработчиков Python, проведет вас через простые манипуляции с данными с помощью Pandas, охватит основные библиотеки построения графиков, такие как Matplotlib и Seaborn, и покажет, как использовать преимущества декларативных и экспериментальных библиотек, таких как Altair. В частности, на протяжении 11 глав эта книга охватывает 9 библиотек Python: Pandas, Matplotlib, Seaborn, Bokeh, Altair, Plotly, GGPlot, GeoPandas и VisPy.

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

comments powered by Disqus