使用R语言分析世界幸福指数
本文中的数据为2019年的世界幸福指数报告,数据来源于kaggle。
数据详情
数据包含9个字段:
- Rank: 排名
- Country or Region: 国家或地区
- Score: 得分
- GDP per capita: 人均GDP
- Social support: 社会支持
- Healthy life expectancy: 预期寿命
- Freedom to make life choices: 自由
- Generosity: 慷慨
- Perceptions of corruption: 清廉指数
简单介绍
幸福感排行榜是基于世界民意调查,内容由盖洛普咨询公司(Gallup)设计制定。问卷中有一个被称为“坎特里尔阶梯”(Cantril Ladder)的问题,要求受访者想象有一座阶梯梯,对他们来说,最好的生活是10分,最坏的生活是0分,并根据这个标准对自己目前的生活进行评价。分数来自全球的代表性样本,并使用盖洛普的权重使估计结果具有代表性。幸福感得分来自于如下6个因素,经济、社会支持、预期寿命、自由、廉洁度和慷慨程度(捐赠)。
世界幸福指数报告是一项具有里程碑意义的全球幸福状况调查。第一份报告于2012年发布。2017年3月20日,在联合国庆祝国际幸福日的活动上,发布了《2017年世界幸福报告》,对155个国家的幸福程度进行了排名。随着各国政府、组织和民间社会越来越多地使用幸福指标为其决策提供信息,该报告继续获得全球认可。经济学、心理学、调查分析、国家统计、健康、公共政策等各领域的著名专家描述了如何有效地利用幸福感数据来评估国家的进步。这些报告回顾了当今世界的幸福状况,并展示了新的幸福科学如何解释个人和国家的幸福差异。
数据分析
本文主要利用R语言对世界幸福指数进行了统计性描述(五数分析、平均值、回归分析等)和基于卡方分布的正态性检验,主要目的是学习用R语言进行数据分析。
统计性描述
五数及平均差和标准差
五数包括中位数、下四分位数、上四分位数、最小值和最大值。
#数据加载
data = read.table("mydata.csv", sep = ",", header = TRUE,
col.names = c("rank", "country", "score", "GDP", "support",
"health", "freedom", "generosity", "corruption"))
data
library(reshape2)
#数据格式转换
data1 = melt(data, id = c("rank", "country", "score"))
data1
#绘制箱形图
boxplot(value ~ variable,data1)
library(ggplot2)
ggplot(data1, aes(x=variable, y=value, fill=variable)) +
geom_boxplot()
影响因子五数分布箱型图:
# 五数及平均值
re = summary(data[3:9])
library(knitr)
kable(re,format="markdown")
五数及平均值分布:
#方差和标准差
data2 = data[3:9]
options(digits = 3)
apply(data2,2,var)
#1代表行,2代表列
apply(data2,2,sd)
方差分布结果:
标准差分布结果:
基于直方图的排名分析
下面主要展示全球幸福指数排名前15的国家,可以看出前7名的芬兰,丹麦,挪威,冰岛等都位于北欧地区,其中2/3国家集中在欧洲。亚洲仅以色列上榜,其余则主要位于美洲地区。
#直方图
data3 = head(data, 15)
data3
ggplot(data3, aes(x=country, y=score))+
geom_bar(stat="identity", aes(reorder(country,-score), fill=country, width = 0.7))+
geom_text(aes(label=score), vjust=-0.2)+
theme(axis.text.x = element_text(angle = 315,hjust = 0.2, vjust = 0.2))
前15个国家的总分分布:
另外选取人均GDP和自由度排名前15的国家进行了统计,人均GDP最高的为卡塔尔,中国香港排名第9,其余国家主要位于亚洲西部和欧洲地区,上榜的亚洲西部国家主要得益于丰富的矿产资源。
ggplot(data3, aes(x=country, y=GDP))+
geom_bar(stat="identity", aes(reorder(country,-GDP), fill=country, width = 0.7))+
geom_text(aes(label=GDP), vjust