资料来源:多变量图示法 | 切尔诺夫脸谱图
图形是对资料进行探索性研究的重要工具,在我们分析资料之前,往往习惯于把各资料在一张图上画出来。当变量较少时,可采用直方图、条图、饼图、散点图等方法,但当变量个数大于3时,就不能做以上的方法了。统计学家研究发明出了很多多维变量的图示法,比如我们之前写过的雷达图(多维变量一图搞定——带你了解雷达图),除此之外还有脸谱图、星图、散点图矩阵等,今天跟大家一起学习一个比较好玩的图:切尔诺夫脸谱图。
切尔诺夫脸谱图(chernoff faces)由Herman Chernoff 在1973发明, 以人脸的形式展现多种类型的数据。该想法的起因是因为人们对于人脸表情能够毫不费力的识别差异。该法用眼、鼻子、嘴巴、表情等多种人脸表情表示数据维度。
绘制脸谱图有两个包,一个是aplpack,另外一个是TeachingDemos,今天用到的是aplpack包的faces()函数进行绘制。函数用法如下:
几个常用参数的介绍:
xy:数据矩阵
which.row:定义绘制数据矩阵的哪几行(哪几个观测)
face.type:取值范围为0—2,0表示无颜色,1表示彩色,2表示时彩色的圣诞老人,默认为1。
cex:文字大小
main:题目
labels:将每个脸谱图与标签结合
脸谱图采用15个指标代表面部特征:
1 脸的高度; 2 脸的宽度;3 脸型;4 嘴巴厚度; 5 嘴巴宽度; 6 微笑; 7 眼睛的高度; 8 眼睛宽度; 9 头发长度; 10 头发宽度; 11头发风格; 12 鼻子高度; 13 鼻子宽度; 14 耳朵宽度; 15耳朵高度
install.packages("aplpack")
library(aplpack)
所使用的数据集是美国犯罪数据
crime <- read.csv("http://datasets.flowingdata.com/crimeRatesByState-formatted.csv")
#查看数据集
View(crime)
该数据集共有52个观测,8个变量,其中第一列是洲名。
faces(crime[,2:8],labels=crime_filled$state,cex=0.8)#由于第一列是洲,因此绘制的是第一列到第八列
一个人脸代表一个观测,变量在脸谱图中代表意义说明如下:
由于脸谱图有15个指标,而crime只有7个变量,因此有些变量由2个指标表示。总结如下:
脸高,眼宽,耳朵高度表示murder(谋杀);
脸宽,头发高度表示forcible_rape(强奸);
脸的结构,头发宽度表示robbery(抢劫);
嘴巴高度,头发发型表示aggravated_assault(恶意攻击);
嘴宽,鼻子高度表示burglary(夜盗);
微笑,鼻子宽度表示larceny_theft(盗窃);
眼高,耳朵宽度表示motor_vehicle_theft(机动车辆盗窃)。
变量太多不利于观察,选取其中9个变量:
faces(crime[1:9,2:8], labels=crime_filled$state,cex=1.2,face.type=0)
如上图,我们很清楚地看到Arizona和California 的眼睛高度和耳朵宽度都比其他的大,证明再Arizona和California这两个地方的motor_vehicle_theft案件比其他地方多。
画彩色图:
faces(crime[1:9,2:8], labels=crime_filled$state,cex=0.8)
结果解释同上
#画圣诞老人
faces(crime[1:9,2:8], labels=crime_filled$state,cex=1.2,face.type=2)
除此之外,切尔诺夫脸谱图还可以与散点图结合在一起
plot(crime[1:9,c(2,4)],bty="n")#先画一个散点图
a<-faces(crime[1:9,2:8],plot=FALSE)
plot.faces(a,crime[1:9,2],crime[1:9,4],width=0.5,height=16,cex =0.8)#切尔诺夫脸谱图与散点图结合
以上就是今天切尔诺夫脸谱图的全部内容,值得注意的是,用来绘制切尔诺夫脸谱图的变量只能是连续变量,用其他类型的变量将会导致出错无法绘制,当然了您可以进行数据转换之后再绘制。
欢迎大家关注我的公众号!
参考资料:
1.https://flowingdata.com/2010/08/31/how-to-visualize-data-with-cartoonish-faces/
2.R帮助文件
网友评论