Способы быстрого создания мощного визуального исследовательского анализа данных стали критически важными в современном бизнес-сообществе. Сегодня мы придем и поговорим о том, как использоватьpythonДавайте визуализируем данные!
Когда у вас есть хороший очищенный набор данных, следующим шагом будет исследовательский анализ данных (EDA).EDA— это процесс определения того, что данные могут нам сказать, и мы используем EDA, чтобы найти закономерности, отношения или аномалии, которые могут направить нашу дальнейшую работу. Хотя в EDA существует множество методов, одним из наиболее эффективных инструментов является парная диаграмма (также известная как матрица диаграммы рассеяния).Матрица графика рассеянияДавайте посмотрим на связь между двумя переменными. Матрицы диаграмм рассеяния — отличный способ определить тенденции для последующего анализа, и, к счастью, их легко сделать в Python. выполнить!
В этой статье мы будем использоватьбиблиотека визуализации SeabornПостройте и запустите график в Python. Мы увидим, как создавать парные графики по умолчанию для быстрого изучения наших данных и как настраивать визуализацию для более глубокого понимания. код для проектана GitHubотДоступен в виде ноутбука Jupyter.. В этом проекте мы исследуем реальный набор данных, состоящий изGapMinderСобраны национальные социально-экономические данныесочинение.
SeabornМатрица диаграммы рассеяния (Pairs Plots)
Прежде чем мы начнем, нам нужно знать, какие данные у нас есть. Мы можем загрузить социально-экономические данные с помощью фрейма данных Pandas и просмотреть столбцы:
Каждая строка данных представляет результаты для страны за год, а столбцы содержат переменные (в этом форматеданныеназываетсячистые данные). Есть 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)
Я до сих пор поражен тем, что одна простая строка кода может удовлетворить все наши потребности! Матрица диаграммы рассеяния построена на двух основных графиках: гистограмме и диаграмме рассеяния. Гистограмма по диагонали позволяет нам увидеть распределение одной переменной, а точечная диаграмма в верхнем и нижнем треугольниках показывает взаимосвязь между двумя переменными. Например, крайний левый график во второй строке показывает точечную диаграмму 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')
Сейчас мы видим самую высокую продолжительность жизни на душу населения в Океании и Европе, а самое большое население – в Азии. Обратите внимание, что наши логарифмические преобразования для населения и ВВП делают эти переменные нормально распределенными, тем самым более полно представляя значения.
Картинка выше более информативна, но все же есть некоторые проблемы: не могу найти гистограмму с накоплением, как и по диагонали, там очень легко разобраться.показыватьиз нескольких категорийОдномерное распределениеизлучший способэто карта плотности. Мы можем поменять местами график плотности гистограммы в вызове функции. Когда мы его обрабатываем, мы передаем некоторые ключевые слова на точечную диаграмму, чтобы изменить прозрачность, размер и цвет края точек.
# 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)
График плотности по диагонали облегчает сравнение распределения по континентам, чем сложенные столбцы. Изменение прозрачности точечной диаграммы может улучшить читаемость, так как цифры немного перекрываются (называетсяперекрывающиеся участки).
В качестве последнего примера парного графика по умолчанию давайте уменьшим беспорядок в данных, нанеся на график годы после 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);
Это начинает выглядеть хорошо! Если бы мы моделировали, мы могли бы использовать информацию на этих графиках, чтобы помочь нам сделать выбор. Например, мы знаем, что 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')
В этом случае мы используем двумерную (карту плотности) оценку плотности ядра в нижнем треугольнике. Собранный вместе, этот код дает нам следующий график:
Настоящее преимущество использования класса 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');
Наша новая функция сопоставляется с верхним треугольником, потому что нам нужны два массива для вычисления коэффициента корреляции (также обратите внимание, что мы можем сопоставить несколько функций с разделом сетки). Получается следующий график:
Коэффициент корреляции теперь появляется над диаграммой рассеяния. Это относительно простой пример, но мы можем использовать PairGrid для отображения любой функции на графике. Мы можем добавить столько информации, сколько захотим, пока мы можем понять, как написать функцию! В качестве последнего примера, вот диаграмма сводной статистики, на которой вместо сетки показаны диагональные линии.
Это показывает общую идею о том, что мы просто делаем значки, за исключением использования любых существующих функций в библиотеке (например,matplotlib
Помимо отображения данных на графике, мы также можем написать собственные функции для отображения пользовательской информации.
в заключении
Матрицы диаграмм рассеяния — это мощные инструменты для быстрого изучения распределений и взаимосвязей в наборе данных. Seaborn предоставляет простой метод по умолчанию для настройки и расширения матрицы диаграммы рассеяния с помощью класса Pair Grid. В проекте анализа данных основная ценность часто заключается не в кричащем машинном обучении, а в интуитивно понятной визуализации данных. Свидетельства диаграммы рассеяния предоставляют нам всесторонний анализ данных и являются хорошей отправной точкой для проекта анализа данных.
Эта статья спонсирована Beiyou@ Люблю Коко - Люблю ЖизньУчитель рекомендовал,Сообщество Alibaba Cloud YunqiОрганизация переводов.
Оригинальное название статьи "visualizing-data-with-pair-plots-in-python",
Переводчик: Ху сказал восемь способов, корректор: Юань Ху.
Статья является упрощенным переводом, для более подробной информации, пожалуйста, проверьтеоригинальный .