[Python, Программирование] Как строить красивые графики на Python с Seaborn (перевод)

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
02-Фев-2021 19:32
Будущих студентов курса «Python Developer. Professional» и всех желающих приглашаем принять участие в открытом вебинаре на тему «Фреймворкирование и метаклассы».
А сейчас делимся традиционным переводом полезного материала.

Визуализация данных — это метод, который позволяет специалистам по анализу данных преобразовывать сырые данные в диаграммы и графики, которые несут ценную информацию. Диаграммы уменьшают сложность данных и делают более понятными для любого пользователя.Есть множество инструментов для визуализации данных, таких как Tableau, Power BI, ChartBlocks и других, которые являются no-code инструментами. Они очень мощные, и у каждого своя аудитория. Однако для работы с сырыми данными, требующими обработки, а также в качестве песочницы, Python подойдет лучше всего.Несмотря на то, что этот путь сложнее и требует умения программировать, Python позволит вам провести любые манипуляции, преобразования и визуализировать ваши данные. Он идеально подходит для специалистов по анализу данных.Python — лучший инструмент для data science и этому много причин, но самая важная — это его экосистема библиотек. Для работы с данными в Python есть много замечательных библиотек, таких как numpy, pandas, matplotlib, tensorflow.Matplotlib, вероятно, самая известная библиотека для построения графиков, которая доступна в Python и других языках программирования, таких как R. Именно ее уровень кастомизации и удобства в использовании ставит ее на первое место. Однако с некоторыми действиями и кастомизациями во время ее использования бывает справиться нелегко.Разработчики создали новую библиотеку на основе matplotlib, которая называется seaborn. Seaborn такая же мощная, как и matplotlib, но в то же время предоставляет большую абстракцию для упрощения графиков и привносит некоторые уникальные функции.В этой статье мы сосредоточимся на том, как работать с seaborn для создания первоклассных графиков. Если хотите, можете создать новый проект и повторить все шаги или просто обратиться к моему руководству по seaborn на GitHub.Что такое Seaborn?Seaborn — это библиотека для создания статистических графиков на Python. Она основывается на matplotlib и тесно взаимодействует со структурами данных pandas.Архитектура Seaborn позволяет вам быстро изучить и понять свои данные. Seaborn захватывает целые фреймы данных или массивы, в которых содержатся все ваши данные, и выполняет все внутренние функции, нужные для семантического маппинга и статистической агрегации для преобразования данных в информативные графики.Она абстрагирует сложность, позволяя вам проектировать графики в соответствии с вашими нуждами.Установка SeabornУстановить seaborn так же просто, как и любую другую библиотеку, для этого вам понадобится ваш любимый менеджер пакетов Python. Во время установки seaborn библиотека установит все зависимости, включая matplotlib, pandas, numpy и scipy.Давайте уже установим seaborn и, конечно же, также пакет notebook, чтобы получить доступ к песочнице с данными.
pipenv install seaborn notebook
Помимо этого, перед началом работы давайте импортируем несколько модулей.
import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib
Строим первые графикиПеред тем, как мы начнем строить графики, нам нужны данные. Прелесть seaborn в том, что он работает непосредственно с объектами dataframe из pandas, что делает ее очень удобной. Более того, библиотека поставляется с некоторыми встроенными наборами данных, которые можно использовать прямо из кода, и не загружать файлы вручную.Давайте посмотрим, как это работает на наборе данных о рейсах самолетов.
flights_data = sns.load_dataset("flights")
flights_data.head()
yearmonthpassengers01949Jan11211949Feb11821949Mar13231949Apr12941949May121Вся магия происходит при вызове функции load_dataset, которая ожидает имя загружаемых данных и возвращает dataframe. Все эти наборы данных доступны в репозитории на Github.Диаграмма рассеяния — Scatter PlotДиаграмма рассеяния — это диаграмма, которая отображает точки на основе двух измерений набора данных. Создать диаграмму рассеяния в seaborn очень просто, ведь для этого нужна всего одна строчка кода.
sns.scatterplot(data=flights_data, x="year", y="passengers")

Легко, не правда ли? Функция scatterplot принимает в себя набор данных, который нужно визуализировать, и столбцы, которые будут выступать как оси x и y.Линейный график — Line PlotЭтот график рисует линию, которая представляет собой развитие непрерывных или категориальных данных. Этот вид графиков популярен и известен, и его легко создать. Как и раньше, мы воспользуемся функцией lineplot с набором данных и столбцами, представляющими оси x и y. Остальное за нас сделает seaborn.
sns.lineplot(data=flights_data, x="year", y="passengers")

Столбчатая диаграмма — Bar PlotНаверное, это самый известный тип диаграммы, и, как вы уже догадались, мы можем построить этот тип диаграмм с помощью seaborn, также, как мы сделали это для линейного графика и диаграммы рассеяния, с помощью функции barplot.
sns.barplot(data=flights_data, x="year", y="passengers")

Она очень красочная, знаю. Позже мы научимся кастомизировать ее.Расширение функционала с matplotlibSeaborn основывается на matplotlib, расширяя ее функциональные возможности и абстрагируя сложность. При этом seaborn не теряет в своей мощности. Любая диаграмма seaborn может быть кастомизирована с помощью функций из библиотеки matplotlib. Эта механика может пригодиться в определенных случаях и позволяет seaborn использовать возможности matplotlib без необходимости переписывать все ее функции.Допустим, вы хотите построить несколько диаграмм одновременно с помощью seaborn, в этом случае вы можете воспользоваться функцией subplot из matplotlib.
diamonds_data = sns.load_dataset('diamonds')
plt.subplot(1, 2, 1)
sns.countplot(x='carat', data=diamonds_data)
plt.subplot(1, 2, 2)
sns.countplot(x='depth', data=diamonds_data)

С помощью функции subplot на одном графике можно построить несколько диаграмм. Функция принимает в себя три параметра: первый – количество строк, второй – количество столбцов, третий – количество диаграмм.Мы визуализируем по одной диаграмме seaborn на каждой части графика, смешивая функционал matplotlib и seaborn.Seaborn и PandasМы уже говорили о том, что seaborn любит pandas до такой степени, что все ее функции строятся на структуре dataframe. До этого момента мы использовали seaborn с предварительно загруженными данными, но что, если мы хотим визуализировать данные, которые уже загрузили с помощью pandas?
drinks_df = pd.read_csv("data/drinks.csv")
sns.barplot(x="country", y="beer_servings", data=drinks_df)

Создание красивых графиков с помощью стилейSeaborn дает возможность менять интерфейс ваших графиков. Для этого из коробки у нас в распоряжении есть пять стилей: darkgrid, whitegrid, dark, white и ticks.
sns.set_style("darkgrid")
sns.lineplot(data = data, x = "year", y = "passengers")

А вот другой пример.
sns.set_style("whitegrid")
sns.lineplot(data=flights_data, x="year", y="passengers")

Крутые варианты использованияМы познакомились с основами seaborn, а теперь давайте применим знания на практике и построим несколько диаграмм с одним и тем же набором данных. В нашем случае вы используем набор данных «tips», который можно скачать непосредственно с помощью seaborn. Сначала загрузим набор данных.
tips_df = sns.load_dataset('tips')
tips_df.head()
total_billtipsexsmokerdaytimesize016.991.01FemaleNoSunDinner2110.341.66MaleNoSunDinner3221.013.50MaleNoSunDinner3323.683.31MaleNoSunDinner2424.593.61FemaleNoSunDinner4Мне нравится выводить первые несколько строк набора данных, чтобы получить представление о столбцах и самих данных. Обычно я пользуюсь несколькими функциями pandas, чтобы уладить проблемы с данными, такие как значения null, или добавить в набор данных информацию, которая может быть полезной. Подробнее об этом вы можете прочитать в руководстве к pandas.Давайте добавим еще один столбец, в котором будет процентное отношение чаевых ко всему счету. 
tips_df["tip_percentage"] = tips_df["tip"] / tips_df["total_bill"]
tips_df.head()
Теперь данные выглядят так:total_billtipsexsmokerdaytimesizetip_percentage016.991.01FemaleNoSunDinner20.059447110.341.66MaleNoSunDinner30.160542221.013.50MaleNoSunDinner30.166587323.683.31MaleNoSunDinner20.139780424.593.61FemaleNoSunDinner40.146808А теперь мы начнем строить графики.Процент чаевыхДавайте попробуем разобраться с процентным соотношением чаевых и счета. Для этого воспользуемся функцией histplot, которая сгенерирует гистограмму.
sns.histplot(tips_df["tip_percentage"], binwidth=0.05)

Чтобы все хорошо читалось, нам пришлось настроить свойство binwidth, зато теперь мы быстрее можем понять и оценить данные. Большинство клиентов оставляют чаевые в размере от 15 до 20% от счета, но есть несколько случаев, когда чаевые превышают 70%. Эти значения называются аномалиями или выбросами, и на них всегда стоит обращать внимание, чтобы понять являются ли эти значения ошибочными.Также мне было интересно, меняется ли процент чаевых в зависимости от времени дня.
sns.histplot(data=tips_df, x="tip_percentage", binwidth=0.05, hue="time")

На этот раз мы создали диаграмму с помощью всего набора данных, а не одного столбца, и установили свойство hue на столбец time. Так в диаграмме будут использоваться разные цвета для каждого значения времени, и к ней добавится легенда.Общее количество чаевых за определенный день неделиЕще одна интересная метрика — это количество чаевых, которые получает персонал в зависимости от дня недели.
sns.barplot(data=tips_df, x="day", y="tip", estimator=np.sum)

Кажется, пятница — хороший день, чтобы остаться дома.Влияние размера столика и дня недели на чаевыеИногда нужно понять, как несколько переменных влияют на конечный результат. Например, как день недели и размер столика влияют на процент чаевых?Чтобы построить следующую диаграмму, мы объединим функцию pivot из pandas для предварительной обработки, а затем нарисуем тепловую карту.
pivot = tips_df.pivot_table(
    index=["day"],
    columns=["size"],
    values="tip_percentage",
    aggfunc=np.average)
sns.heatmap(pivot)

ЗаключениеКонечно, есть еще множество штук, которые мы можем сделать с seaborn, про них вы можете узнать в официальной документации.Надеюсь, вам понравилась эта статья так же, как и мне. Спасибо за прочтение!
Узнать подробнее о курсе «Python Developer. Professional».
Зарегистрироваться на вебинар по теме «Фреймворкирование и метаклассы».

===========
Источник:
habr.com
===========

===========
Автор оригинала: Juan Cruz Martinez
===========
Похожие новости: Теги для поиска: #_python, #_programmirovanie (Программирование), #_python, #_metaklassy (метаклассы), #_ai, #_data_science, #_python_3, #_seaborn, #_blog_kompanii_otus (
Блог компании OTUS
)
, #_python, #_programmirovanie (
Программирование
)
Профиль  ЛС 
Показать сообщения:     

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

Текущее время: 22-Ноя 18:26
Часовой пояс: UTC + 5