简单易学多维数据可视化R实现:神奇的卡通脸谱图Chernoff faces

简介:

.Chernoff face是由美国统计学家Chernoff1976年率先提出的,用脸谱来分析多维度数据,即将P个维度的数据用人脸部位的形状或大小来表征。


他首先将该方法用于聚类分析,引起了各国统计学家的极大兴趣,并对他的画法作出了改进,一些统计软件也收入了脸谱图分析法,国内也有很多研究工作者将该方法应用于多元统计分析中。


脸谱图分析法的基本思想是由15-18个指标决定脸部特征,若实际资料变量更多将被忽略,若实际资料变量较少则脸部有些特征将被自动固定。统计学曾给出了几种不同的脸谱图的画法,而对于同一种脸谱图的画法,将变量次序重新排列,得到的脸谱的形状也会有很大不同。


按照切尔诺夫于1973年提出的画法,采用15个指标,各指标代表的面部特征为:


1表示脸的范围

2表示脸的形状

3表示鼻子的长度

4表示嘴的位置

5表示笑容曲线

6表示嘴的宽度

711分别表示眼睛的位置,分开程度,角度,形状和宽度

12表示瞳孔的位置

1315分别表示眼眉的位置,角度及宽度。


这样,按照各变量的取值,根据一定的数学函数关系,就可以确定脸的轮廓、形状及五官的部位、形状,每一个样本点都用一张脸谱来表示。


脸谱容易给人们留下较为深刻的印象,通过对脸谱的分析,就可以直观地对原始资料进行归类或比较研究。


由于Chernoff脸谱图能形象地在平面上表示多维度数据并给人以直观的印象,可帮助使用者形象记忆分析结果,提高判断能力,加快分析速度。目前已应用于多地域经济战略指标数据分析,空间数据可视化等领域。


R软件中,用aplpack包中的faces()函数作脸谱图,具体函数参数如下:


facesxywhich.rowfill=FALSEnrowncolscale = TRUEbyrow =FALSEmainlabels


下面是2008年美国各州的犯罪率部分统计数据在R中实现Chernoff 脸谱图过程:


  1. 下载R,安装aplpack软件包


安装R后,打开它,点击按钮“Packages & Data,选择“Package Installer,在下拉菜单中选择“CRAN(binaries)”,然后点击“Get List”,下拉滚动到“alpack”,最后点击“Install Select”按钮,完成安装。


或者,也可以在R控制台键入:


In[1]:install.packages("alpack")


2. 获取数据


Flowingdata网站中数据集有清洗过的2008年美国各州的犯罪率部分统计。可以在http://datasets.flowingdata.com/crimeRatesByState-formatted.csv中找到,我们没有必要下载它,可以通过URLR中直接调用read.csv()函数直接下载数据。


In[2]:crime<-read.csv("http://datasets.flowingdata.com/crimeRatesByState-formatted.csv")


3.查看数据,在控制台键入


In[3]:crime[1:6,]


将显示数据集的前6行数据:


记住,数据集总共有8列,第一列是州的名字,其余的列为7中类型的犯罪。


4. 制作脸谱图


一旦有了数据,使用aplpack包的faces()函数可以很容易地制作。首先,加载软件包:


Library(alpack)


如果在加载过程中,出现错误,需要检查你安装的是否正确。


脸谱图:


In[4]:Windows()

Faces(crime[,2:8])


Windows()新建一个图形窗口,faces(crime[,2:8])用数据集的第28列变量来画脸谱,


其中:

murder(谋杀)类型的变量表示脸高,眼宽,耳朵高度;

forcible_rape(强奸)类型变量表示脸宽,头发高度;

robbery(抢劫)类型变量表示脸的结构,头发宽度;

aggravated_assault(恶意攻击)类型变量表示嘴巴高度,头发发型;

burglary(夜盗)类型变量表示嘴宽,鼻子高度;

larceny_theft(盗窃)类型变量表示微笑,鼻子宽度;

motor_vehicle_theft(机动车辆盗窃)变量表示眼宽,耳朵宽度。



5. 变换特征


观察上面的脸谱图,52张脸代表52个州,每张脸表示了每个州的7种犯罪类型,可以很容易地发现第3,10张明显地与其他脸不同,说明第3,10个州与其他州的犯罪类型明显不同。


但是在上面的脸谱图中还需要做一些改变:


  1. 这些脸是用数字标签的,如果没有关键字没有多大用,所以需要用州的名字进行标签;


2.有些脸是带有微笑的,对于积极的数据集,比如生活质量或棒球统计,微笑是有意义的,值越高越好,而对于犯罪数据,犯盗窃罪微笑是不符合常理的,值越高越差。


不巧的是,Rface()函数并不允许我们自己选择每个变量关联的人脸部分,我们需要找到一个解决办法,根据帮助文件(在R控制台键入?faces),在这个案例中微笑的曲线被用在输入矩阵的第6列中。将数据集的第6列填充相同的值0,即所有的曲线是中性的

In[5]:Crime_filled<-cbind(crime[,1:5],rep(0,length(crime$state)),crime[,7:8])


cbind()函数联合多个列形成一个矩阵,上面将犯罪数据集的第6列置为0,其余不变,并重新赋值给crime_filled变量,查看crime_filled6行:


In[6]:Crime_filled[1:6,]


注意,新的数据集中有1列数据的值都为0


crime_filled矩阵使用faces()函数


In[7]:windows()

faces(crime_filled[,2:8])



可以得到类似的脸,但是没有笑脸:


6.添加标签


用州的名字替换数字来标签每张脸谱:


In[8]:faces(crime_filled[,2:8],labels=crime_filled$state)


Label参数设置为crime_filled数据集的州列


可以很容易地将每张脸与对应的州关联起来。怎么样,还不错吧!仔细阅读Rfaces()帮助文件,还可以根据其它功能画出不同效果图。比如,头像可以以圣诞老人为模。


In[9]windows()


a<-faces(crime_filled[,2:8],labels=crime_filled$state,face.type=2)


哇哦,世界上竟然有如此浪漫的统计学家!如此简单易学,只需要一组多维数据、一个faces()函数,就可以轻松搞定Chernoff脸谱。


总之,Chernoff脸谱是一种有趣的数据呈现方法,它可以把多元数据用二维的人脸的方式整体表现出来。各类数据变量经过编码后,转变为脸型,眉毛,眼睛,鼻子,嘴,下巴等面部特征,数据整体就是一张表情各异的人脸。面对错综复杂的信息时,人们会自动过滤掉无用信息,保留有用信息。人脑通常可以察觉到一些非常细微甚至难于测量的变化,然后对其做出反应,同时,人脑区分脸谱时,这种优越性更加明显,因为无论是脸的胖瘦,还是五官的大小位置,都极易给人留下深刻的印象,因而易于区别。


作者简介:席雄芬,北京邮电大学无线信号处理专业研究生在读,主要研究图信号处理,对基于社交网络的图数据挖掘感兴趣,希望借助此平台能认识更多的从事大数据方面的人,结交更多的志同道合者。



原文发布时间为:2015-09-14

本文来自云栖社区合作伙伴“大数据文摘”,了解相关信息可以关注“BigDataDigest”微信公众号

相关文章
|
7月前
|
人工智能 数据库 索引
超越幻觉:检索增强生成如何为AI大模型“装上”事实核查系统
超越幻觉:检索增强生成如何为AI大模型“装上”事实核查系统
440 107
|
8月前
|
人工智能 自然语言处理 JavaScript
用 LLM 辅助性能测试报告生成
性能测试报告通常包含测试概述、方案说明、结果分析、问题定位、优化建议及上线评估等内容。报告编写面临数据分析复杂、撰写耗时、经验依赖等问题。引入大型语言模型(LLM),可实现报告智能生成,提升效率与专业度。LLM具备自然语言生成、数据归纳、专家知识迁移等能力,可适配多格式、多语言输出。通过构建LLM辅助的报告生成引擎,结合Prompt设计,可高效输出结构化报告。实践表明,LLM在测试结论总结、瓶颈分析与优化建议方面表现优异,为性能测试智能化升级提供有力支撑。
544 0
|
SQL Java 数据库连接
mybatisplus QueryWrapper or写法
# MyBatis-Plus QueryWrapper的OR写法详解 MyBatis-Plus是一款基于MyBatis的增强工具,提供了丰富的简化操作,使开发者能更高效地进行数据库操作。`QueryWrapper`是MyBatis-Plus中用于构建查询条件的一个核心类,支持多种条件组合,包括AND和OR条件。本文将详细介绍如何使用 `QueryWrapper`实现OR条件的查询。 ## QueryWrapper简介 `QueryWrapper`用于构建动态SQL查询条件,它封装了各种条件构造方法,使得查询条件的构建更加简洁和直观。`QueryWrapper`中提供了丰富的方法来支持多
2579 0
|
机器学习/深度学习 资源调度 计算机视觉
RT-DETR改进策略【Conv和Transformer】| CVPR-2022 Deformable Attention Transformer 可变形注意力 动态关注目标区域
RT-DETR改进策略【Conv和Transformer】| CVPR-2022 Deformable Attention Transformer 可变形注意力 动态关注目标区域
608 15
RT-DETR改进策略【Conv和Transformer】| CVPR-2022 Deformable Attention Transformer 可变形注意力 动态关注目标区域
|
存储 虚拟化
【2025最新】 神奇!VMware Workstation Pro虚拟机还原与删除功能,让你轻松应对各种场景!
删除和还原VMware虚拟机的操作步骤如下: **删除虚拟机:** 1. 选择要删除的虚拟机,右键点击并选择“移除”。 2. 这仅从列表中移除虚拟机,并未彻底删除。需前往VMware默认存储路径(如 `D:\VMware\data`),找到对应虚拟机文件夹并删除。 **还原虚拟机:** 1. 若误删虚拟机列表项目,可通过右键点击空白处,选择“打开”,找到保存虚拟机的路径文件夹。 2. 选择被删除虚拟机对应的 `.vmx` 配置文件并打开,即可在列表中恢复该虚拟机。 总结:VMware虚拟机可用于模拟多种操作系统和开发环境,掌握删除与还原技巧可提高使用效率。
2179 8
【2025最新】 神奇!VMware Workstation Pro虚拟机还原与删除功能,让你轻松应对各种场景!
|
编译器 C语言
C语言中的浮点数:深入探索与应用
C语言中的浮点数:深入探索与应用
2870 1
|
缓存 JavaScript 前端开发
【性能革命!】Vue 3事件监听缓存的奥秘 —— 揭开前端优化的神秘面纱,让应用性能飙升的秘密武器!
【8月更文挑战第7天】随着前端应用日益复杂,性能优化变得至关重要。Vue 3 通过引入事件监听缓存等新特性提升了应用性能。此特性避免了重复注册相同的事件监听器,减少了资源浪费和潜在的内存泄漏问题。在 Vue 3 中,事件监听器首次渲染时注册,并在后续渲染中重用,除非组件状态变更或手动更新。通过一个示例组件展示了如何利用该特性优化性能,包括使用 `watchEffect` 或 `watch` 在状态变化时重新注册监听器。这一机制降低了浏览器负担,减少了内存占用,提高了应用响应速度,尤其对大型应用效果显著。合理运用事件监听缓存能够构建出更加流畅的应用体验。
801 3
Commons StringSubstitutor对模板占位符进行赋值
Commons StringSubstitutor对模板占位符进行赋值
525 0
|
存储 Python
数据包络分析(Data Envelopment Analysis, DEA)详解与Python代码示例
数据包络分析(Data Envelopment Analysis, DEA)详解与Python代码示例
|
机器学习/深度学习 数据采集 算法
机器学习:升维(Polynomial Regression)
该文介绍了升维的概念,指出在低维度中难以对混合数据进行有效分类,而升维是通过算法将数据投射到高维空间以改善模型性能。文章以多项式回归为例,说明了如何通过升维将非线性关系转换为线性关系,并提供了Python代码示例展示了如何使用`PolynomialFeatures`进行升维。代码结果显示,随着维度增加,模型从欠拟合逐渐过渡到过拟合。
1811 0

热门文章

最新文章