Битва 4 инструментов визуализации данных на языке Python

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

Skillfactory.ru

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

Инструменты визуализации на основе Python

Рассмотрим наиболее известные инструменты визуализации данных на основе Python.

Сначала подготовим данные для предстоящей визуализации. Следующий код был написан на основе данных фондового рынка:

from datetime import datetime
from datetime import timedelta
import pandas_datareader as data_reader
import pandas as pd

stocktickers = ['GOOG', 'AAPL', 'FB']
stock = []

#Извлечение данных за 14 дней
start = (datetime.now()-timedelta(days=14)).strftime('%Y-%m-%d')
end = (datetime.now()).strftime('%Y-%m-%d')

for stockticker in stocktickers:
    data = data_reader.DataReader(stockticker, 'yahoo', start, end)
    data['stock_ticker'] = stockticker
    stock.append(data)

stockDF = pd.concat(stock)

Вступительная часть

Matplotlib

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

Графики могут быть встроены в приложения, использующие Tkinter, GTK+, wxPython, Qt и другие наборы инструментов GUI. С помощью Matplotlib можно создавать различные типы визуализации, включая:

  • графики;
  • столбчатые диаграммы;
  • круговые диаграммы;
  • гистограммы;
  • диаграммы разброса;
  • диаграммы ошибок;
  • спектральные диаграммы;
  • диаграммы “стебель-листья”.

Plotly

Plotly  —  это бесплатная графическая библиотека, позволяющая создавать визуализации данных. Plotly  —  это веб-приложение для визуализации данных, основанное на JavaScript-библиотеке Plotly (plotly.py/plotly.js).

Его используют для создания веб-визуализаций данных, которые можно хранить в виде отдельных HTML-файлов либо отображать в ноутбуках Jupyter или веб-приложениях с помощью Dash. В Plotly можно создавать различные виды диаграмм, включая:

  • диаграммы разброса;
  • гистограммы;
  • линейные диаграммы;
  • столбчатые диаграммы;
  • круговые диаграммы;
  • планки погрешностей;
  • блочные диаграммы;
  • многоосевые диаграммы;
  • спарклайн-гистограммы;
  • древовидные диаграммы;
  • 3D-диаграммы и др.

PyeCharts

PyeCharts  —  это библиотека классов Python для создания Echarts (электронных диаграмм). JS-фреймворк Echarts с открытым исходным кодом разработан компанией Baidu для визуализации данных. PyeCharts связан с Python, что позволяет легко использовать карту генерации данных непосредственно в Python. Echarts обеспечивает превосходные графические визуальные эффекты, а состыковка Pyecharts с Python позволяет легко использовать карту генерации данных непосредственно в Python.

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

Начало битвы инструментов

Столбчатая диаграмма

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

Skillfactory.ru

Раунд 1: Matplotlib против Pyecharts

Matplotlib

import matplotlib.pyplot as plt
import numpy as np

date = stockDF.index.unique().tolist()
GOOG = stockDF[stockDF['stock_ticker']=='GOOG']['Volume'].tolist()
AAPL = stockDF[stockDF['stock_ticker']=='AAPL']['Volume'].tolist()
FB = stockDF[stockDF['stock_ticker']=='FB']['Volume'].tolist()
datedata = [x.strftime("%Y-%m-%d") for x in date]

barWidth = 0.25
fig = plt.subplots(figsize =(12, 8))

br1 = np.arange(len(datedata))
br2 = [x + barWidth for x in br1]
br3 = [x + barWidth for x in br2]

plt.bar(br1, GOOG, color ='r', width = barWidth,
        edgecolor ='grey', label ='GOOG')
plt.bar(br2, AAPL, color ='g', width = barWidth,
        edgecolor ='grey', label ='AAPL')
plt.bar(br3, FB, color ='b', width = barWidth,
        edgecolor ='grey', label ='FB')

plt.xlabel('Date', fontweight ='bold', fontsize = 15)
plt.ylabel('Volume', fontweight ='bold', fontsize = 15)
plt.xticks([r + barWidth for r in range(len(datedata))],
        datedata)
 
plt.legend()
plt.show()
Составлено автором (защищено авторским правом)

Pyecharts

from pyecharts.charts import Bar
from pyecharts import options as opts

date = stockDF.index.unique().tolist()
datedata = [x.strftime("%Y-%m-%d") for x in date]GOOG = stockDF[stockDF['stock_ticker']=='GOOG']['Volume'].tolist()
AAPL = stockDF[stockDF['stock_ticker']=='AAPL']['Volume'].tolist()
FB = stockDF[stockDF['stock_ticker']=='FB']['Volume'].tolist()

bar = (Bar()
       .add_xaxis(date)
       .add_yaxis('GOOG', GOOG)
       .add_yaxis('AAPL', AAPL)
       .add_yaxis('FB', FB)
       .set_series_opts(label_opts=opts.LabelOpts(is_show=False),
                        markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="Maximum "),
                                                                opts.MarkPointItem(type_="min", name="Minimum")]))
       .set_global_opts(title_opts=opts.TitleOpts(title="Stock Market", subtitle="Daily Volume"),
                                       datazoom_opts=opts.DataZoomOpts(range_start=0, range_end=100),
                                    xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
)
       )
bar.render_notebook()
Составлено автором (защищено авторским правом)

Результаты

Pyecharts  —  явный победитель первого раунда. Стиль Matplotlib значительно уступает стилю Pyechart, более приятному и яркому по умолчанию. Кроме того, Pyecharts  —  это интерактивная гистограмма, предполагающая взаимодействие с пользователем, а Matplotlib  —  просто картинка.

Пример интерактивной гистограммы Pyecharts:

Составлено автором (защищено авторским правом)

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

Раунд 2: Seaborn против Plotly

Seaborn

import matplotlib.pyplot as plt
import seaborn as sns

stockDFclone = stockDF.reset_index()
sns.barplot(x = "Date", y = "Volume", hue = "stock_ticker", data = stockDFclone)
plt.show()
Составлено автором (защищено авторским правом)

Plotly

import plotly.express as px

stockDFclone['Date2'] = stockDFclone['Date'].apply(lambda x : x.strftime("%Y-%B-%d"))
fig = px.histogram(stockDFclone, x="Date2", y="Volume",
             color='stock_ticker', barmode='group',histfunc=None,
             height=400)
fig.update_yaxes(title_text='Volume')

fig.show()
Составлено автором (защищено авторским правом)

Результаты

Plotly явно побеждает во втором раунде, превосходя Seaborn по ряду факторов. Seaborn почти идентичен Matplotlib. Правда, библиотека визуализации графиков, основанная на matplotlib, является более мощным пакетом API, упрощающим процесс графического изображения.

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

Plotly:

Составлено автором (защищено авторским правом)

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

Гистограмма в Plotly  —  это агрегированная столбчатая диаграмма с несколькими функциями агрегирования (например, общий объем, среднее значение, количество и др.), которая может использоваться для представления данных на категориальных, датированных и линейных осях. Помните: чтобы показать все столбцы в многостолбцовой гистограмме Plotly, необходимо изменить ось x на строку и выбрать формат даты 2022-Jan-01 (в противном случае, если будет формат 2022–01–01, Plotly преобразует дату и агрегирует значение).

Финальный раунд: Plotly против Pyecharts

Plotly

fig = px.line(stockDFclone, x="Date", y="Volume", color='stock_ticker')
fig.show()
Составлено автором (защищено авторским правом)

Pyecharts

from pyecharts.charts import Line
from pyecharts import options as opts

date = stockDF.index.unique().tolist()
GOOG = stockDF[stockDF['stock_ticker']=='GOOG']['Volume'].tolist()
AAPL = stockDF[stockDF['stock_ticker']=='AAPL']['Volume'].tolist()
FB = stockDF[stockDF['stock_ticker']=='FB']['Volume'].tolist()
datedata = [x.strftime("%Y-%m-%d") for x in date]

line = (Line()
       .add_xaxis(date)
       .add_yaxis('GOOG', GOOG,is_smooth=True)
       .add_yaxis('AAPL', AAPL,is_smooth=True)
       .add_yaxis('FB', FB,is_smooth=True)
            .set_series_opts(label_opts=opts.LabelOpts(is_show=True))
            .set_global_opts(
                datazoom_opts=[opts.DataZoomOpts(range_start=0, range_end=100)],                                  
                legend_opts=opts.LegendOpts(is_show=False),
            )
      )
line.render_notebook()
Составлено автором (защищено авторским правом)

Результаты

Поскольку Plotly и Pyecharts являются пользовательскими интерактивными процедурами, проведем сравнение по четырем критериям.

  1. Объем кода. Plotly прост в использовании и содержит меньше кода. Pyecharts более сложен в использовании и отличается средним объемом кода.
  2. Персонализация. Plotly поддерживает меньше эффектов визуализации, в то время как Pyecharts предоставляет больше возможностей настройки, например динамические диаграммы разброса с эффектами анимации, формы жидкого графика и т. д.
  3. Красочность. Pyecharts более красочен и привлекателен, чем Plotly.
  4. Настройка всплывающих подсказок. Pyecharts включает поддержку функции обратного вызова javascript и обработчика событий echarts, а также другие возможности ECharts. Plotly обладает ограниченными возможностями пользовательских всплывающих подсказок.

Таким образом, Pyecharts превосходит Plotly в плане визуализации. Рассмотрим еще несколько диаграмм Pyecharts.

Динамическая диаграмма разброса

Все разработчики имеют дело с диаграммами разброса. Динамическая диаграмма разброса просто дополнена анимацией с разнообразными точками, отличающимися символическим представлением.

Составлено автором (защищено авторским правом)

from pyecharts.charts import EffectScatter
from pyecharts.globals import SymbolType

c = (
 EffectScatter(opts.InitOpts(width='900px', height='500px'))
 .add_xaxis(datedata)
 .add_yaxis("GOOG", GOOG,is_selected = True,symbol_size = 20, 
            symbol=SymbolType.DIAMOND)
 .add_yaxis("AAPL", AAPL,is_selected = True,symbol_size = 20,  symbol=SymbolType.ARROW)
 .add_yaxis("FB", FB,is_selected = True,symbol_size = 20) 
 .set_global_opts(title_opts=opts.TitleOpts(title="Stock Market", 
                                            subtitle="Daily Volume"),
 visualmap_opts=opts.VisualMapOpts(pos_left="right", type_="color",  
                                   max_=2000, min_=0, pos_bottom=50) 
 )
 )
c.render_notebook()из pyecharts.charts import EffectScatter

Жидкий график

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

Составлено автором (защищено авторским правом)

from pyecharts.charts import Liquid
shape='''path://M1925 12789 c-424 -41 -843 -196 -1152 -426 -311 -232 -527 -570
-588 -917 -8 -46 -30 -134 -49 -197 -223 -740 -168 -1447 164 -2110 146 -291
342 -576 651 -950 313 -378 495 -643 634 -919 l65 -128 -15 -98 c-32 -222 -39
-337 -39 -649 0 -311 5 -394 40 -650 l17 -120 -28 -55 c-82 -164 -233 -356
-464 -593 -188 -194 -263 -279 -366 -418 -388 -521 -629 -1114 -695 -1709 -21
-188 -12 -493 20 -693 81 -509 367 -1003 778 -1349 280 -235 658 -452 1032
-593 238 -90 460 -148 710 -186 193 -30 579 -33 770 -6 550 77 1070 301 1563
671 587 442 1130 1103 1481 1805 157 312 259 608 345 998 321 1450 153 3343
-446 5008 -337 937 -815 1842 -1344 2545 -742 984 -1575 1568 -2444 1714 -202
34 -452 44 -640 25z
'''
DOD = stockDF[stockDF['stock_ticker']=='GOOG']['Open'].tolist()[-2:]
DODVALUE = (DOD[1] - DOD[0]) / DOD[0]
L = Liquid()
L.add("Highest Price", [DODVALUE], is_outline_show=False, shape=shape)
L.set_global_opts(title_opts=opts.TitleOpts(title="Daily Price Changes (%)"))L.render_notebook()from pyecharts.charts import Liquid

Заключение

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

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

Читайте также:

Читайте нас в TelegramVK и Яндекс.Дзен


Перевод статьи Edward Low Jin Zhang: The battle among 4 Python Data Visualization Tools

Предыдущая статьяКак обучить модель квантового МО, используя данные из CSV?
Следующая статьяPHP: строки