全球幸福指数与社会进步指数

本文通过数据分析,看看人民的幸福指数与哪些因素相关

本文数据分析流程

一.写爬虫,在网上抓取数据

二.数据处理

三.相关分析

四.主成分分析

五.聚类

六.可视化

一、写爬虫,在网上抓取数据

爬虫 建议大家用python,R能写爬虫,但是比较蹩脚,这里就示范用R来写爬虫。

本文需要两个数据集,处理之后,将两个数据集合并

第一个:

> library(rvest)

> url<- "https://en.wikipedia.org/wiki/World_Happiness_Report"> 

web<-read_html(url,encoding = "UTF-8")

> happy_report<-html_nodes(web,"table")%>%html_table()

> happy<-happy_report[[1]]

第二个:

> url2<-"List of countries by Social Progress Index"

> web2<-read_html(url2,encoding = "UTF-8")

> social<-html_nodes(web2,"table")%>%html_table()

>social<-social[[2]]

二、数据处理

分别处理两个数据集

预处理第一个数据集

> str(happy)

> happy<-happy[c(3,6:11)]

> View(happy)

> colnames(happy)<-gsub(" ","",colnames(happy),perl = T)”将标题中空格去掉“

> happy$Country<-as.character(mapvalues(happy$Country,from = c("United States", "Congo (Kinshasa)", "Congo (Brazzaville)", "Trinidad and Tobago"),to=c("USA","Democratic Republic of the Congo", "Democratic Republic of the Congo", "Trinidad")))”标准化国家名字“

预处理第二个数据集

> social<-social[c(1,5,7,9)] “选择数据集中一些列”

> names(social)<-c("Country","basic_human_needs", "foundations_well_being", "opportunity") “对列名重新定义”

> social$Country<-as.character(mapvalues(social$Country,from = c("United States", "Côte d'Ivoire","Democratic Republic of Congo", "Congo", "Trinidad and Tobago"),to=c("USA", "Ivory Cost","Democratic Republic of the Congo", "Democratic Republic of the Congo", "Trinidad"))) “标准化国家的名字”

> social[,2:4]<-sapply(social[,2:4],as.numeric) '将数据从字符转成数字'

Warning messages:

1: In lapply(X = X, FUN = FUN, ...) : 强制改变过程中产生了NA

2: In lapply(X = X, FUN = FUN, ...) : 强制改变过程中产生了NA

3: In lapply(X = X, FUN = FUN, ...) : 强制改变过程中产生了NA

连接两个数据集

> social.happy<-left_join(happy, social, by = c('Country' = 'Country'))检查缺失值 并填补缺失值

> mean(is.na(social.happy[,2:10]))

> for (i in 1:ncol(social.happy[,2:10])){

+social.happy[,2:10][is.na(social.happy[,2:10][,i]),i]<-median(social.happy[,2:10][,i],na.rm = T)

+ }

价格数据变换为0-1之间的值

> range_transform<-function(x){

+ (x-min(x))/(max(x)-min(x))

+ }

> social.happy[,2:10]<-as.data.frame(apply(social.happy[,2:10],2,range_transform))

将变量缩放到平均值0,标准差1

> sd_scale<-function(x){

+ (x-mean(x))/sd(x)

+ }

> social.happy[,2:10]<-as.data.frame(apply(social.happy[,2:10],2,sd_scale))

三、简单相关分析

四、主成分分析

soc.pca <- PCA(soc.happy[, 2:10], graph=FALSE)fviz_screeplot(soc.pca, addlabels = TRUE, ylim = c(0, 65))

每个栏上的百分比表示由各自主要组成部分解释的总方差的比例。如图所示,前三个主要组成部分占总方差的约80%。

> soc.pca$eig

eigenvalue percentage of variance cumulative percentage of variance

comp 1 5.0714898 56.349887 56.34989

comp 2 1.4357885 15.953205 72.30309

comp 3 0.6786121 7.540134 79.84323

comp 4 0.6022997 6.692219 86.53544

comp 5 0.4007136 4.452373 90.98782

comp 6 0.3362642 3.736269 94.72409

comp 7 0.2011131 2.234590 96.95868

comp 8 0.1471443 1.634937 98.59361

comp 9 0.1265747 1.406386 100.00000

> soc.pca$var$contrib[,1:3]

Dim.1 Dim.2 Dim.3

GDPpercapita 15.7263477 2.455323e+00 3.162470e-02

Socialsupport 12.0654754 5.445993e-01 1.345610e+00

Healthylifeexpectancy 15.1886385 2.259270e+00 3.317633e+00

Freedomtomakelifechoices 6.6999181 2.207049e+01 8.064596e+00

Generosity 0.3270114 4.189437e+01 5.406678e+01

Trust 4.3688692 2.570658e+01 3.211058e+01

basic_human_needs 14.5402807 3.836956e+00 1.021076e+00

foundations_well_being 15.1664220 1.232353e+00 4.169125e-02opportunity 15.9170370 6.170376e-05 4.113192e-04

第一个主要部分解释了总变异的约57%,似乎代表机会,人均GDP,健康预期寿命,幸福基础和人类基本需求。

第二个主要部分解释了总变异的16%,代表了机会,社会支持和慷慨。

四、聚类

require(NbClust)nbc <- NbClust(soc.happy[, 2:10], distance="manhattan",min.nc=2, max.nc=30, method="ward.D", index='all')

`

`

`

* According to the majority rule, the best number of clusters is 3

 > social.happy['cluster'] <- as.factor(pamK3$clustering)

> fviz_pca_ind(soc.pca,label="none",habillage = soc.happy$cluster, #color by clusterpalette = c("#00AFBB", "#E7B800", "#FC4E07", "#7CAE00", "#C77CFF", "#00BFC4"),addEllipses=TRUE) )

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容