ABSTRACT
本文将探讨三种用Python可视化数据的不同方法。以可视化《2019年世界幸福报告》的数据为例,本文用Gapminder和Wikipedia的信息丰富了《世界幸福报告》数据,以探索新的数据关系和可视化方法,《世界幸福报告》试图回答世界范围内影响幸福的因素。报告根据对“坎特里尔阶梯问题”的回答来确定幸福指数,被调查者需对自己的生活状况进行打分,10分为最佳状态,0分为最差。本文将使用Cantril Ladder作为目标变量。Cantril Ladder就是指幸福指数。
使用包的简介
Matplotlib:
最初,我用matplotlib创建的几乎每个图表看起来都很过时。例如,研究改变x斜度的基本命令或者类似这些的蠢事。我一点也不想做多图表。以编程的方式创建这些图表是非常奇妙的,例如,一次生成50个不同变量的图表,结果令人印象深刻。然而,其中涉及大量的工作,需要记住一大堆无用的指令。
Seaborn:
学习Seaborn能够节省很多精力。Seaborn可以抽象出大量的微调。毫无疑问,这使得图表在美观上得到巨大的改善。然而,它也是构建在matplotlib之上的。通常,对于非标准的调整,仍然有必要使用机器级的matplotlib代码。
Bokeh:
一时间,我以为Bokeh会成为一个后援解决方案。我在做地理空间可视化的时候发现了Bokeh。然而,我很快就意识到,虽然Bokeh有所不同,但还是和matplotlib一样复杂。
Plotly:
不久前我确实尝试过 plot.ly (后面就直接用plotly来表示)同样用于地理空间可视化。那个时候,plotly比前面提到的库还要麻烦。它必须通过笔记本账户登录,然后plotly可以在线呈现,接着下载最终图表。我很快就放弃了。但是,我最近看到了一个关于plotlyexpress和plotly4.0的Youtube视频,重点是,他们把那些在线的废话都删掉了。我尝试了一下,本篇文章就是尝试的成果。我想,知道得晚总比不知道的好。
数据集简介
1) 年份:计量年(2007 -2018)
2) 生活阶梯:受访者根据坎特里尔阶梯(CantrilLadder),用0~10分(最满意的为10分)来衡量他们今天的生活
3) 人均GDP:根据世界银行2018年11月14日发布的《世界发展指标》(WDI),将人均GDP调整为PPP(2011年不变价国际元)·
4) 社会支持:对下面问题的回答:“遇到困难时,是否可以随时获得亲戚或朋友的帮助?”
5) 出生时预期健康寿命:出生时预期健康寿命是根据世界卫生组织(WHO)全球卫生观察站(GHO)数据库构建的,数据分别来自2005年、2010年、2015年和2016年。
6) 自由选择权:回答下面这个问题:“你是否对自己生活的选择自由感到满意?”
7) 慷慨:对“过去一个月是否给慈善机构捐过款?”与人均GDP相比·
8) 政治清廉:回答“腐败现象在政府中是否普遍?”“腐败在企业内部是否普遍?”
9) 积极影响:包括前一天快乐、欢笑和享受的平均频率。
10) 负面影响:包括前一天焦虑、悲伤和愤怒的平均频率。
11) 对国家政府的信心:不言自明
12) 民主质量:一个国家的民主程度
13) 执行质量:一个国家的政策执行情况
14) Gapminder预期寿命:Gapminder的预期寿命
数据分析
1)用pandas做基本数据分析
世界人均GDP分布情况
图1 2018年:人均GDP直方图
由图1可知,世界人均GDP的水平大多是在0~20000之间,而0~60000之间的人口已经占到了99%左右,因此可以得知世界人民的整体GDP都不是太高,大多数国家处于比较穷的一个状态。
世界各大洲GDP情况
图2 各大洲的GDP水平
由图2可以得知,大洋洲和欧洲人均GDP(美元)明显领先其余大洲,而非洲是最穷的国家,明显落后于其余各大洲。
前15个最幸福的国家
图3 2018年
由图3可以得知,芬兰位于15个最幸福国家的首位。
生活阶梯的分布情况
图4 生活阶梯分布的箱型图
由图4可以得知,生活阶梯分布的箱型图显示平均值在5.5左右,范围为3~8,因此可以看出,生活阶梯的分布情况差异大,幸福度高的国家比幸福度低的国家低很多。而全世界的整体幸福指数并没有处于一个很高的状态。
预期寿命与Gapminder的预期寿命的关系
图5 预期寿命与Gapminder的预期寿命散点图
由图5可以得知,预期寿命与Gap minder的预期寿命之间有高度的相关性。
pandas绘图总结
用pandas绘图很方便。易于访问,速度也快。只是图表外观相当丑,几乎不可能偏离默认值。不过有其他工具来制作更美观的图表。
2)用seaborn进行数据分析
绘制二元分布
每当我想要直观地探索两个或多个变量之间的关系,总是用到某种形式的散点图和分布评估。在概念上相似的图表有三种变体。在每个图中,中心图(散点图,二元KDE,hexbin)有助于理解两个变量之间的联合频率分布。此外,在中心图的右边界和上边界,描述了各自变量的边际单变量分布(用KDE或直方图表示)。
图6 GDP与生活阶梯的分布关系
据图6分析得知,GDP与生活阶梯是整体呈正相关的关系,且在图6颜色越深处代表了人口的数量,密集的大多是在对角线上。以此GDP与生活阶梯的相关关系比较明确。
小提琴图
小提琴图结合了盒状图和核密度估计值。它的作用类似于盒状图,显示了定量数据在分类变量之间的分布,以便对这些分布进行比较。
图7 小提琴图
小提琴图在绘制大洲与生活阶梯的关系图时,用人均GDP的平均值对数据进行分组。人均GDP越高,幸福指数就越高。
3)用FacetGrid进行数据分析
FacetGrid— 折线图
图8 折线图
y轴代表生活阶梯,x轴代表年份。网格的列代表大洲,网格的行代表不同水平的人均GDP。总体而言,北美人均GDP平均值较低的国家和欧洲人均GDP平均值中等或较高的国家,情况似乎有所好转。
FacetGrid— 热图
这种类型的绘图有助于在一个图中可视化四维和度量。代码有点麻烦,但是可以根据使用者的需要快速调整。需要注意的是,这种图表不能很好地处理缺失的值,所以需要大量的数据或适当的分段。
图9 热图
Facet热图,外层的行显示在一年内,外层的列显示人均GDP,内层的行显示政治清廉,内层的列显示大洲。我们看到幸福指数朝着右上方向增加(即,高人均GDP和高政治清廉)。时间的影响还不确定,一些大洲(欧洲和北美)似乎比其他大洲(非洲)更幸福。
3)用plotly进行数据分析
Plotly有三个重要特征:
1) 悬停:当鼠标悬停在图表上时,会弹出注释
2) 交互性:不需要任何额外设置,图表就可以进行交互(例如,一次穿越时间的旅程)
3) 漂亮的地理空间图:Plotly已经内置了一些基本的映射功能,另外,还可以使用mapbox集成来制作令人惊叹的图表。
等值线图幸福指数与时间的关系
图10 全球幸福指数热图
图10可视化了不同地域的幸福指数是如何随时间变化的。叙利亚和阿富汗正处于人生阶梯的末端。

