Краткое введение в matplotlib для визуализации данных

Введение Python имеет множество полезных пакетов для машинного обучения и статистического анализа, таких как TensorFlow [https://www.tensorflow.org/], NumPy [http://www.numpy.org/], scikit-learn [http : //scikit-learn.org/stable/], Pandas [https://pandas.pydata.org/] и другие. Пакет matplotlib [https://matplotlib.org/] является важным для большинства проектов в области науки о данных. Доступен для любого дистрибутива Python, его можно установить на Python 3 с помощью pip. Также доступны другие методы, че

Вступление

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 

По сути, эта среда построения позволяет нам сохранять фигуры и их атрибуты в качестве переменных. Затем эти графики можно распечатать и просмотреть с помощью простой команды. Например, мы можем посмотреть на np.datetime64 акций Google: в частности, дату , открытие , закрытие , объем и скорректированную цену закрытия (дата сохраняется как 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 - 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] 

Построение точечной диаграммы

Чтобы построить график этих данных, вы можете использовать функции matplotlib.pyplot 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() 

{.ezlazyload .img-responsive}

Затем мы создаем метки для осей x и y , а также заголовок для графика. Мы решили построить эти данные с помощью сеток и плотного макета.

plt.show() отображает нам график.

Добавление линии

Мы можем добавить линию к этому Line2D предоставив координаты 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() 

{.ezlazyload .img-responsive}

Построение гистограмм

Чтобы построить гистограмму, мы следуем аналогичному процессу и используем функцию hist() pyplot . Мы сгенерируем 10000 случайных точек данных, x , со средним значением 100 и стандартным отклонением 15.

Функция hist принимает данные, x , количество интервалов и другие аргументы, такие как плотность , которая нормализует данные до плотности вероятности, или альфа , которая устанавливает прозрачность гистограммы.

Мы также будем использовать библиотеку 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() 

{.ezlazyload .img-responsive}

Гистограммы

В то время как гистограммы помогли нам с визуальной плотностью, гистограммы помогают нам просматривать количество данных. Чтобы построить гистограмму с помощью 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() 

{.ezlazyload .img-responsive}

Построение изображений

Анализ изображений очень распространен в 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() 

{.ezlazyload .img-responsive} {.ezlazyload .img-responsive} {.ezlazyload .img-responsive} {.ezlazyload .img-responsive} {.ezlazyload .img-responsive}

Заключение

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

comments powered by Disqus