如何利用散点图矩阵进行数据可视化大数据应用

来源:互联网 / 作者:SKY / 2018-05-07 18:15 / 点击:
本文,我们将介绍如何使用 Seaborn 可视化库(https://seaborn.pydata.org/)在 Python 中启动和运行散点图矩阵。我们将看到如何为快速检查数据而创建默认散点图矩

如何快速构建强大的探索性数据分析可视化

当你得到一个很不错的干净数据集时,下一步就是探索性数据分析(Exploratory Data Analysis,EDA)。EDA 可以帮助发现数据想告诉我们什么,可用于寻找模式、关系或者异常来指导我们后续的分析。尽管在 EDA 中有很多种可以使用的方法,但是其中最有效的启动工具之一就是散点图矩阵(pairs plot,也叫做 scatterplot matrix)。散点图矩阵允许同时看到多个单独变量的分布和它们两两之间的关系。散点图矩阵是为后续分析识别趋势的很棒方法,幸运的是,用 Python 实现也是相当简单的。

本文,我们将介绍如何使用 Seaborn 可视化库(https://seaborn.pydata.org/)在 Python 中启动和运行散点图矩阵。我们将看到如何为快速检查数据而创建默认散点图矩阵,以及如何为了更深入的分析定制可视化方案。

代码地址:https://github.com/WillKoehrsen/Data-Analysis/blob/master/pairplots/Pair%20Plots.ipynb

我们将探索一个现实世界数据集,它由国家级的社会经济数据组成,这些数据都是 Gapminder 收集的。

Seaborn 中的散点图矩阵

我们需要先了解一下数据,以便开始后续的进展。我们可以 pandas 数据帧的形式加载这些社会经济数据,然后我们会看到下面这些列:

如何利用散点图矩阵进行数据可视化

每一行代表一个国家一年的观察数据,列代表变量(这种格式的数据被称作整洁数据,tidy data),其中有两个类别列(国家和洲)和四个数值列。这些列简单易懂:life_exp 是出生时的预期寿命,以年为单位,popis 是人口数量,gdp_per_cap 是人均 GDP(以国际元)为单位。

seaborn 中的默认散点图矩阵仅仅画出数值列,尽管我们随后也会使用类别变量来着色。创建默认的散点图矩阵很简单:我们加载 seaborn 库,然后调用 pairplot 函数,向它传递我们的数据帧即可:

# Seaborn visualization library 

import seaborn as sns 

Create the default pairplot 

sns.pairplot(df) 

如何利用散点图矩阵进行数据可视化

我仍旧大为吃惊,一行简单的代码就能够让我们得到整个图。散点图矩阵会构建两种基本图形:直方图和散点图。位于对角线位置的直方图让我们看到了每一个变量的分布,而对角线上下的散点图则展示了变量两两之间的关系。例如,第二行最左侧的散点图展示了 life_exp 和 year 之间的关系。

默认的散点图矩阵通常能够提供有价值的洞见。我们可以看到 life-exp 和 gdp_per_cap 是正相关的,这表明较高收入国家的国民要活得更久一些(尽管这并不能表明二者存在因果关系)。令人欣慰的是,这也显示出世界范围内的人口寿命随着时间逐渐增长。我们可以从直方图中了解到人口和 GDP 变量呈严重右偏态分布。为了在以后的图中更好地展示这些变量,我们可以通过对列数值取对数来进行列变换:

# 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 函数的时候使用关键词 hue。

sns.pairplot(df, hue = 'continent'

如何利用散点图矩阵进行数据可视化

现在我们发现大洋洲和欧洲趋向于拥有最高的期望寿命,而亚洲拥有最多的人口量。注意我们对人口和 GDP 的对数变换使得这些变量呈正态分布,这提供了一个关于这些变量更加全面的表征。

这张图具有更多的信息,但是还存在一些问题:正如对角线上看到的一样,我认为堆叠的直方图可解释性不是很好。展示来自多类别的单变量分布的一个更好方法就是密度图(density plot)。我们可以通过调用函数将直方图变成密度图。向散点图输入一些关键词,改变点的透明度、大小和边缘颜色。

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) 

如何利用散点图矩阵进行数据可视化

对角线上的密度图使得对比洲之间的分布相对于堆叠的直方图更加容易。改变散点图的透明度增加了图的可读性,因为这些图存在相当多的重叠(ovelapping)。

阅读延展

1
3