热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何基于ggplot2构建相关系数矩阵热图以及一个友情故事

本文介绍了如何在rstudio中安装ggplot2,并使用ggplot2构建相关系数矩阵热图。同时,通过一个友情故事,讲述了真爱难觅的故事背后的数据量化和皮尔逊相关系数的概念。故事中的小伙伴们在本科时参加各种考试,其中有些沉迷网络游戏,有些热爱体育,通过他们的故事,展示了不同兴趣和特长对学习和成绩的影响。

04f3986e0a9aae7f5f0fd9cdc780a86d.png

点击关注了解更多精彩内容!!

449a7aab7e152590cea727a22a8f63ca.gif古人云:有缘千里能相会,无缘对面不相逢。铁哥认为“缘分”如果用数据来表示的话,那么可以用相关系数来进行量化。如果你和一个人的缘分足够深,那么你们之间的皮尔逊相关系数应该接近于1。但是真爱难觅,茫茫人海中,人们找到和自己的真心人(Mr/Miss Right)的概率却是千万分之一。

为了讲清楚如何基于ggplot2构建相关系数矩阵热图,铁哥打算讲个小故事?,缓解一下紧张的学习气氛。铁哥想先从友情故事讲起,虽然真爱难寻,谁还没个好朋友呢?!

铁哥有很多小伙伴,本文主要讲本科的小伙伴们吧,故事的主角有小通、小杭、小易、小明、小磊、小孙和小铁(铁哥那时候还算小铁?)吧。本科的时候,我们会参加各种各样的考试,如数学分析、SAS软件编程、随机过程、大学物理、诗歌鉴赏和体育等;铁哥记得当时:

小通、小杭、小易跟小明沉迷网络游戏,很多科目都是惊险及格;

小磊和小孙虽然也打游戏,但是他们还热爱⚽️,所以体育成绩特别好;

小铁游戏打得不好,?打得还不错,总体成绩比较平均。

下面铁哥用R语言定义每个同学的六门学习成绩。

# 定义每位小伙伴的各科成绩

# 课程包括:数学分析、SAS软件编程、随机过程、大学物理、诗歌鉴赏、体育

f9acdf05030f3273e61e3b2cba4a911d.pngccb73e67ae3b31b27977dd03a4ecf249.png

然后我们把七位小伙伴的成绩合并为数据集:

# 注意这里管道符 %>% 的使用

# 为了使数据集结构更清晰,我们还改变了行的名字

4c2eeeedf26e5a00c30e95640a436cc9.png

俗话说:人以类聚,物以群分。

我们来进一步计算一下七个小伙伴的皮尔逊相关系数矩阵吧:

eaa5be436a1e91d07427c5acf5b9e08f.png

为了使用ggplot2来画热图,我们还需要更改相关系数矩阵的格式,这里我们调用reshape2 来改变相关系数矩阵的格式从而适应ggplot2的语法,R代码如下:

2ba6ea5d547656aefed70dc663a02edb.png

然后我们就可以使用ggplot2函数画出相关系数热图了,R代码如下:

# geom_title()函数用于相关系数的可视化

# element_text(family = ‘Kai’) 用于图例中显示中文字体

18483b25a525b9a782a7b25e7b28c528.png

9b70dc222b91d1387bbe848c86795574.png

当然,上面这个默认生成的热图非常丑陋?,铁哥也是一筹莫展。事实上,相关系数矩阵是存在冗余信息的,我们其实只保留上三角矩阵的信息就够了(矩阵对称),即将下三角矩阵元素赋值为NA。

01733bda3f9d9292d96fde21a0b74b66.png

基于这个上三角矩阵,我们再用ggplot函数画出相应的相关系数热图:

#下图中蓝色代表负相关,红色代表正相关

f43b6abe49a603ef7c3ee8bd13a8008c.png

0d608fdd05cefad9bf1b2317815b7ad3.png

上面这个热图已经蛮不错了,但是铁哥还想更完美一点,铁哥希望相似度越高的个体距离越近,大家能够志同道合,拥有高山流水的友情。我们将使用hclust函数对样本进行重排序:

600c4afd51f764b30e5b4d493c3c4514.png

 335654639219979d976130ca3ccdec91.png

f9acdf05030f3273e61e3b2cba4a911d.png

上面这个热图已经接近完美了,但是铁哥还想把相关系数加到图像中去:

840009650ce105cb8519589f686aae75.png

3fe926527cac4895bfe05992d1232060.png

8b91fe725e7f955c6da5a77c31df3afd.png

最终铁哥构建了想要的相关系数热图,从上图中可以看出,铁哥的小伙伴可以聚类为两类:小磊和小孙明显有更多的相似处,小杭、小易、小铁、小通和小明则志趣相投。

77f220922283f643930caa01c74e8b2d.png

回想起来,铁哥本科毕业也八年了,小磊和小孙也在国外知名外企站稳了脚跟,小杭、小易、小通和小明也在各自的岗位上贡献中坚力量,似乎也进一步印证了这张热图的结果。

唯有铁哥,依然奋战在科研的第一线,梦想着成为一个科学家。你若问我为什么,铁哥只能回答你一句话:21世纪是生命科学的世纪?…

PS:如果你想继续学习构建炫酷的个性化定制热图,欢迎联系铁哥额b8b30f0d33f45d5699c48a2a6adfd691.png ,欢迎添加微信号:evazyc90,前来咨询。

07bcfbcf87fb837516091be50c0c3f8c.gif

R语言中强大的map函数——铁哥小故事版

R语言中神奇的管道符“%>%”

Ubuntu系统下通过添加PPA形式更新R软件版本

Mac系列电脑上应用命令行安装R和Rstudio

在电脑和服务器上离线安装R包

编辑:沃沃酱  监制:悠悠然

铁哥在等你一起学习哦~

585c5267e9a4caf113cde45a59480d3d.png

长按扫码关注

在看”的永远不秃顶~

45b548e4079295b232fff16bd5bcbdcb.gif


推荐阅读
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • 在PHP后端开发中遇到一个难题:通过第三方类文件发送短信功能返回的JSON字符串无法解析。本文将探讨可能的原因并提供解决方案。 ... [详细]
  • 非公版RTX 3080显卡的革新与亮点
    本文深入探讨了图形显卡的进化历程,重点介绍了非公版RTX 3080显卡的技术特点和创新设计。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 在前两篇文章中,我们探讨了 ControllerDescriptor 和 ActionDescriptor 这两个描述对象,分别对应控制器和操作方法。本文将基于 MVC3 源码进一步分析 ParameterDescriptor,即用于描述 Action 方法参数的对象,并详细介绍其工作原理。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 在寻找轻量级Ruby Web框架的过程中,您可能会遇到Sinatra和Ramaze。两者都以简洁、轻便著称,但它们之间存在一些关键区别。本文将探讨这些差异,并提供详细的分析,帮助您做出最佳选择。 ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
author-avatar
piggyear
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有