Автор оригинала: Guest Contributor.
Вступление
Python имеет широкий спектр полезных пакетов для машинного обучения и статистического анализа, таких как TensorFlow , NumPy , scikit-learn , Pandas и многое другое. Одним из пакетов, который необходим для большинства проектов в области науки о данных, является matplotlib .
Доступный для любого дистрибутива Python, он может быть установлен на Python 3 с помощью pip
. Другие методы также доступны, проверьте https://matplotlib.org/ для получения более подробной информации.
Установка
Если вы используете ОС с терминалом, следующая команда установит matplotlib с pip:
$ python3 -m pip install matplotlib
Импорт и Окружающая среда
В файле Python мы хотим импортировать функцию pyplot
, которая позволяет нам взаимодействовать с графической средой, подобной MATLAB. Мы также импортируем функцию lines
, которая позволяет нам добавлять линии на графики:
import matplotlib.pyplot as plt import matplotlib.lines as mlines
По сути, эта среда построения графиков позволяет нам сохранять фигуры и их атрибуты как переменные. Затем эти графики можно распечатать и просмотреть с помощью простой команды. Например, мы можем посмотреть на цену акций Google: в частности, date , open , close , volume и adjusted close price (дата хранится как np.datetime64
) за последние 250 дней:
import numpy as np import matplotlib.pyplot as plt import matplotlib.cbook as cbook with cbook.get_sample_data('goog.npz') as datafile: price_data = np.load(datafile)['price_data'].view(np.recarray) price_data = price_data[-250:] # get the most recent 250 trading days
Затем мы преобразуем данные так, как это часто делается для временных рядов и т. Д. Мы находим разницу, $d_i$
, между каждым наблюдением и предыдущим:
$$d_i – y_{i – 1} $$
delta1 = np.diff(price_data.adj_close) / price_data.adj_close[:-1]
Мы также можем посмотреть на преобразования различных переменных, таких как объем и цена закрытия :
# Marker size in units of points^2 volume = (15 * price_data.volume[:-2] / price_data.volume[0])**2 close = 0.003 * price_data.close[:-2] / 0.003 * price_data.open[:-2]
Построение точечной диаграммы
Чтобы на самом деле построить эти данные, вы можете использовать функции subplots()
из plt
( matplotlib.pyplot
). По умолчанию это создает область для фигуры и осей графика.
Здесь мы сделаем точечную диаграмму различий между последовательными днями. Чтобы уточнить, x – это разница между днем i и предыдущим днем. y – это разница между днем i+1 и предыдущим днем ( i ):
fig, ax = plt.subplots() ax.scatter(delta1[:-1], delta1[1:], c=close, s=volume, alpha=0.5) ax.set_xlabel(r'$\Delta_i$', fontsize=15) ax.set_ylabel(r'$\Delta_{i+1}$', fontsize=15) ax.set_title('Volume and percent change') ax.grid(True) fig.tight_layout() plt.show()
Затем мы создаем метки для осей x и y , а также заголовок для графика. Мы выбираем построение этих данных с помощью сеток и плотной компоновки.
plt.show()
отображает сюжет для нас.
Добавление строки
Мы можем добавить линию к этому участку, предоставив координаты x и y в виде списков экземпляру Line2D
:
import matplotlib.lines as mlines fig, ax = plt.subplots() line = mlines.Line2D([-.15,0.25], [-.07,0.09], color='red') ax.add_line(line) # reusing scatterplot code ax.scatter(delta1[:-1], delta1[1:], c=close, s=volume, alpha=0.5) ax.set_xlabel(r'$\Delta_i$', fontsize=15) ax.set_ylabel(r'$\Delta_{i+1}$', fontsize=15) ax.set_title('Volume and percent change') ax.grid(True) fig.tight_layout() plt.show()
Построение Гистограмм
Чтобы построить гистограмму, мы следуем аналогичному процессу и используем функцию hist()
из pyplot
. Мы сгенерируем 10000 случайных точек данных, x , со средним значением 100 и стандартным отклонением 15.
Функция hist
принимает данные, x , количество ячеек и другие аргументы, такие как density , которая нормализует данные к плотности вероятности, или alpha , которая устанавливает прозрачность гистограммы.
Мы также будем использовать библиотеку mlab для добавления линии, представляющей нормальную функцию плотности с тем же средним и стандартным отклонением:
import numpy as np import matplotlib.mlab as mlab import matplotlib.pyplot as plt mu, sigma = 100, 15 x = mu + sigma*np.random.randn(10000) # the histogram of the data n, bins, patches = plt.hist(x, 30, density=1, facecolor='blue', alpha=0.75) # add a 'best fit' line y = mlab.normpdf( bins, mu, sigma) l = plt.plot(bins, y, 'r--', linewidth=4) plt.xlabel('IQ') plt.ylabel('Probability') plt.title(r'$\mathrm{Histogram\ of\ IQ:}\ \mu=100,\ \sigma=15$') plt.axis([40, 160, 0, 0.03]) plt.grid(True) plt.show()
Гистограммы
В то время как гистограммы помогают нам с визуальной плотностью, гистограммы помогают нам просматривать количество данных. Чтобы построить гистограмму с помощью matplotlib, мы используем функцию bar ()
. Это принимает подсчеты и метки данных как x и y вместе с другими аргументами.
В качестве примера можно привести пример числа программистов, использующих разные языки:
import numpy as np import matplotlib.pyplot as plt objects = ('Python', 'C++', 'Java', 'Perl', 'Scala', 'Lisp') y_pos = np.arange(len(objects)) performance = [10,8,6,4,2,1] plt.bar(y_pos, performance, align='center', alpha=0.5) plt.xticks(y_pos, objects) plt.ylabel('Usage') plt.title('Programming language usage') plt.show()
Построение Графиков Изображений
Анализ изображений очень распространен в Python. Неудивительно, что мы можем использовать matplotlib для просмотра изображений. Мы используем библиотеку cv2 для чтения изображений.
Краткое описание функции read_image()
приведено ниже:
- считывает файл изображения
- разбивает цветовые каналы
- изменяет их на RGB
- изменение размера изображения
- возвращает матрицу значений RGB
Остальная часть кода считывается в первые пять изображений кошек и собак из данных, используемых в распознавании изображений CNN. Изображения объединены и напечатаны на одной оси:
import matplotlib.pyplot as plt import numpy as np import os, cv2 cwd = os.getcwd() TRAIN_DIR = cwd + '/data/train/' ROWS = 256 COLS = 256 CHANNELS = 3 train_images = [TRAIN_DIR+i for i in os.listdir(TRAIN_DIR)] # use this for full dataset train_dogs = [TRAIN_DIR+i for i in os.listdir(TRAIN_DIR) if 'dog' in i] train_cats = [TRAIN_DIR+i for i in os.listdir(TRAIN_DIR) if 'cat' in i] def read_image(file_path): img = cv2.imread(file_path, cv2.IMREAD_COLOR) #cv2.IMREAD_GRAYSCALE b,g,r = cv2.split(img) img2 = cv2.merge([r,g,b]) return cv2.resize(img2, (ROWS, COLS), interpolation=cv2.INTER_CUBIC) for a in range(0,5): cat = read_image(train_cats[a]) dog = read_image(train_dogs[a]) pair = np.concatenate((cat, dog), axis=1) plt.figure(figsize=(10,5)) plt.imshow(pair) plt.show()
Вывод
В этом посте мы увидели краткое введение о том, как использовать matplotlib для построения данных в точечных диаграммах, гистограммах и гистограммах. Мы также добавили линии к этим участкам. Наконец, мы увидели, как читать в изображениях с помощью библиотеки cv2 и использовали matplotlib для построения изображений.