生活阶梯(幸福指数)与人均GDP(金钱)正相关的正则图
本文将探讨三种用Python可视化数据的不同方法。 以可视化 《2019年世界幸福报告》 的数据为例,本文用Gapminder和Wikipedia的信息丰富了《世界幸福报告》数据,以探索新的数据关系和可视化方法。
《世界幸福报告》试图回答世界范围内影响幸福的因素。
报告根据对“坎特里尔阶梯问题”的回答来确定幸福指数,被调查者需对自己的生活状况进行打分,10分为最佳状态,0分为最差。
本文将使用Life Ladder作为目标变量。 Life Ladder就是指幸福指数。
图片来源:Nik MacMillan/Unsplash
本文旨在提供代码指南和参考点,以便在查找特定类型的图表时进行参考。 为了节省空间,有时会将多个图表合并到一张图上。 但是请放心,你可以在这个 Repo 或相应的 Jupyter Notebook中找到所有基本代码。
1. 我使用Python进行绘图的经历
大约两年前,我开始更认真地学习Python。 从那时起,Python几乎每周都会给我一些惊喜,它不仅自身简单易用,而且其生态系统中还有很多令人惊叹的开源库。 我对命令、模式和概念越熟悉,就越能充分利用其功能。
与用Python绘图正好相反。 最初,我用matplotlib创建的几乎每个图表看起来都很过时。 更糟糕的是,为了创建这些讨厌的东西,我不得不在Stackoverflow上花费数小时。 例如,研究改变x斜度的基本命令或者类似这些的蠢事。 我一点也不想做多图表。 以编程的方式创建这些图表是非常奇妙的,例如,一次生成50个不同变量的图表,结果令人印象深刻。 然而,其中涉及大量的工作,需要记住一大堆无用的指令。
学习 Seaborn 能够节省很多精力。 Seaborn可以抽象出大量的微调。 毫无疑问,这使得图表在美观上得到巨大的改善。 然而,它也是构建在matplotlib之上的。 通常,对于非标准的调整,仍然有必要使用机器级的matplotlib代码。
一时间,我以为 Bokeh 会成为一个后援解决方案。 我在做地理空间可视化的时候发现了Bokeh。 然而,我很快就意识到,虽然Bokeh有所不同,但还是和matplotlib一样复杂。
不久前我确实尝试过 plot.ly (后面就直接用plotly来表示)同样用于地理空间可视化。 那个时候,plotly比前面提到的库还要麻烦。 它必须通过笔记本账户登录,然后plotly可以在线呈现,接着下载最终图表。 我很快就放弃了。 但是,我最近看到了一个关于plotlyexpress和plotly4.0的 Youtube视 频,重点是,他们把那些在线的废话都删掉了。 我尝试了一下,本篇文章就是尝试的成果。 我想,知道得晚总比不知道的好。
Kepler.gl 不是一个Python库,而是一款强大的基于web的地理空间数据可视化工具。 只需要CSV文件,就可以使用Python轻松地创建文件。 试试吧!
最后,我决定使用Pandas本地绘图进行快速检查,并使用Seaborn绘制要在报告和演示中使用的图表(视觉效果很重要)。
2. 分布的重要性
图片来源:Jonny Caspari/Unsplash
我在圣地亚哥从事研究期间,负责教授统计学(Stats119)。 Stats119是统计学的入门课程,包括统计的基础知识,如数据聚合(可视化和定量)、概率的概念、回归、抽样、以及最重要的分布。 这一次,我对数量和现象的理解几乎完全转变为基于分布的理解(大多数时候是高斯分布)。
直到今天,我仍然惊讶于这两个量的作用,标准差能帮助人理解现象。 只要知道这两个量,就可以直接得出具体结果的概率,用户马上就知道大部分的结果的分布情况。 它提供了一个参考框架,无需进行过于复杂的计算,就可以快速找出有统计意义的事件。
一般来说,面对新数据时,我的第一步是尝试可视化其分布,以便更好地理解数据。
3. 加载数据和包导入
图片来源:Kelli Tungay/Unsplash
先加载本文使用的数据。 我已经对数据进行了预处理。 并对它的意义进行了探究和推断。
# Loadthe data
data = pd.read_csv('https://raw.githubusercontent.com/FBosler/AdvancedPlotting/master/combined_set.csv')#this assigns labels per year
data['Mean Log GDP per capita'] =data.groupby('Year')['Log GDP per capita'].transform(
pd.qcut,
q=5,
labels=(['Lowest','Low','Medium','High','Highest'])
)
· 生活阶梯: 受访者根据坎特里尔阶梯(CantrilLadder),用0~10分(最满意的为10分)来衡量他们今天的生活
· 人均GDP: 根据世界银行2018年11月14日发布的《世界发展指标》(WDI),将人均GDP调整为PPP(2011年不变价国际元)
· 社会支持: 对下面问题的回答: “遇到困难时,是否可以随时获得亲戚或朋友的帮助? ”
· 出生时预期健康寿命: 出生时预期健康寿命是根据世界卫生组织(WHO)全球卫生观察站(GHO)数据库构建的,数据分别来自2005年、2010年、2015年和2016年。
· 自由选择权: 回答下面这个问题: “你是否对自己生活的选择自由感到满意? ”
· 慷慨: 对“过去一个月是否给慈善机构捐过款?”与人均GDP相比
· 政治清廉: 回答“腐败现象在政府中是否普遍? ”“腐败在企业内部是否普遍? ”
· 积极影响: 包括前一天快乐、欢笑和享受的平均频率。
· 负面影响: 包括前一天焦虑、悲伤和愤怒的平均频率。
· Gapminder预期寿命: Gapminder的预期寿命
import plotly
import pandas as pd
import numpy as np
import seaborn as sns
import plotly.express as pximport matplotlib%matplotlib inlineassertmatplotlib.__version__ == "3.1.0","""
Please install matplotlib version 3.1.0 by running:
1) !pip uninstall matplotlib
2) !pip install matplotlib==3.1.0
"""
4. 迅速:使用Pandas进行基本绘图