На прошлой неделе мы рассмотрели основы пакета matplotlib и то, что мы можем с ним сделать, теперь мы увидим, как использовать его с pandas и numpy, чтобы использовать его эффективно.

Кадры данных Pandas

Фреймы данных Pandas — это наиболее распространенная структура данных, которую мы будем использовать, и мы, очевидно, можем построить их с помощью matplolib. Когда мы представили панд, мы использовали образец о бейсболистах всего с десятью строками, потому что я удалил их все, чтобы упростить обучение. Теперь мы можем использовать полную, которую вы можете найти здесь

Но у нас есть проблема: имена столбцов плохо отформатированы. Мы можем решить эту проблему за несколько шагов: сначала мы видим имена столбцов с помощью функции keys, а затем переименовываем их с помощью функции rename:

Построение кадра данных

Мы можем быстро построить наш фрейм данных с помощью функции plot. Это не рекомендуемый способ, но для быстрых графиков работает отлично:

Таким образом, мы можем получить краткий обзор наших данных, другим примером является функция hist:

Объектно-ориентированный метод

Теперь мы знаем, как быстро увидеть нужные нам данные, но в большинстве случаев нам понадобятся хорошо структурированные и настроенные графики, и для этого эффективнее использовать объектно-ориентированный метод или метод OO. Давайте посмотрим на пример:

Теперь, когда у нас есть наш график, давайте уделим немного времени, чтобы понять, что здесь происходит: мы создаем рисунок и топор и даем им size, затем мы вызываем функцию plot в нашем фрейме данных и в функцию, которую мы объявляем

  • тип сюжета, который мы хотим (разброс)
  • ось x (возраст каждого игрока)
  • ось Y (вес наших игроков)
  • цвет графика, диапазон каждого элемента на основе третьего значения (их высота в дюймах)
  • топор, который мы замышляем. В данном случае была только одна ось, но если бы их было больше, мы могли бы ввести ax = ax[0, 0] или ax = имя_оси.

Но мы все еще не полностью используем объектно-ориентированный метод. Для этого мы должны использовать функцию subplots с использованием всего, что от нее происходит:

figure, axis = plt.subplots(figsize=(10, 7))
#creating the plot, same as before
first_plot = axis.scatter(x = bb_players['Age'],
             y = bb_players['Weight (lbs)'],
             c = bb_players['Height (inches)'])
# adding information
axis.set(title="correlations between baseball players weight and age",
        xlabel="players age",
        ylabel="players weight")
# adding the legend
axis.legend(*first_plot.legend_elements(), title = 'Weight in lbs');
# the "*" query all the elements in first_plot

Здесь мы просто создаем фигуру и настраиваем ее сюжет.
Результатом будет:

здесь есть некоторая опечатка, наиболее очевидной является легенда, относящаяся к весу, а не к росту

Теперь должно быть ясно, как сделать рисунок с помощью метода OO, но с большим количеством графиков. Примером кода может быть:

# creating a figure with more than 1 subplots
figure, (first_plot, second_plot) = plt.subplots(nrows = 2,
                                                 ncols = 1,
                                                 figsize = (12, 20))
scatter_plot = first_plot.scatter(x = bb_players['Age'],
                   y = bb_players['Weight (lbs)'],
                   c = bb_players['Height (inches)'])
first_plot.set(title="correlations between baseball players weight and age",
               xlabel="age of players",
               ylabel="weight of players")
first_plot.legend(*scatter_plot.legend_elements(), 
                  title = 'Height in inches');
# putting a line on the average data
first_plot.axhline(y = bb_players['Weight (lbs)'].mean(), 
                   color = 'r', 
                   linestyle = '-')
# second plot
second_plot.hist(x = bb_players['Age'], 
                 bins = 20)
second_plot.set(title = "Numbers of players with a certain age",
                xlabel="age of players",
                ylabel="number of players");

Как видно из кода, мы установили строки и столбцы рисунка и установили интервалы гистограммы. Бункеры — это просто единица измерения, проходящая через ось x. Гистограмма с семью бинами будет похожа на:

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

Теперь, когда код должен быть понятен, мы можем увидеть результат:

Настройка и сохранение сюжета

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

plt.style.available

Использование стиля matplotlib важно для придания смысла нашему графику, вот разница между стилем по умолчанию и тем, который вы можете выбрать:

Но, несмотря на то, что теперь он немного отличается, он все еще может сбивать с толку. Matplotlib предлагает нам функцию cmap, среди прочего, для изменения деталей стиля:

Полный справочник доступен на официальной странице документации

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

Последние мысли

Сегодня мы увидели последнюю часть пакета matplotlib python. Не то чтобы мы достаточно хорошо знали pandas, numpy и matplotlib, мы можем увидеть, как работает scikit, и начать работать над какой-либо моделью.
Если у вас есть какие-либо сомнения, не стесняйтесь оставлять комментарии.