matplotlib

Визуализация данных в Python библиотекой Matplotlib.

Опубликовано

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

Перво-наперво, создадим серию данных, которую хотим визуализировать. Допустим мы хотим в графике отобразить какая модель телефона в каком количестве была продана, чтобы понимать какая модель пользуются большим успехом в магазине, который заказал нам этот отчёт. Для этого создадим два списка, phones — хранит наименование моделей телефонов, и список sales, которых хранить количество продаж.

phones = ['iPhone 14 Pro', 'iPhone 14 Max', 'iPhone 14', 'iPhone 14 Plus', 'iPhone 13', 'iPhone 13 mini', 'iPhone 12', 'iPhone 12 mini', 'iPhone SE']
sales = [1070, 772, 302, 239, 210, 171, 150, 140, 200]

ВАЖНО: Количество элементов в обеих списках должно быть одинаково. Списки связываются по индексу, так используя индекс 0 мы получаем информацию о том, что iPhone 14 Pro продался в количестве 1070 штук, и так далее.

1 — Гистограмма

Для отображения этих данных, мы будем использовать тип графика — гистограмма. В matplotlib для построения такого графика используется метод bar(), первым параметром передаётся измерение по оси x, вторым параметром ось y.

from matplotlib import pyplot as plt

phones = ['iPhone 14 Pro', 'iPhone 14 Max', 'iPhone 14', 'iPhone 14 Plus', 'iPhone 13', 'iPhone 13 mini', 'iPhone 12', 'iPhone 12 mini', 'iPhone SE']
sales = [1070, 772, 302, 239, 210, 171, 150, 140, 200]

plt.bar(phones, sales)
plt.show()

На результате, у вас в коде вы можете видеть как названия накладываются друг на друга, мы это поправим чуть позже, а пока перепишем функцию plt.bar(range(len(phones)), sales). В результате вместо имён, у нас будут числа, дальше в статье мы расскажем как это поправить.

Теперь давайте добавим подписи нашим осям и название графику.

plt.title('Продажи')
plt.xlabel('модель')
plt.ylabel('Количество продаж')
plt.legend(['iphones'])

Добавьте этот код между plt.bar(range(len(phones)), sales) и plt.show() . Запустите, взгляните на изменения.

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

ax = plt.subplot()
ax.set_xticks(range(len(phones)))

А теперь свяжем числа оси x с наименованиями моделей телефонов.

ax.set_xticklabels(phones, rotation=30)

гистограмма в matplotlib

2 — Печём и режем пироги

Ещё один отчёт который мы хотим визуализировать — это какой объём памяти телефонов, какую часть составляет от общего количества телефонов оставшихся на складе.

Создадим серию данных storage_size будет хранить размер телефона и phones_on_stock будет хранить количество телефонов в наличии. Списки так же как и в предыдущем примере будут связаны по индексу.

storage_size = ['1Tb', '512Gb', '256Gb', '128Gb', '64Gb']
phones_on_stock = [100, 139, 345, 256, 20]

Теперь создадим круговую диаграмму, которая очень напоминает пирог нарезанный на части.

plt.pie(phones_on_stock)
plt.show()

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

Для связки цветов и значений используется функция plt.legend(storage_size, loc='right'), где в качестве первого параметра передаём список наименований объёма памяти. Убедитесь, что телефоны объёмом 256Gb составляют большую часть склада магазина.

from matplotlib import pyplot as plt

storage_size = ['1Tb', '512Gb', '256Gb', '128Gb', '64Gb']
phones_on_stock = [100, 139, 345, 256, 20]

plt.pie(phones_on_stock)
plt.legend(storage_size, loc='right')
plt.show()

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

  • autopct=’%1.0f%%’
  • pctdistance=1.15
  • startangle=230
  • shadow=True

Ваша функция должна выглядеть так

plt.pie(phones_on_stock, autopct='%1.0f%%', pctdistance=1.15, startangle=230, shadow=True)

А теперь отделим самую большую часть от пирога и поменяем цвета графика. Перед функцией pie() объявим списки

explode = [0, 0, 0.1, 0, 0]
colors = ['lightskyblue', 'gold', 'lightcoral', 'yellowgreen', 'royalblue']

И передадим их в качестве одноимённых параметров функции pie()

plt.pie(phones_on_stock, autopct='%1.0f%%', pctdistance=1.15, startangle=230, shadow=True, explode=explode, colors=colors)

Круговая диаграмма в matplotlib

3 — Классический график

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

Как всегда начнём с построения серии данных в разрезе которых мы будем визуализировать информацию.

months = range(1,13)
visitor_count = [5348, 4390, 12230, 3405, 4500, 5690, 6100, 7600, 7300, 4339, 7800, 9295]

plt.plot(months, visitor_count)
plt.show()

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

ax = plt.subplot()
ax.set_xticks(range(1,13))

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

y_upper = [i + (i*0.15) for i in visitor_count]
y_lower = [i - (i*0.15) for i in visitor_count]

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

plt.fill_between(months, y_lower, y_upper, alpha=0.2)

И вот теперь-то мы видим, что наши точные измерения не очень-то и точны.)

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

Классический график

Подводя итоги, хочется подметить, что каждый тип графика подходит под различные задачи и вы должны уметь выбрать правильный вариант. Гистограмма bar отлично подходит для того чтобы выделить лидера и посмотреть насколько один столбец отличается от остальных. Все столбцы удобно стоят вряд, можно провести невидимую прямую линию и сравнить насколько данные отличаются друг от друга. Круговая диаграмма pie прекрасно демонстрирует какую долю от общего количества составляет каждая часть серии измерения. А обычный график plot будет полезен для визуализации частотной характеристики, чтобы отобразить насколько динамично менялись данные относительно друг друга.

Ну и напоследок. Наверняка у вас возник вопрос, а можно ли сохранить все эти графики чтобы потом их можно было использовать в своей презентации? Конечно можно сделать скриншот или нажать на соответствующей иконке в окне показа графика, но мы разберём как программно сохранить изображение графика matplotlib python.

Добавить комментарий

Ваш адрес email не будет опубликован.