График Seaborn Line - Учебное пособие и примеры

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

Вступление

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

В этом уроке мы рассмотрим, как построить линейный график в Seaborn - одном из самых основных типов графиков.

На линейных графиках числовые значения отображаются на одной оси, а категориальные значения - на другой.

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

Постройте линейный участок с Seaborn

Давайте начнем с самой простой формы заполнения данных для линейного графика, предоставив пару списков для осей X и Y функции lineplot() :

 import matplotlib.pyplot as plt 
 import seaborn as sns 
 
 sns.set_theme(style="darkgrid") 
 
 x = [1, 2, 3, 4, 5] 
 y = [1, 5, 4, 7, 4] 
 
 sns.lineplot(x, y) 
 plt.show() 

Здесь у нас есть два списка значений, x и y . Список x действует как наш список категориальных переменных, а y действует как список числовых переменных.

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

простой линейный графикseaborn{.ezlazyload}

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

 import matplotlib.pyplot as plt 
 import seaborn as sns 
 
 sns.set_theme(style="darkgrid") 
 
 x = ['day 1', 'day 2', 'day 3'] 
 y = [1, 5, 4] 
 
 sns.lineplot(x, y) 
 plt.show() 

И это приведет к:

морская категориальнаялиния{.ezlazyload}

Примечание. Если вы используете целые числа в качестве категориального списка, например [1, 2, 3, 4, 5] , но затем переходите к 100 , все значения между 5..100 будут нулевыми:

 import seaborn as sns 
 
 sns.set_theme(style="darkgrid") 
 
 x = [1, 2, 3, 4, 5, 10, 100] 
 y = [1, 5, 4, 7, 4, 5, 6] 
 
 sns.lineplot(x, y) 
 plt.show() 

график пропущенных значенийseaborn{.ezlazyload}

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

 import matplotlib.pyplot as plt 
 import seaborn as sns 
 
 sns.set_theme(style="darkgrid") 
 
 x = ['day 1', 'day 2', 'day 3', 'day 100'] 
 y = [1, 5, 4, 5] 
 
 sns.lineplot(x, y) 
 plt.show() 

линейный график пропущенных категориальных значенийseaborn{.ezlazyload}

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

Импортировать данные

Давайте воспользуемся набором данных Hotel Bookings и воспользуемся данными оттуда:

 import pandas as pd 
 df = pd.read_csv('hotel_bookings.csv') 
 print(df.head()) 

Давайте посмотрим на столбцы этого набора данных:

 hotel is_canceled reservation_status ... arrival_date_month stays_in_week_nights 
 0 Resort Hotel 0 Check-Out ... July 0 
 1 Resort Hotel 0 Check-Out ... July 0 
 2 Resort Hotel 0 Check-Out ... July 1 
 3 Resort Hotel 0 Check-Out ... July 1 
 4 Resort Hotel 0 Check-Out ... July 2 

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

 import matplotlib.pyplot as plt 
 import seaborn as sns 
 import pandas as pd 
 
 sns.set_theme(style="darkgrid") 
 
 df = pd.read_csv('hotel_bookings.csv') 
 
 sns.lineplot(x = "arrival_date_month", y = "stays_in_week_nights", data = df) 
 plt.show() 

Мы использовали Pandas для чтения данных CSV и их упаковки в DataFrame . Затем мы можем назначить аргументы x и y lineplot() в качестве имен столбцов в этом фрейме данных. Конечно, нам нужно указать, с каким набором данных мы работаем, назначив фрейм data аргументу данных.

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

линейный график набора данныхseaborn{.ezlazyload}

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

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

В целом , люди остаются около 2,8 дней в будние дни в июле, но доверительный интервал составляет 2,78–2,84 .

Построение широкоформатных данных

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

Поскольку набор данных по умолчанию не подходит для этого, нам придется выполнить некоторую предварительную обработку данных.

 import matplotlib.pyplot as plt 
 import seaborn as sns 
 import pandas as pd 
 
 df = pd.read_csv('hotel_bookings.csv') 
 
 # Truncate 
 df = df[['arrival_date_year', 'arrival_date_month', 'stays_in_week_nights']] 
 # Save the order of the arrival months 
 order = df['arrival_date_month'] 
 # Pivot the table to turn it into wide-form 
 df_wide = df.pivot_table(index='arrival_date_month', columns='arrival_date_year', values='stays_in_week_nights') 
 # Reindex the DataFrame with the `order` variable to keep the same order of months as before 
 df_wide = df_wide.reindex(order, axis=0) 
 
 print(df_wide) 

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

Затем, чтобы превратить данные узкой формы в широкую, мы развернули таблицу вокруг функции arrival_date_month , превратив arrival_date_year в столбцы, а stays_in_week_nights в значения. Наконец, мы использовали reindex() чтобы обеспечить тот же порядок месяцев прибытия, что и раньше.

Давайте посмотрим, как теперь выглядит наш набор данных:

 arrival_date_year 2015 2016 2017 
 arrival_date_month 
 July 2.789625 2.836177 2.787502 
 July 2.789625 2.836177 2.787502 
 July 2.789625 2.836177 2.787502 
 July 2.789625 2.836177 2.787502 
 July 2.789625 2.836177 2.787502 
 ... ... ... ... 
 August 2.654153 2.859964 2.956142 
 August 2.654153 2.859964 2.956142 
 August 2.654153 2.859964 2.956142 
 August 2.654153 2.859964 2.956142 
 August 2.654153 2.859964 2.956142 

Большой! Наш набор данных теперь правильно отформатирован для широкоформатной визуализации с центральной тенденцией вычисления stays_in_week_nights Теперь, когда мы работаем с широким набором данных, все, что нам нужно сделать, чтобы построить его:

 sns.lineplot(data=df_wide) 
 plt.show() 

Функция lineplot() может изначально распознавать наборы данных широкого формата и строить их соответствующим образом. Это приводит к:

линейный график набора данных с широким наборомданных{.ezlazyload}

Настройка линейных графиков с помощью Seaborn

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

Построение линейного графика с оттенками

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

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

 import matplotlib.pyplot as plt 
 import seaborn as sns 
 import pandas as pd 
 
 df = pd.read_csv('hotel_bookings.csv') 
 
 sns.lineplot(x = "arrival_date_month", y = "stays_in_week_nights", hue='arrival_date_year', data = df) 
 plt.show() 

arrival_date_year функцию прибытия_date_year в качестве hue arrival_date_year каждое сопоставление XY с помощью функции прибытия_date_year, так что в итоге мы получим три разных линейных графика:

Оттенки сюжетной линииseaborn{.ezlazyload}

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

Настройка доверительного интервала линейного графика с помощью Seaborn

Вы можете легко повозиться, включить / отключить и изменить тип доверительных интервалов, используя пару аргументов. ci может использоваться для указания размера интервала и может быть установлен в целое число, 'sd' (стандартное отклонение) или None если вы хотите отключить его.

err_style можно использовать для указания стиля доверительных интервалов - band или bars . Мы уже видели, как работают полосы, поэтому давайте попробуем доверительный интервал, в котором вместо bars

 import matplotlib.pyplot as plt 
 import seaborn as sns 
 import pandas as pd 
 
 df = pd.read_csv('hotel_bookings.csv') 
 
 sns.lineplot(x = "arrival_date_month", y = "stays_in_week_nights", err_style='bars', data = df) 
 plt.show() 

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

seaborn настроить график линии доверительногоинтервала{.ezlazyload}

И давайте изменим доверительный интервал, который по умолчанию установлен на 95 , чтобы вместо этого отображать стандартное отклонение:

 import matplotlib.pyplot as plt 
 import seaborn as sns 
 import pandas as pd 
 
 df = pd.read_csv('hotel_bookings.csv') 
 
 sns.lineplot(x = "arrival_date_month", y = "stays_in_week_nights", err_style='bars', ci='sd', data = df) 
 plt.show() 

линейный график доверительный интервалseaborn{.ezlazyload}

Заключение

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

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

Если вас интересует визуализация данных и вы не знаете, с чего начать, обязательно ознакомьтесь с нашим комплектом книг по визуализации данных в 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