前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >主成分分析:你为什么还是单身?

主成分分析:你为什么还是单身?

作者头像
数据森麟
发布2019-09-28 21:27:17
5510
发布2019-09-28 21:27:17
举报
文章被收录于专栏:数据森麟数据森麟

作者:herain R语言中文社区专栏作者

知乎ID:https://www.zhihu.com/people/herain-14

来源:R语言中文社区公众号

前言

问天问地不如问知乎:【 主成分分析偏向统计技术,小白可以跳过】

天地不仁,以万物为刍狗,天地没有闲工夫关心的单身那件小事;所以答案在知乎,同是天涯沦落人,感谢知乎好心人。一起看看知友的回答吧。

本文纲目:

1.数据来源简述

2.数据的简单描述

  • 2.1 亮眼高赞的回答
  • 2.2 数据的总体描述
  • 2.3 R制作关键词词频图

3.主成分分析实战

  • 3.1 ,巧妙的数据转换
  • 3.2,什么是主成分分析?
  • 3.3,主成分分析步骤
  • 3.4,R具体操作

4.寄托未来

1.数据来源简述

感谢知乎平台,感谢知友贡献,感谢Python:获取知乎【单身理由】,【单身的好处】,【为什么越来越多的人选择单身】三个搜索关键词的搜索数据。

数据获取流程图

代码语言:javascript
复制
 1#数据表结构
 2mysql> desc why_single;
 3+-----------+--------------+------+-----+---------+----------------+
 4| Field     | Type         | Null | Key | Default | Extra          |
 5+-----------+--------------+------+-----+---------+----------------+
 6| w_id      | int(20)      | NO   | PRI | NULL    | auto_increment |
 7| title     | varchar(100) | YES  |     | NULL    |                |
 8| content   | text         | YES  |     | NULL    |                |
 9| vote_num  | int(4)       | YES  |     | NULL    |                |
10| words     | varchar(500) | YES  |     | NULL    |                |
11| words_num | int(4)       | YES  |     | NULL    |                |
12+-----------+--------------+------+-----+---------+----------------+
13
14#单条数据: title题目,content文章内容,vote_num赞同数,words关键词,words_num关键词个数
15
16mysql> select * from why_single limit 1 \G;
17*************************** 1. row ***************************
18     w_id: 602
19    title: 纯属个人观点客观上来说,现在单身的挺多都是条件很好的。拿我一个朋友的姐姐举个栗子长相中等偏上,性格温
20  content: 纯属个人观点客观上来说,现在单身的挺多都是条件很好的。拿我一个朋友的姐姐举个栗子长相中等偏上,性格温柔,家庭条件一般可是人家自己努力呀,本科,研究生出来工作,月薪,后公司出钱出国培训,回来后升职加薪,工资。现在出头了,周围有人介绍过相亲,可是对方一听这条件都走了,有的觉得太女强人了,有的觉得自己薪水没她高难堪,有的觉得她看不上自己主动放弃。事实上,她是一旦你跨出第一步,即使之后的步都由她来走也无所谓这种女生,然而从未有人跨出这一步来。再者有部分是高不成低不就的,反正还年轻,也不急,诗酒趁年华嘛。也有将感情视为重大的抉择,希望慎重考虑这些也不在少数,比如我记几。希望谈一场不分手的恋爱,所以就会想得很多,哎我能承担两个人在一起后的责任吗?若有了孩子我能教育得好吗?再反过来审视自己,嗯还差得很远,算了再等等。总得来说。毕竟人生只有一次,要为自己而活。你若盛开,清风自来。
21 vote_num: 0
22    words: 条件,不急,月薪,一般,家庭,人家,温柔,公司,纯属,教育,重大,朋友,客观,孩子,姐姐,感情,个人观点,研究生,工作,性格,诗酒,年轻,努力,培训,对方,很好
23words_num: 26
24

2.数据的简单描述

2.1

亮眼的回答

亮眼的高赞回答

2.2

数据的总体描述

代码语言:javascript
复制
1#文章总数,赞同总数,关键词总数
2select count(1) as article_num, sum(vote_num) as vote_num , sum(words_num) from why_single;
3+-------------+----------+----------------+
4| article_num | vote_num | sum(words_num) |
5+-------------+----------+----------------+
6|         535 |   295044 |          11154 |
7+-------------+----------+----------------+
81 row in set (0.01 sec)

2.3

R制作关键词词频图

代码语言:javascript
复制
 1mysql> select words from why_single order by vote_num desc limit 2 \G;
 2*************************** 1. row ***************************
 3words: 女博士,博士,工作,干部,答友,妈呀,人生,干嘛,儿子,优秀,厅长,男人,情趣,经历,感情,正统,有点,背景,羊毛,清醒,氮气,分数,教育,头脑,家务,复杂,家庭,我会,围观,充满
 4*************************** 2. row ***************************
 5words: 问题,态度,女生,情绪,情感,生活,对方,阶段,用法,友善,爱意,块钱,故事,心情,方式,预测,道理,我会,丰富,干货,人生,束缚,女朋友,礼貌,人格,准则,男生,紧急,悬念,热烈
 6*************************** 3. row ***************************
 7words: 生活,北京,女人,经历,套路,婚姻,逻辑,同事,社会,质量,孩子,无法,男生,快乐,车房,合适,巨大,妻子,消费者,廊坊,全职,旅游,故事,问题,事业,不错,干嘛,评论,洗脑,个人
 8#R绘制词云图
 9> data1<-read.table('forzhihu/kws.csv',header=T, encoding='GB2312')
10> v <-data.frame(ftable(data1))
11> wordcloud(v$x,v$Freq,colors = rainbow(length(v$Freq)));

关键词高频词云

3.主成分分析实战

3.1

巧妙的数据转换

从上文环境中,可知我们有535篇文章,每个文章都有赞同数(用于加权),每个文章的关键词反映出对单身原因的看法,1篇文章对应多个关键词,是不是说明1篇文章反馈出多种单身的原因呢?基于词云我们可以将单身的原因进行聚类分析。量化每一篇文在聚类原因中的权重值,这也我们是不是将数据转化为 535 行,n类(聚类个数)的单身原因权重表呢?

关键词归为7大类:

代码语言:javascript
复制
社会环境:社会,世界,中国,乡镇,农村,交通,教育.... 
家庭因素:家,家庭,父母,子女,爸爸,妈妈,兄弟,姐妹....
生活态度:旅行,电影,美食,自己,生活,读书....
时间观念:青春,年轻,大龄,时间,自由,日子,理想....
爱情婚姻观:爱情,婚姻,幸福,颜值,三观,心动,喜欢....
工作压力:加班,双休,单位,公司,考勤,工作,绩效....
经济基础:事业,房子,车子,花钱,话费,房价,工资,月薪....

[对应词频*赞同率多词求和 = 因素重要程度值]生产数据表:选取赞同数>=100 的114篇文章,生产114行7列的二位数据表

代码语言:javascript
复制
 1mysql> select count(1) from why_single where vote_num>=100 \G;
 2*************************** 1. row ***************************
 3count(1): 114
 41 row in set (0.00 sec)
 5> read.table(pipe("pbpaste"),sep='\t',header=T)->data
 6> data
 7      x1  x2   x3  x4  x5   x6   x7
 81    793 517  211 728 900 1434  381
 92    526 225  428 728 728 1219  581
103    499 473  272 926 926  573 1354
114    172 414  940 175 175   62  234
125    709 387 1003 295 295 1229  755
136    928 409  160 877 877 1025 1496
147    970 671  677 407 407  490 1146
158    574 265  893 584 584 1187   79
16.......

3.2

什么是主成分分析?

主成分的概念由Karl Pearson在1901年提出

考察多个变量间相关性一种多元统计方法

研究如何通过少数几个主成分(principal component)来解释多个变量间的内部结构。即从原始变量中导出少数几个主分量,使它们尽可能多地保留原始变量的信息,且彼此间互不相关

主成分分析的目的:数据的压缩;数据的解释

常被用来寻找判断事物或现象的综合指标,并对综合指标所包含的信息进行适当的解释

3.3

主成分分析步骤

对原来的p个指标进行标准化,以消除变量在水平和量纲上的影响

根据标准化后的数据矩阵求出相关系数矩阵

求出协方差矩阵的特征根和特征向量

确定主成分,并对各主成分所包含的信息给予适当的解释

3.4

R具体操作

1:载入数据到R控制台

代码语言:javascript
复制
 1> read.table(pipe("pbpaste"),sep='\t',header=T)->data
 2> data
 3      x1  x2   x3  x4  x5   x6   x7
 41    793 517  211 728 900 1434  381
 52    526 225  428 728 728 1219  581
 63    499 473  272 926 926  573 1354
 74    172 414  940 175 175   62  234
 85    709 387 1003 295 295 1229  755
 96    928 409  160 877 877 1025 1496
107    970 671  677 407 407  490 1146
11.......

2:求出样本相关系数矩阵

代码语言:javascript
复制
 1> R<-round(cor(data),3)
 2> R
 3       x1     x2     x3     x4     x5    x6     x7
 4x1  1.000 -0.023 -0.047  0.050  0.055 0.007  0.056
 5x2 -0.023  1.000 -0.014 -0.113 -0.113 0.039 -0.005
 6x3 -0.047 -0.014  1.000 -0.007 -0.013 0.055 -0.029
 7x4  0.050 -0.113 -0.007  1.000  0.999 0.021 -0.055
 8x5  0.055 -0.113 -0.013  0.999  1.000 0.029 -0.058
 9x6  0.007  0.039  0.055  0.021  0.029 1.000  0.042
10x7  0.056 -0.005 -0.029 -0.055 -0.058 0.042  1.000
11
12> PCA=princomp(data,cor=T)
13> PCA
14Call:
15princomp(x = data, cor = T)
16
17Standard deviations:
18    Comp.1     Comp.2     Comp.3     Comp.4     Comp.5     Comp.6     Comp.7 
191.42659724 1.04377423 1.03044704 0.99731643 0.96457786 0.94186945 0.03695955 
20
21 7  variables and  114 observations.
22
23> summary(PCA,loadings=T)
24Importance of components:
25                         Comp.1    Comp.2    Comp.3    Comp.4    Comp.5    Comp.6       Comp.7
26Standard deviation     1.426597 1.0437742 1.0304470 0.9973164 0.9645779 0.9418695 0.0369595547
27Proportion of Variance 0.290740 0.1556378 0.1516887 0.1420914 0.1329158 0.1267312 0.0001951441
28Cumulative Proportion  0.290740 0.4463778 0.5980665 0.7401579 0.8730737 0.9998049 1.0000000000
29
30Loadings:
31   Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7
32x1         0.625  0.115         0.764              
33x2 -0.152         0.239 -0.830  0.113  0.457       
34x3        -0.537  0.380  0.484  0.308  0.488       
35x4  0.695                                     0.707
36x5  0.695                                    -0.707
37x6                0.793               -0.595       
38x7         0.553  0.393  0.222 -0.550  0.428       

从输出的结果可以看出,主成分的标准差,即相关矩阵的七个特征值的开方:

前五项:0.290+0.155+0.151+0.142+0.126=0.864大于80%,构成主成分(需要校验);

说明7大因素中:社会环境,家庭因素,生活态度,时间观念,爱情婚姻观 构成了单身原因的主要成分;而,工作压力,经济基础这两张成分却居于次要位置。

人是社会的动物,社会环境左右着我们的主观意识,在潜移默化中影响我们人生的重大决策。

如下:通过主成分碎石图,可以直观的看着7个因素的影响成分大小:

代码语言:javascript
复制
 1#预估成分影响
 2> round(predict(PCA),3)
 3       Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7
 4  [1,]  1.401  0.705  0.607 -0.946  0.590 -1.650 -0.382
 5  [2,]  1.049  0.188  0.264  0.403 -0.209 -1.391  0.015
 6  [3,]  1.672  1.372 -0.207 -0.162 -1.332  0.554  0.004
 7  [4,] -1.746 -1.633 -1.689  0.901  0.136  0.655 -0.015
 8  [5,] -1.062 -0.196  1.254  1.143  0.812 -0.298  0.003
 9  [6,]  1.588  2.572  0.735 -0.038 -0.559 -0.195  0.015
10  [7,] -0.731  1.407  0.188  0.155  0.776  1.199 -0.001
11  [8,]  0.428 -1.119  0.339  0.833  1.056 -1.123  0.010
12  [9,]  1.058 -0.624 -1.645  0.909 -0.389 -0.897  0.003
13
14#画碎石图
15> screeplot(PCA, type='lines')

主成分碎石图

代码语言:javascript
复制
 1> PCA$scores #可计算主成分得分
 2            Comp.1      Comp.2       Comp.3      Comp.4       Comp.5      Comp.6        Comp.7
 3  [1,]  1.40056690  0.70517326  0.606696840 -0.94638853  0.589941685 -1.65041421 -3.821126e-01
 4  [2,]  1.04900803  0.18822092  0.264318975  0.40340326 -0.208947445 -1.39094323  1.453613e-02
 5  [3,]  1.67243670  1.37248483 -0.206803150 -0.16197874 -1.331755444  0.55412967  4.289578e-03
 6  [4,] -1.74644756 -1.63308359 -1.688867556  0.90089657  0.136496255  0.65475617 -1.505974e-02
 7  [5,] -1.06222511 -0.19584553  1.253599410  1.14341654  0.811554283 -0.29819077  3.002552e-03
 8  [6,]  1.58829651  2.57186495  0.735027870 -0.03833332 -0.558572926 -0.19522828  1.509744e-02
 9  [7,] -0.73148282  1.40740690  0.188022616  0.15503755  0.775989636  1.19936396 -1.329158e-03
10  [8,]  0.42828896 -1.11856447  0.338679544  0.83288277  1.056283875 -1.12349627  9.765501e-03
11  [9,]  1.05783957 -0.62446493 -1.645173343  0.90942155 -0.388630187 -0.89748195  3.366658e-03
12 [10,] -0.59822192 -0.21181364  2.307340901  1.48071324 -0.487337546  0.24474231 -1.442962e-03
13 [11,] -0.82908479  1.25097668  0.535623214 -1.56504778  0.317734183 -0.34005001  1.382917e-02
14
15> load<-loadings(PCA)
16> plot(load[,1:2],xlim=c(-0.6,0.6),ylim=c(-0.6,0.6))
17> text(load[,1],load[,2],adj=c(0.5,-0.5))
18> abline(h=0);abline(v=0);

两个主成分的载荷图

4.寄托未来

单身不是穷困无奈的必然选择,是社会发展潮流带来的一种新的生活方式,单身的渴望自由潇洒的生活,更多的幸福感来自于自己。

要自律。当你时刻不要让生活约束自己的时候,你还要时刻自己约束着自己,丰富自己阅历、知识,能够承受着起岁月的磨炼。

人生有一种成功就是按照自己喜欢的方式活着。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据森麟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本文纲目:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档