ПИТОН

Matplotlib против Plotly Express: какая лучшая библиотека для визуализации данных?

Какие из этих библиотек работают лучше по сравнению друг с другом?

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

Независимо от того, являетесь ли вы новичком или имеете многолетний опыт использования Python, вы знаете, что Matplotlib - самая известная система визуализации данных, но лучшая ли она? Сегодня мы сравним Matplotlib с Plotly Express. Кто будет победителем?

Популярность

Это очевидно, но Matplotlib намного популярнее, чем Plotly. Основное преимущество такой популярности заключается в том, что ноутбуки, использующие Matplotlib, будут легко воспроизведены другими людьми, поскольку у разных людей шансы на его установку выше. Однако Plotly рос. Может ли он догнать Matplotlib? На мой взгляд, если Matplotlib не внесет существенных улучшений в следующие несколько лет, я верю, что это произойдет.

Документация

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

Установка

Установить обе библиотеки одинаково просто. Вы можете использовать pip или conda для установки любого из них. Здесь особо нечего сказать. Одно из преимуществ Python - простота установки библиотек. У вас не должно возникнуть проблем с установкой любого из них.

Создание визуализаций

Я знаю, что вы здесь, чтобы увидеть сравнение этих двух библиотек в реальной жизни, и мы этим займемся. Для этого я воспользуюсь Отчетом о мировом счастье 2021 года, который вы можете найти на Kaggle. Вы можете найти блокнот, который я использовал для создания этих визуализаций, здесь.

# Importing Libraries
import opendatasets as od
import pandas as pd
import matplotlib.pyplot as plt
import plotly.express as px
import numpy as np
# Setting the dataset to the variable df
df = pd.read_csv('world-happiness-report-2021/world-happiness-report-2021.csv')

Гистограмма

Начнем с гистограммы, которая является одной из самых популярных диаграмм. Гистограммы быстро передают реляционную информацию, поскольку столбцы отображают числа, относящиеся к определенной категории, что упрощает сравнение элементов внутри одной и той же категории. Для этого графика я сравню индекс счастья по регионам. Для этого я воспользуюсь функциями Regional indicator и Ladder score.

Я создаю новый фрейм данных под названием happiest_regions, чтобы упростить задачу.

happiest_regions = df.groupby(by=[‘Regional indicator’])[‘Ladder score’].mean().sort_values(ascending=False).reset_index()
happiest_regions = pd.DataFrame(happiest_regions)

Plotly Express

«Сюжетный экспресс» выполнен великолепно. Он смог создать красивую интерактивную диаграмму с очень небольшим количеством кода. Глядя на код, мы видим, что все, что нам нужно для создания графика, - это фрейм данных, ось x, ось y, и я добавил цветовую кодировку, чтобы лучше различать области. Мне нравится!

px.bar(happiest_regions, x='Regional indicator', y='Ladder score', color='Regional indicator')

Matplotlib

Результат Matplotlib был… Хм, грустно. Я использовал примерно ту же длину кода, что и для Plotly, и результат выглядит ужасно. Невозможно понять, что происходит. При этом, чтобы сделать этот график презентабельным, потребуется довольно много кода. По этой причине мне придется немного схитрить и включить Сиборна в игру, чтобы сравнение было справедливым.

plt.bar(x = happiest_regions['Regional indicator'], height = happiest_regions['Ladder score'])
plt.show()

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

# Importing Seaborn
import seaborn as sns
sns.set_theme(style="darkgrid")
plt.figure(figsize=(14,6))
sns.barplot(x='Regional indicator', y='Ladder score', data=df, palette="tab10")
plt.xticks(rotation=45, fontsize=14)
plt.yticks(fontsize=14)
plt.show()

Гистограмма

Основная цель гистограмм - увидеть, как данные распределяются и где они сконцентрированы. Для гистограммы я хочу увидеть, как распределяется индекс счастья. Таким образом, я буду использовать функцию Ladder score.

Сюжетно

И снова Плотли не разочаровал. Он может показывать красивую интерактивную гистограмму с маленьким крутым кодом, где мы можем раскрасить регионы, что упрощает понимание. Например, на графике мы можем увидеть, где сосредоточены страны Западной Европы и Африки к югу от Сахары.

px.histogram(df, x='Ladder score', color='Regional indicator')

Matplotlib

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

plt.figure(figsize=(14,6))
sns.histplot(data=df, x='Ladder score', hue='Regional indicator')
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.show()

Диаграмма рассеяния

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

Plotly Express

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

px.scatter(df, x='Ladder score', y='Logged GDP per capita', color='Regional indicator')

Matplotlib

Matplotlib не супер отстает. Он выполняет свою работу, и когда у вас есть код, вы можете переходить между типами графиков так же легко, как и Plotly Express. Нет, это не интерактивно (без дополнительных библиотек). Да, он выполняет ту работу, которую можно ожидать от диаграммы рассеяния.

plt.figure(figsize=(14,6))
sns.scatterplot(data=df, x='Ladder score', y='Logged GDP per capita', hue='Regional indicator')
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.show()

График

Линейные графики удобны, чтобы увидеть тенденции определенной категории. Например, мы можем увидеть, как Ladder score изменился с годами. Страны становятся счастливее? Это фундаментальная диаграмма, позволяющая понять, как выглядит прогресс вашей категории. Для линейных диаграмм я буду использовать отчет «Мировое счастье» за многие годы.

Plotly Express

На данный момент мы можем ожидать, что Plotly Express будет работать хорошо, верно? Да, это красивая диаграмма, но я хочу сосредоточиться на двух интересных функциях. Во-первых, вы можете прокручивать и видеть все страны. Это по-прежнему отличная функциональность. Еще одна интересная вещь заключается в том, что если вы начнете снимать отметку с нескольких, в данном случае стран, Plotly достаточно умен, чтобы снять отметку со всех стран. Приятная деталь.

px.line(df2, x='year', y='Life Ladder', color='Country name')

Matplotlib

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

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

Непонятно, чего нам следует ожидать. В любом случае график выглядит неплохо. Если он показывает общемировую тенденцию, мы можем увидеть значительное падение индекса Ladder в 2006 году. В том году была рецессия, которая обострилась в 2008 году. Может быть, поэтому мы видим эту тенденцию.

plt.figure(figsize=(14,6))
sns.lineplot(data=df2, x='year', y='Life Ladder')
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.show()

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

plt.figure(figsize=(14,6))
sns.lineplot(data=first_10_countries, x='year', y='Life Ladder', hue='Country name')
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.show()

Варианты укладки

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

Я считаю, что документация Matplotlib не годится. Это сбивает с толку, и трудно найти то, что вам нужно. Однако редактировать графики несложно, а код легко запомнить. Этот блог автор: Прия Савадманод прекрасно объясняет, как создавать и редактировать графики Matplotlib.

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

plt.figure(figsize=(14,6))
sns.lineplot(data=first_10_countries, x='year', y='Life Ladder', hue='Country name')
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.show()

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

plt.figure(figsize=(14,6))
sns.histplot(data=df, x='Ladder score', hue='Regional indicator', palette='husl')
plt.title('Ladder Score Distribution', fontsize=18)
plt.xlabel('Ladder Score', fontsize=16)
plt.ylabel('Count', fontsize=16)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.show()

Заключение

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

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

Спасибо за внимание. Сообщите мне свое мнение об этих двух библиотеках.

Если у вас есть вопросы, напишите мне в Linkedin: http://bit.ly/linkedin-ismael