Практика Python: данные визуализации матрицы диаграммы рассеяния Seaborn (Pairs Plots)

Python визуализация данных

Способы быстрого создания мощного визуального исследовательского анализа данных стали критически важными в современном бизнес-сообществе. Сегодня мы придем и поговорим о том, как использоватьpythonДавайте визуализируем данные!

Когда у вас есть хороший очищенный набор данных, следующим шагом будет исследовательский анализ данных (EDA).EDA— это процесс определения того, что данные могут нам сказать, и мы используем EDA, чтобы найти закономерности, отношения или аномалии, которые могут направить нашу дальнейшую работу. Хотя в EDA существует множество методов, одним из наиболее эффективных инструментов является парная диаграмма (также известная как матрица диаграммы рассеяния).Матрица графика рассеянияДавайте посмотрим на связь между двумя переменными. Матрицы диаграмм рассеяния — отличный способ определить тенденции для последующего анализа, и, к счастью, их легко сделать в Python. выполнить!

В этой статье мы будем использоватьбиблиотека визуализации SeabornПостройте и запустите график в Python. Мы увидим, как создавать парные графики по умолчанию для быстрого изучения наших данных и как настраивать визуализацию для более глубокого понимания. код для проектана GitHubотДоступен в виде ноутбука Jupyter.. В этом проекте мы исследуем реальный набор данных, состоящий изGapMinderСобраны национальные социально-экономические данныесочинение.

SeabornМатрица диаграммы рассеяния (Pairs Plots)

Прежде чем мы начнем, нам нужно знать, какие данные у нас есть. Мы можем загрузить социально-экономические данные с помощью фрейма данных Pandas и просмотреть столбцы:

95ed713028089a443d0f196ac28b7c2aa12c0fdb

Каждая строка данных представляет результаты для страны за год, а столбцы содержат переменные (в этом форматеданныеназываетсячистые данные). Есть 2 категориальных столбца (страна и континент) и 4 числовых столбца. Эти столбцы включают:life_expожидаемая продолжительность жизни при рождении в годах,popэто население,gdp_per_capдамеждународный долларВВП на душу населения.

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

# Seaborn visualization library
import seaborn as sns
# Create the default pairplot
sns.pairplot(df)
5814452fdf88bd18dd605d71d07ef1b985d9c08b

Я до сих пор поражен тем, что одна простая строка кода может удовлетворить все наши потребности! Матрица диаграммы рассеяния построена на двух основных графиках: гистограмме и диаграмме рассеяния. Гистограмма по диагонали позволяет нам увидеть распределение одной переменной, а точечная диаграмма в верхнем и нижнем треугольниках показывает взаимосвязь между двумя переменными. Например, крайний левый график во второй строке показывает точечную диаграмму life_exp в зависимости от года.

Матрица диаграммы рассеяния по умолчанию часто дает нам ценную информацию. Мы видим положительную корреляцию между ожидаемой продолжительностью жизни и ВВП на душу населения, предполагая, что люди в странах с высоким уровнем дохода, как правило, живут дольше (хотя это, конечно,не может быть доказано, что они вызывают другиетоже так). Похоже также, что ожидаемая продолжительность жизни во всем мире со временем растет. Чтобы лучше отображать эти переменные на будущих графиках, мы можем преобразовать эти столбцы, взяв логарифм значений:

# Take the log of population and gdp_per_capita
df['log_pop'] = np.log10(df['pop'])
df['log_gdp_per_cap'] = np.log10(df['gdp_per_cap'])

# Drop the non-transformed columns
df = df.drop(columns = ['pop', 'gdp_per_cap'])

Хотя само по себе такое отображение можно использовать для анализа, мы можем найти его более ценным, раскрашивая численно категориальные переменные, такие как континенты. Это очень легко в Seaborn! Все, что нам нужно сделать, это вызвать функцию sns.pairplot в оттенке, используя ключевое слово:

sns.pairplot(df, hue = 'continent')
8e5e598f774fd4aa1a819afb4e4294f1e950ac38

Сейчас мы видим самую высокую продолжительность жизни на душу населения в Океании и Европе, а самое большое население – в Азии. Обратите внимание, что наши логарифмические преобразования для населения и ВВП делают эти переменные нормально распределенными, тем самым более полно представляя значения.

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

# Create a pair plot colored by continent with a density plot of the # diagonal and format the scatter plots.
sns.pairplot(df, hue = 'continent', diag_kind = 'kde',
             plot_kws = {'alpha': 0.6, 's': 80, 'edgecolor': 'k'},
             size = 4)
75e0e96df2503d25cb5ee9edb07b45af9d921526

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

В качестве последнего примера парного графика по умолчанию давайте уменьшим беспорядок в данных, нанеся на график годы после 2000 года. Мы по-прежнему будем раскрашивать по континентальному распределению, но теперь мы не будем строить столбец года. Чтобы ограничить нарисованные столбцы, мы передаем списокvarsк функции. Чтобы проиллюстрировать сюжет, мы также можем добавить заголовок.


# Plot colored by continent for years 2000-2007
sns.pairplot(df[df['year'] >= 2000], 
             vars = ['life_exp', 'log_pop', 'log_gdp_per_cap'], 
             hue = 'continent', diag_kind = 'kde', 
             plot_kws = {'alpha': 0.6, 's': 80, 'edgecolor': 'k'},
             size = 4);
# Title 
plt.suptitle('Pair Plot of Socioeconomic Data for 2000-2007', 
             size = 28);
8b8cfbffae8f4451d0dc1cffbbbad4e6447b8e0d

Это начинает выглядеть хорошо! Если бы мы моделировали, мы могли бы использовать информацию на этих графиках, чтобы помочь нам сделать выбор. Например, мы знаем, что log_gdp_per_cap положительно связан с life_exp, поэтому мы можем создать линейную модель для количественной оценки этой взаимосвязи. В этой статье мы остановимся на построении графиков, и если мы хотим больше изучить наши данные, мы можем использовать класс PairGrid для настройки матрицы диаграммы рассеяния.

Настройте с помощью PairGrid

иsns.pairplotФункция обратная,sns.PairGridэто класс, что означает, что он не будет автоматически заполнять нашу сетку. Вместо этого мы создаем экземпляр класса, а затем сопоставляем определенные функции с различными частями сетки. Чтобы создать экземпляр PairGrid с нашими данными, мы используем следующий код, который также ограничивает отображаемые переменные:


# Create an instance of the PairGrid class.
grid = sns.PairGrid(data= df_log[df_log['year'] == 2007],
                    vars = ['life_exp', 'log_pop', 
                    'log_gdp_per_cap'], size = 4)

Если бы мы отобразили его, мы бы получили пустой график, потому что мы не сопоставили никакие функции с частью сетки. Для заполнения PairGrid есть три части сетки: верхний треугольник, нижний треугольник и диагональ. Чтобы сопоставить сетку с этими разделами, мы используем методы из раздела grid.map. Например, чтобы сопоставить точечный график с верхним треугольником, мы используем:


# Map a scatter plot to the upper triangle
grid = grid.map_upper(plt.scatter, color = 'darkred')

Метод map_upper принимает любую функцию двух массивов переменных (например, plt.scatter) и связанных ключевых слов (например, цвет). Метод map_lower точно такой же, но заполняет нижний треугольник меша. Функция немного отличается, потому что она принимает один массив (помните, что диагональ показывает только одну переменную). Примером является plt.hist, который мы используем для заполнения диагонального раздела ниже:


# Map a histogram to the diagonal
grid = grid.map_diag(plt.hist, bins = 10, color = 'darkred', 
                     edgecolor = 'k')
# Map a density plot to the lower triangle
grid = grid.map_lower(sns.kdeplot, cmap = 'Reds')

В этом случае мы используем двумерную (карту плотности) оценку плотности ядра в нижнем треугольнике. Собранный вместе, этот код дает нам следующий график:

69a544e1c0eb50dfc36888602021d7fb33d5d461

Настоящее преимущество использования класса PairGrid заключается в том, что мы хотим создавать пользовательские функции для отображения различной информации на графике. Например, я мог бы захотеть переключаться между двумя переменнымиКоэффициент корреляции Пирсонадобавлено в диаграмму рассеяния. Для этого я бы написал функцию, которая берет два массива, вычисляет статистику и отображает ее на графике. В приведенном ниже коде показано, как это делается (кредит этомуОтветы на переполнение стека):


# Function to calculate correlation coefficient between two arrays
def corr(x, y, **kwargs):
    # Calculate the value
    coef = np.corrcoef(x, y)[0][1]
    # Make the label
    label = r'$\rho$ = ' + str(round(coef, 2))
    # Add the label to the plot
    ax = plt.gca()
    ax.annotate(label, xy = (0.2, 0.95), size = 20, xycoords = ax.transAxes)
# Create a pair grid instance
grid = sns.PairGrid(data= df[df['year'] == 2007],
                    vars = ['life_exp', 'log_pop', 'log_gdp_per_cap'], size = 4)

# Map the plots to the locations
grid = grid.map_upper(plt.scatter, color = 'darkred')
grid = grid.map_upper(corr)
grid = grid.map_lower(sns.kdeplot, cmap = 'Reds')
grid = grid.map_diag(plt.hist, bins = 10, edgecolor =  'k', color = 'darkred');

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

2e2b961261ada9aafbd92bd7640462817bf9e01f

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

b4767adb43362a3f812c4df8fadaeca57b480b9e

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

в заключении

Матрицы диаграмм рассеяния — это мощные инструменты для быстрого изучения распределений и взаимосвязей в наборе данных. Seaborn предоставляет простой метод по умолчанию для настройки и расширения матрицы диаграммы рассеяния с помощью класса Pair Grid. В проекте анализа данных основная ценность часто заключается не в кричащем машинном обучении, а в интуитивно понятной визуализации данных. Свидетельства диаграммы рассеяния предоставляют нам всесторонний анализ данных и являются хорошей отправной точкой для проекта анализа данных.

Десятки продуктов Alibaba Cloud имеют временные скидки. Нажмите на купон, чтобы начать практиковаться в облаке!

Эта статья спонсирована Beiyou@ Люблю Коко - Люблю ЖизньУчитель рекомендовал,Сообщество Alibaba Cloud YunqiОрганизация переводов.

Оригинальное название статьи "visualizing-data-with-pair-plots-in-python",

Переводчик: Ху сказал восемь способов, корректор: Юань Ху.

Статья является упрощенным переводом, для более подробной информации, пожалуйста, проверьтеоригинальный .