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

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

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

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

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

1表示脸的范围

2表示脸的形状

3表示鼻子的长度

4表示嘴的位置

5表示笑容曲线

6表示嘴的宽度

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

12表示瞳孔的位置

13—15分别表示眼眉的位置,角度及宽度。

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

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

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

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

faces(xy,which.row,fill=FALSE,nrow,ncol,scale = TRUE,byrow =FALSE,main,labels)

下面是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中找到,我们没有必要下载它,可以通过URL在R中直接调用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])用数据集的第2至8列变量来画脸谱,

其中:

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

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

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

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

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

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

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

5. 变换特征

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

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

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

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

不巧的是,R中face()函数并不允许我们自己选择每个变量关联的人脸部分,我们需要找到一个解决办法,根据帮助文件(在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_filled前6行:

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数据集的州列

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

In[9]windows()

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

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

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

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

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

时间: 2024-08-03 15:49:00

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

大数据可视化的最新动态

引言 数据可视化 是将数据以不同形式展现在不同系统中,其中包括属性和变量的单位信息.基于可视化发现数据的方法允许用户使用不同的数据源,来创建自定义分析.先进的分析集成了许多方法,为了支持交互式动画在台式电脑.笔记本电脑或平板电脑.智能手机等移动设备上创建图形桌面.根据调查,表1显示了数据可视化的好处. 对于可视化有以下几点建议 大数据 是大容量.高速度并且数据之间差异很大的数据集,因此需要新的处理方法来优化决策的流程.大数据的挑战在于数据采集.存储.分析.共享.搜索和可视化[5] 1."所有数据

数据可视化效果若干经验与资料分享

 [编者按]本文作者星河里的章鱼喵,文章通过介绍Visualization 即可视化,罗列了数据的展现方式.对于数据分析最困难的一部分就是数据的展示,解读数据之间的关系,清晰有效的传达并且沟通数据信息. 对于数据挖掘,我们可以通过文中对数据可视化的案例找到分析数据.展现数据的方法和思路. Data visualization 是一件很有趣的事情.最近在尝试处理数据,便顺手翻了翻 visualization 的进展,然后除了 IBM 大名鼎鼎的的 many-eyes . 还有一个比较好有意思的网站

大数据可视化的新进展

在简化数据量和降低大数据应用的复杂性中,大数据分析发挥着关键的作用.可视化是其中一个重要的途径,它能够帮助大数据获得完整的数据视图并挖掘数据的价值.大数据分析和可视化应该无缝连接,这样才能在大数据应用中发挥最大的功效.这篇文章将介绍一些常规的数据可视化方法以及在大数据应用领域突破常规的可视化手段,也会讨论大数据可视化带来的挑战,同时介绍大数据可视化领域新的方法.应用程序以及其技术的进步. 一.引言 数据可视化是将数据以不同形式展现在不同系统中,其中包括属性和变量的单位信息[1] .基于可视化发现

挑战数据可视化必备五大原则

不管你是要将健康福祉.购物习惯还是在社论中将数据表示成何种形状,奥菲尤尔小组总结出以下挑战数据可视化必备五大核心原则. 在数字时代初期,数据完全由数学家与科学家们鼓捣.而如今,不管任何领域,任何人,都逃脱不了对数据的讨论和研究.不光在线服务依赖数据,我们本身也是产生我们生活各方面信息源源不断的数据来源. 无论是人体数据--由于可穿戴设备的兴起--我们在家的能耗,或个人财务相关的数据:大量数据的数据由我们产生,而当前我们需找到方法去了解它对我们的意义. 个性化数据在企业间兴起一股收集客户信息并寻求

数据可视化:一张图胜过一千句话

信息爆炸时代,一组经过精心设计.形象生动的信息图往往要比一篇深度长文章更容易赢得眼球和青睐.在社交媒体上,你会发现,出色的可视化产品很容易就获得海量转发和分享. "媒介即讯息"这是著名媒介理论家马歇尔·麦克卢汉在20世纪时就给出的结论.在他老人家看来,媒介影响了我们思考和理解的习惯. 实践也表明,当时间紧迫或心绪浮躁时,长篇大论的文字和杂乱无序的数据往往会让人产生压迫感和厌倦感,"消化"起来也费劲. 相比之下,如果一张可视化信息图表能够做到内容有趣.逻辑清晰并且设计

《R数据可视化手册》一第3章 条形图3.1 绘制简单条形图

第3章 条形图 R数据可视化手册 条形图也许是最常用的数据可视化方法,通常用来展示不同的分类下(在x轴上)某个数值型变量的取值(在y轴上).例如,条形图可以用来形象地展示四种不同商品的价格情况,但不适宜用来展示商品价格随时间的变动趋势,因为这里时间是一个连续变量--尽管我们也可以这么做,后面会看到这种情形. 绘制条形图时需特别注意一个重要的细节:有时条形图的条形高度表示的是数据集中变量的频数,有时则表示变量取值本身.牢记这个区别--这里极易混淆,因为两者与数据集的对应关系不同,但又对应同样的术语

用R语言进行数据可视化的综合指南(一)

让我们快速浏览一下这张图表: 这张可视化数据图(最初用Tableau软件创建 )是如何利用数据可视化来帮助决策者的一个很好的例子.想象一下,如果这些信息通过表格来告诉投资者,你认为你会花多长时间来向他解释? 如今的世界里,随着数据量的不断增长,很难不用可视化的形式来呈现你数据里的全部信息.虽然有专门的工具,如Tableau, QlikView 和 d3.js,但没有任何东西能代替有很好可视化能力的建模/统计工具.尤其是它有助于做若干探索性数据分析和特征化工程.这就是R语言,它提供了令人难以置信的

用R语言进行数据可视化的综合指南(二)

高级可视化效果 什么是Hexbin Binning? 如果在同一个地方有很多点(overplotting),我们可以使用Hexbin包.六边形面元划分是一种二元直方图,对大数量级结构的数据集的可视化非常有用.下面是代码: >library(hexbin) >a=hexbin(diamonds$price,diamonds$carat,xbins=40) >library(RColorBrewer) >plot(a) 我们也可以创建一个调色板,然后用Hexbin绘图功能以获得更好的视

《R数据可视化手册》一第2章 快速探索数据2.1 绘制散点图

第2章 快速探索数据 R数据可视化手册虽然本书中大部分图形都是通过ggplot2包绘制的,但这并不是R绘制图形的唯一方法.要快速探索数据,有时使用R基础包中的绘图函数会很有用.这些函数随R软件默认安装,无需另行安装附加包.它们简短易输入,处理简单问题时使用方便,且运行速度极快. 如果你想绘制较为复杂的图形,那么,转用ggplot2包通常是更好的选择.部分原因在于ggplot2提供了一个统一的接口和若干选项来替代基础绘图系统中对图形的修修补补和各种特例.一旦掌握了ggplot2的工作机制,你就可以