Введение

Добро пожаловать в раздел визуализации серии Pandas. В частях 1 и 2 были рассмотрены основы самой библиотеки pandas для начала работы с EDA и этапы обработки данных с использованием наиболее известных методов, которые может предложить библиотека.

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

Matplotlib имеет модуль с именем pyplot, который предоставляет нам структуру, подобную MATLAB, и я не уверен, что это означает, поскольку я никогда не использовал его лично, и вам не придется, поэтому просто представьте, что у него есть удобный интерфейс, в котором вы есть множество вариантов, которые можно легко опробовать и создать визуальные эффекты.
Позже Seaborn был построен на основе библиотеки matplotlib с большей функциональностью и улучшенной эстетикой.

Показатель

  • Матплотлиб
  • Сиборн
  • Изучение набора данных для визуализации числовых значений
  • Изучение набора данных для визуализации категориальных значений

Матплотлиб

В этой статье мы рассмотрим интересный набор данных и рассмотрим технику множественной визуализации с использованием matplotlib и seaborn.

Давайте начнем с чтения нашего набора данных в нашу записную книжку jupyter и проведем базовое исследование.

## Importing Essential Libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
plt.rcParams['figure.figsize'] = [20,10]
pd.options.display.max_rows = 1000
pd.options.display.max_columns = 1000

Загрузить данные

data = pd.read_csv("Video_Games_Sales_as_at_22_Dec_2016.csv")
data.head()

Первый метод визуализации с использованием pandas - это использование метода plot в его Series и DataFrame. По сути, это простая оболочка для plt.plot().

data.Name.value_counts().head(15).sort_values(ascending = True).plot(kind = 'barh' , figsize = (10,10))
## barh is used for horizontal view, use bar for normal.

В приведенном выше примере столбец Имя является категориальным типом, и для построения этих данных необходимо иметь какое-то измеримое значение вокруг них, например общее количество наблюдений в имени столбца. Здесь я использую метод value_counts () для подсчета общего количества вхождений каждой уникальной категории в Name. Точно так же это можно сделать для любого категориального столбца, и обратите внимание, что гистограмма - это распространенный способ представления этого типа данных.

data.groupby(['Platform' , 'Genre'] , as_index=False)[['NA_Sales', 'EU_Sales']].sum().sort_values(by = ['NA_Sales' , 'EU_Sales'], ascending = [0,0]).head(15).plot(kind = 'bar',xlabel = "Country")

Если вы прочитаете часть 2 статьи из этой серии, вы точно будете знать, что делает этот код. Здесь мы создаем сгруппированную линейчатую диаграмму нашего результирующего набора данных, созданную путем группирования двух столбцов платформа и жанр. Наши количественные значения для этих категориальных столбцов представляют собой сумму NA_sales и EU_sales .
Параметр as_index используется для преобразования значений индекса в значение столбца для фрейма данных pandas, чтобы его можно было экспортировать или просто использовать для построения графика.

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

Теперь вместо использования метода plot (), встроенного в библиотеку pandas, мы можем явно вызывать эту функцию из библиотеки matplotlib.pyplot и создавать более настраиваемые диаграммы.

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

df['NA_EU_sales'] = (df['NA_Sales'] + df['EU_Sales'])
df.head()

NA_EU_sales представляет собой общий объем продаж для регионов Северной Америки и ЕС. Мы можем использовать этот измеримый атрибут, чтобы сопоставить с ним другие категориальные атрибуты.

Вопрос: «График зависимости жанров всех игр от общих продаж в Северной Америке и ЕС вместе взятых»

plt.bar(x ='Genre' ,height='NA_EU_sales' , data=df)
plt.ylabel("Total Sales")
plt.xlabel("Platform")
plt.title("Total Sales in NA and EU by Platform")

Сиборн

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

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

Графики распределения

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

  • Какой диапазон охватывают наблюдения?
  • Мои данные несбалансированы, искажены или нормально распределены.
  • Есть ли в наборе данных значительные выбросы?

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

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

sns.displot(data['User_Score'] , kde = True , bins = 10)

displot () / histplot () в основном те же гистограммы построения графиков по оси x, чтобы показать распределение данных. На приведенной выше диаграмме мы видим, что наивысший балл пользователя составляет около 8, за которым следует 7, и это лучший способ представить диаграмму для такого быстрого понимания.

Бины - важный параметр, и его необходимо устанавливать с умом, в зависимости от вашей интуиции в отношении вывода, в противном случае неправильное значение ячейки может изменить представление всей диаграммы, например, позволяет увидеть график с bin = 5 .

sns.displot(data['User_Score'] , kde = True , bins = 5)

Вы можете ясно видеть, что, уменьшив количество ячеек до 5, мы не понимаем, что представляют собой эти данные. Можно предположить, что максимальные значения лежат в диапазоне 6–10, что может ввести в заблуждение.

# loading new dataset withing seaborn package for better examples. 
df_car = sns.load_dataset("car_crashes")
df_car.head()

Сюжет ()

sns.jointplot('total' ,'alcohol' , data = df_car , kind = 'reg')

По умолчанию jointplot() представляет двумерное распределение с использованием scatterplot() и маржинальное распределение с использованием histplot():

здесь, если вы установите тип графика с помощью kind = «reg», он проведет линию регрессии через точку данных и лучше отобразит взаимосвязь внутри.

Pairplot ()

Функция pairplot() лучше всего отображает взаимосвязь между каждым атрибутом в вашем наборе данных, она предлагает аналогичное сочетание совместного и маржинального распределений.
Однако вместо того, чтобы сосредотачиваться на одном отношении, pairplot() использует подход малое множественное для визуализации одномерного распределения всех переменных в наборе данных вместе со всеми их парными отношениями:

sns.pairplot(df_car)

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

Категориальные графики

Хорошо, теперь вы знаете, что использовать для числовых данных и визуализировать распределение, но что лучше всего работает, когда у вас есть категориальные значения. Они, естественно, отличаются от числовых значений, поэтому у seaborn есть несколько специальных функций, чтобы справиться с ними наилучшим образом.

barplot ()

sns.barplot(x = 'Genre' , y = 'NA_EU_sales' , data=df , estimator= np.std)

В seaborn функция barplot() работает с полным набором данных и применяет функцию для получения оценки (по умолчанию беря среднее значение). Параметр Estimator = «np.std» в основном вычисляет стандартное отклонение, и вы можете использовать различные исходящие показатели, а именно среднее, минимальное, максимальное и т. Д.

Диаграмма рассеяния ()

sns.scatterplot(x = 'User_Count' , y = 'User_Score' , data=data)

Точечные диаграммы очень полезны для простого рисования взаимосвязей между несколькими атрибутами, они показывают распределение всех точек данных в 2D-пространстве и очень четко показывают, где находится большая часть данных.

boxplot ()

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

sns.boxplot(data= df.drop(['Year_of_Release' , 'Genre'], axis=1).head(50) , orient= 'h' ,palette="Set1")

Этот вид графика показывает три квартиля распределения вместе с крайними значениями. «Усы» простираются до точек, которые лежат в пределах 1,5 IQR от нижнего и верхнего квартилей, а затем наблюдения, выходящие за пределы этого диапазона, отображаются независимо. Это означает, что каждое значение на коробчатой ​​диаграмме соответствует фактическому наблюдению в данных.

Тепловая карта ()

df_car_corr = df_car.corr()
df_car_corr.head()
sns.heatmap(df_car_corr , annot= True , cmap = "Blues")

Чтобы найти корреляции между всеми атрибутами, heatmap () - лучший репрезентативный график, отображающий сильные и наименее связанные переменные.
Это очень важно в процессе машинного обучения, когда вам нужно понимать, насколько хорошо переменные связаны друг с другом. Чтобы интерпретировать эту диаграмму, помните, что чем темнее оттенок прямоугольника, тем сильнее связь.
Например, мы видим, что total и no_previous очень сильно связаны, за ними следует no_distracted, алкоголь и т. д.

Вывод.

  • Итак, в заключение, всегда помните, что эти быстрые способы построения диаграмм с использованием библиотек matplotlib и seaborn - лучший способ визуализировать ваши выводы из EDA и преобразовать информацию в графики и информационные панели.
  • Кроме того, это лишь некоторые из параметров, указанных здесь, потому что охватить все просто невозможно, потому что их так много, поэтому для каждой библиотеки есть специальные страницы документации.
  • В четвертой части этой серии мы подведем итог этим знаниям, и я поделюсь некоторой информацией о статистическом моделировании с использованием панд.

Другие статьи.

  • Часть 1 и Часть 2 связаны здесь, проверьте это, если вы еще этого не сделали.