Общие сведения о библиотеках представлены в прошлой статье. Оттуда мы знаем, что есть инструменты математических расчётов и визуализации данных, которые реализованы в библиотеках, пакетах и модулях языка. Среди них есть встроенные и подгружаемые по мере необходимости. При этом, даже из имеющихся в стандартной библиотеке пакетах не нужно подгружать все модули, чтобы загружать память, а достаточно только необходимые в моменте. Кроме того, важно и время выполнения кода. За этим может проследить модуль timeit.
1. numpy и math
Библиотека math является стандартной в Python и содержит много полезных математических функций и констант. Официальная документация Python выделяет следующие виды функций этого модуля:
- Функции теории чисел и функции представления
-Тригонометрия
-Степенные и логарифмические функции
-Функции преобразования угла
-Гиперболические функции и т.д.
Всего, вроде, около 40, и можно грузить конкретный нужный модуль.
Математика
- pow — возводит число в степень;
- abs — возвращает модуль числа;
- round — округление до указанного количества знаков после запятой.
Существенную прибавку в скорости обеспечивает библиотека numpy (Numerical Python, читается как "нампАй"). Библиотека numpy частично написана на языках Си и Фортран, благодаря чему и работает быстро. Таким образом, numpy сочетает в себе вычислительную мощность языков Си и Фортран и простоту синтаксиса Python.
Библиотека numpy является нестандартной библиотекой.
Установить библиотеку можно командой pip install numpy. После ввода команды начнётся загрузка установочного пакета и дополнительных библиотек, от которых зависит numpy. Затем начнётся процесс установки. Если установка пройдёт успешно, то вы увидите вывод в командной строке
Для импорта numpy обычно используют следующий код: import numpy as np.
Библиотека numpy работает с объектами-массивами, которые способны хранить много значений и быть многомерными (ndarray). При этом в отличие от списков массивы могут хранить только значения одного типа. За счёт этого массивы в numpy занимают меньше памяти и работают быстрее, чем списки. Создать массив можно разными способами. Один из них – использовать функцию array() для преобразования списка в массив, пример a = np.array([1, 2, 3, 4]). Для доступа к элементам массива необходимо указать индекс элемента в квадратных скобках. Индексация начинается с нуля.
Наиболее важными атрибутами класса ndarray являются:
- ndarray.ndim – размерность (количество осей) массива;
- ndarray.shape – кортеж, значения которого содержат количество элементов по каждой из осей массива;
- ndarray.size – общее количество элементов массива;
- ndarray.dtype – объект, описывающий тип данных элементов массива;
- ndarray.itemsize – размер памяти в байтах, занимаемый одним элементом массива.
Пример, np.sqrt(np.arange(3)) результатом
выполнения будет array([0. , 1. , 1.41421356]). Таким образом, будет создан массив из чисел 0, 1, 2, из которых по очереди будет взят квадратный корень.
Основной элемент библиотеки NumPy — объект ndarray (что значит N-размерный массив). Этот объект является многомерным однородным массивом с заранее заданным количеством элементов. Однородный — потому что практически все объекты в нем одного размера или типа. На самом деле, тип данных определен другим объектом NumPy, который называется dtype (тип-данных). Каждый ndarray ассоциирован только с одним типом dtype.
Функция plot служит для построения и оформления двумерных графиков
Первое, что пришло в голову построить:
Но перед этим был импортирован модуль другой библиотеки
import matplotlib.pyplot as plt.
2. SciPy
построена на базе низкоуровневой библиотеки NumPy, позволяет управлять данными, а также визуализировать их с помощью разных высокоуровневых команд.
Для полноценного научного анализа в Python нужно устанавливать и NumPy, и SciPy, поскольку последняя построена на базе NumPy. Если вы импортируете SciPy, то NumPy отдельно импортировать не нужно.
набор пакетов следующий:
Чтобы узнать о них подробнее, используйте функции help(), info() или source().
3. Pandas
Pandas – это библиотека Python, которая предоставляет быстрые, гибкие и выразительные структуры данных, предназначенные для того, чтобы сделать работу простой и интуитивно понятной. Уроки по пандас здесь и шпаргалка на хабре, а это ШАД.
Работа pandas с данными строится поверх библиотеки NumPy.
Основными типами данных в Pandas являются Series и DataFrame. Series – это проиндексированный одномерный массив значений. Он похож на простой словарь типа dict, где имя элемента будет соответствовать индексу, а значение – значению записи. DataFrame — это проиндексированный многомерный массив значений, соответственно каждый столбец DataFrame, является структурой Series.
Основные возможности библиотеки:
- Объект DataFrame для манипулирования индексированными массивами двумерных данных
- Инструменты для обмена данными между структурами в памяти и файлами различных форматов
- Встроенные средства совмещения данных и способы обработки отсутствующей информации
- Переформатирование наборов данных, в том числе создание сводных таблиц
- Срез данных по значениям индекса, расширенные возможности индексирования, выборка из больших наборов данных
- Вставка и удаление столбцов данных
- Возможности группировки позволяют выполнять трёхэтапные операции типа «разделение, изменение, объединение» (англ. split-apply-combine).
- Слияние и объединение наборов данных
- Иерархическое индексирование позволяет работать с данными высокой размерности в структурах меньшей размерности
- Работа с временными рядами: формирование временных периодов и изменение интервалов и так далее
4. matplotlib
Вообще, почти все функции пакета matplotlib работают именно с массивами numpy: принимают их в качестве аргументов или возвращают. Поэтому при работе с matplotlib желательно знать основы numpy.
Модуль pyplot — это коллекция функций в стиле команд, которая позволяет использовать matplotlib почти так же, как MATLAB. Каждая функция pyplot работает с объектами Figure и позволяет их изменять. Например, есть функции для создания объекта Figure, для создания области построения, представления линии, добавления метки и так далее.
Давайте сразу на график наложим сетку, чтобы он выглядел более информативно. Для этого достаточно прописать строчку:
plt.grid()
И можно даже два графика изобразить в одних осях:
Соответственно, указывая следующие пары в функции plot(), будут отображаться все новые и новые графики в текущих координатах. Но можно сделать и по-другому. Вызвать функцию plot() несколько раз подряд, например:
plt.plot(x, y) plt.plot(x2, y2)
Получим аналогичный эффект – два графика в одних координатах.
Axes создается автоматически при первом вызове функции plot(), если ранее, до этого не было создано ни одного Axes. А раз создается система координат, то создается и объект Figure, на котором размещаются оси. Поэтому в нашей программе, при первом вызове функции plot() было создано два объекта:
- Figure – объект для отображения всех данных, связанных с графиком;
- Axes – двумерная координатная ось декартовой системы.
Если третьим параметром в plot() указать строку с двумя дефисами:
plt.plot(x, y, '--')
то график будет изображен не сплошной линией, а штрихами.
Цвет можно менять по английскому названию указанной первой буквы. Например,
b = blue, r = red, g = green, c = cyan, w = white
Если два графика в одних осях пишем
lines = plt.plot(x, y, '--g', x2, y2, ':m').
указать цвета не только предопределенными символами, но, например, в шестнадцатиричной записи HEX:
lines = plt.plot(x, y, '--g', x2, y2, ':m', color='#0000CC')
Цветовой код можно посмотреть в палитре.
Или в виде кортежей формата: RGB и RGBA
lines = plt.plot(x, y, '--g', x2, y2, ':m', color=(0, 0, 0))
lines = plt.plot(x, y, '--g', x2, y2, ':m', c=(0, 0, 0, 0.5))
Можно поменять тип маркеров у точек. Для этого в форматную строку достаточно прописать один из предопределенных символов. Например, вот такая запись:
plt.plot(x2, y2, ':o')
отображает график с круглыми точками:
Например, так:
Другой способ определения маркера – использование параметра marker:
lines = plt.plot(x, y, '-go', x2, y2, 's:m', marker='d') - для обоих графиков будет присвоен один и тот же маркер типа 'd'.
Для задания цвета маркера, отличного от цвета линии, применяется параметр markerfacecolor:
lines = plt.plot(x, y, '-go', x2, y2, 's:m', marker='d', markerfacecolor='w')
здесь он белый - цвет заливки маркера.
Все эти же действия по оформлению графика можно выполнять и с помощью функции setp().
plt.setp(lines[0], linestyle='-.', marker='s', markerfacecolor='b', linewidth=4)
Какие еще именованные параметры есть у функций setp() и plot()
можно делать заливку областей графика с помощью функции:
fill_between(x, y1, y2=0, where=None, interpolate=False, step=None, *, data=None, **kwargs)
Основные параметры здесь следующие:
- x, y1 – массивы значений координат x и функции y1;
- y2 – массив (или число) для второй кривой, до которой производится заливка;
- where – массив булевых элементов, который определяет области для заливки.
Легенда - отобразить легенду можно с помощью метода ax.legend().
нам нужно для каждой линии (графика) добавить символьное имя. Это делается с помощью именованного параметра label:
ax.plot(np.arange(0, 5, 0.25), label='line1') ax.plot(np.arange(0, 10, 0.5), label='line2')
Давайте сгенерируем вектор из 500 случайных величин и выведем их в виде гистограммы, используя функцию hist():
Функции bar() и barh()
Похожий график можно сформировать и с помощью функции bar. Ей на вход, в самом простом варианте, нужно передать список отметок для столбцов x и значения высот каждого столбца y: bar(x, y)
x = [f'H{i+1}' for i in range(10)]
y = np.random.randint(1, 5, len(x))
ax.bar(x, y)
Если нам нужно отображать столбики относительно оси ординат, то для этого существует функция barh(), которая работает аналогично функции bar():
ax.barh(range(len(x)-1), bars)
параметры обеих функций
Круговые диаграммы
- используется функция pie(), например, следующим образом:
параметры функции
Трехмерные графики в пакете matplotlib
Такая возможность появилась, начиная с версии 0.99, поэтому убедитесь, что ваш пакет поддерживает трехмерные графики.
Все дополнительные классы для работы в 3D находятся в модуле:
mpl_toolkits.mplot3d
и вначале мы его импортируем в нашу программу наряду с самим пакетом matplotlib и numpy:
Итак, я построила трёхмерную дуру, по-Масяне, потом её анимирую.
Анимация графиков - FuncAnimation и ArtistAnimation
Для упрощения создания анимации в пакете matplotlib предусмотрено два специальных класса:
- FuncAnimation – создание анимации на основе функции;
- ArtistAnimation – создание покадровой анимации.
с помощью импорта запускаем
from matplotlib.animation import FuncAnimation
С помощью класса ArtistAnimation анимация создается на основе уже готового списка объектов для каждого кадра. Поэтому, такой подход требует гораздо больше памяти устройства, чем с использованием класса FuncAnimation. Но плюсом является возможность создания более сложной анимационной картины.
Список для ArtistAnimation должен состоять из объектов, производных от класса:
matplotlib.artist.Artist
Данный класс хорошо подходит для анимирования 3D фигур, так как на их формирование требуется некоторое время.
5. Seaborn
— библиотека визуализации, основанная на бэкенде Matplotlib, тесно взаимодействует со структурами данных пандас. Перед началом импортируют несколько модулей:
import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib
Плюсы
1. построение простых графиков в одну строчку кода
2. эстетичность - встроенные стили не требуют вмешательства.
6. Рисование графических примитивов в оконном интерфейсе программы - wxPython + PyGame для элементарной анимации
- пакет для графики описан в ссылке,
также там про матплотлиб, нампай, PyGame (библиотеку для рисования и манипуляцией графическими объектами), фласк и наследование +джава и джаваскрипт.
- рисования графических объектов;
- отслеживания различных событий (клавиатуры, мыши, таймера и т.п);
- отслеживания и изменения состояний объектов (создание анимации, контроль столкновений);
- быстрой отрисовки изменений на экране устройства пользователя;
- работы со звуковыми эффектами.
не игровой движок, но очень удобен, когда нужно быстро реализовать графическое приложение с элементарной анимацией на плоскости и некоторыми звуковыми эффектами.
Вообще, PyGame – это Python-обертка над С++ - библиотекой Simple Directmedia Layer (SDL) и имеет большое интернет-сообщество с официальным сайтом:
и подробной документацией: