当前课程知识点:R语言数据分析 > 下部:博术 > 第10章 观数以形 > 10.3 二维数据空间
大家好
欢迎来到《R语言数据分析》课程
今天我们看一看
如何表征二维空间的数据形态
刻画变量之间的关系
我们说到变量的时候
我们一般将变量分成两类
一个是数值变量
一个是类别变量
要刻画两个变量之间的关系的话
我们可以有这么至少三种组合
一个是类别变量和类别变量
第二种是数值变量与数值变量之间关系
第三种是类别变量与数值变量之间的关系
我们要刻画这个类别变量
和类别变量之间关系的话
一般要采用这个什么
矩形树图
矩形树图
当我们这个两个变量都为数值变量的时候
我们可以通过这个散点图和相关系数图
来进行刻画
一个变量为类别变量
另外一个变量为数值变量的时候
这个时候我们一般是通过这个分组绘图的方式
来刻画它们之间关系
下面我们先看第一个
就这个类别变量和类别变量
如何来刻画它们的关系
我们通过矩形树图来刻画
类别变量之间关系的时候
它其实采用这么一个逻辑
所谓矩形树图
它就是个嵌套的什么 矩形
来表征我们层级的数据
比如说我们现在想知道文理分科
文科和理科和性别是否有关系
我们可以通过这么一个矩形树图来表达
比如说我们总共学生有774个
文科生有多少 394
理科生有380
然后在文科生里面男生有131
女生有263
在理科生里面
男生有237
女生有143
就是一个层级结构
那矩形树图其实就是什么
对这个层级结构一个直观的表达
通过将这个面积映射为相应的数值
来直观的表达它一个分布的情况
比如说我们可以看得出来
这个矩形树图现在有两个层级
上半部分这个矩形是文科
下半部分 这个矩形是什么
是理科
就文理分科本身文科生和理科生
它是相对比较均衡的
但是文科生里面的女生是占绝大多数的
然后这个理科生里面男生是占绝大多数的
我们看得出来是比较明显
所以文理分科确实有一定的
性别的倾向性
当然我们看看
可以通过R来具体实现一下
要绘制这个矩形树图的话
可以调用这个treemap::treemap()
这么一个函数
在绘制图形之前
我们先要对这个数据进行整理
对数据进行整理
也是针对我们这个cjb这个数据
采用管道操作符
先对文理分科wlfk 班级bj 性别xb
进行一个分组
然后summarise()进行统计
统计相应的组别它的什么
学生的个数
当然因为我们这个treemap这个函数
只能接受这个data.frame
所以我们对它进行一个转换
转换之后我们看一下
我们现在要呈现的指标就是
wlfk bj xb
然后具体的组
每一组里面
这个也就是说这个组分组有这么三个层级分组
具体的我们要映射的大小是什么
就是这个count
这个count
就我们刚才统计出来这个什么
summarise的结果
就每一个组它具体包含多少学生
同样我们也可以对相应的其它一些参数进行设置
比如说我这个颜色
这个绘制图形的那个类型
这个type
咱们看一看这个矩形树图
它具体结果
同样这个矩形树图我们看得出来
它是有这个三个层次了
首先是什么
首先是文科在左
理科在右
这是一级的
第一级 第一个层级
第二个层级是什么
第二层级 具体的班级
比如 1102班 1103班 1105班
然后第三个层级是什么
才是我们那个男女分别的数量
我们这为什么不是1101 1102 1103班
它这个矩形树图是什么
从左上角到右下角
它的取值大小是依次减少
所以1102班的人相对多一点的话
它就排在上面
通过这个图我们可以直观看出来
男女在这个文理分科 性别 班级这一块
它们相互之间的关系
总体上我们还是一样
这个结论和前面是一致
就是理科和文科是相对均衡
但是 不同的班级
男女生的比例是差别比较大的
比如说这个文科班里面
尤其是1105班
女生占绝大多数
1106班也是
男女比例是严重失调
然后针对这个理科生这一块来
比如说1113班
男生比例占绝大多数
1115班也是
女生只是占极少的一个比例
所以通过这个矩形树图的话
我们可以看得出来整个这个布局
就是整个这个不同的类别变量之间
它相互之间是否有关系
这是矩形树图的一个最基本的一个概念
以及在R里面相应的一个实现
我们再看第二种
第二种情形就是
当我们这两个变量都是数值变量的时候
我们一般就通过这个散点图
或者相关系数图进行刻画
咱们来看一下
所谓散点图在R里面实现的话相对比较简单
就是什么
geom_point
这个前缀还是一样的
表示它映射成相应图形为什么
为点
比如说我们现在想知道这个sx sw
它们相互之间的关系
我们可以绘制个散点图
当然我们也同时将什么
将这个点映射成什么
它的形状
将文理分科区别开来
咱们看一下具体结果
可以看得出来
这个时候是把sx映射为X轴
然后这个sw映射成Y轴
然后可以看得出来文理分科的话
理科生还是相对偏什么
还是相对偏我们那个右上角
也就是它的成绩相对要都要高一点
这里面其实就是
两个变量所张成的什么
张成的一个二维的数据空间
不同的学生
它在这个数据空间里面
所处的位置
也是一个散点的位置
当然当我们涉及到多个变量的时候
其实也可以做两两之间的什么
散点图
假如是采用这个ggplot的这个绘图系统的话
可以用这个ggpairs
就两两之间进行绘图
这个图里面左下角
这部分
下三角这一部分是什么
就是我们的散点图
上三角 这个是什么
是相应的相关系数
就每个变量
一个变量和另外一个变量
它的相关性的程度
相关性的高低
这里面有些具体的数值
我们来看一下这个数值是怎么计算出来的
我们所谓的相关性指什么
就当一个变量变大的时候
另外一个变量也随之变化
要不就随之增大
要不就随之减少
这里面就是所谓的正相关和负相关
当一个变量变化
另外一个变量也变化的时候
这种现象称为什么
共变
也就是我们所谓的什么
相关
当我们这个变量之间具有共变现象的时候
我们就称之为具有相关关系
一般来讲没有特别说明的情况之下
我们的相关系数都是什么
都是线性相关系数
或者说皮尔逊相关系数
它的具体计算公式
我们可以看一下
我们现在主要关注的是什么
主要关注的是分子这一部分
因为分母这部分的话是什么
是一个标准化的过程
就是分子这一部分
它是直观的表达了一个变量在变化的时候
另外一个变量也随之变化
具体怎么表达的
就是比如说X和Y的话
就是Xi减X平均值
就是X的每个取值和它的什么
平均值的一个偏差
乘上什么
Y的每一个取值减Y的平均值的偏差
相应位置的Y和X这个偏差相乘再相加
这就是我们的什么
其实我们通过这个分子
我们看得出来分子里面隐约有什么
有协方差的影子
这个协方差协方差关键在于什么
在于协是不是
就是一个变量的变化
另外一个变量也在变化
当然看完这个数学公式之后
我们当然可以记住它
但我们更应该深入理解
为什么说相应位置的偏差
相乘之后再相加
就能代表这个所谓的共变性
或者相关性
或者怎么来把这个协同的程度就表达出来了
其实关于这个协方差
我们可以结合之前讲过的什么
内积来进行理解
求我们内积的时候是什么
也是相应位置元素相乘再怎么样
再相加
看起来是一个加减乘除的一个简单组合
但我们在前面讲到了
内积其实代表什么
就同心 同向性
你在我这个身上的影子
你在我身上的什么强度
在你在我这个方向上的强度
当然同样的我们协方差也是一样
无非是这个什么
这个X和Y分别改成了什么
Xi减X平均值
Yi减Y的平均值了
所以确实也可以看得出来
它其实就是什么
虽然是一个简单的相乘再相加
其实也表达了这里面一个协同
一个共变的一个过程
我们看完这个内积概念
其实也就更加深入的理解了
这个所谓的协方差的概念
也就是说为什么它是协同的
是共变的
同样我们也就对这个相关系数
相关性有了更深的理解
那咱们再看一看在R里面具体是如何实现它的
如何计算这个相关系数
R里面计算相关系数的函数
就是cor()
就表示计算相关系数
当然这个函数假如你再设置其它一些参数的话
也可以计算其它一些相关系数
我们默认的是皮尔逊相关系数
当然也可以求什么肯德尔相关系数之类的
咱们先看
我们这个假如不设参数的话
默认的计算出来的
皮尔逊相关系数一个结果
这里面得到这个什么
得到这个相关系数矩阵
相关系数矩阵
对角线上毫无疑问自己和自己的话都是什么
都是取值为1
相关性是百分之百的
然后正相关的话就是取值偏向于1
负相关的话取值偏向于-1了
我们在看这些相关系数矩阵的时候
因为这一大堆密密麻麻的数据
其实我们是很难看的出来哪些变量之间
它相关性比较强
哪些变量之间它相关性比较弱的
我们其实还是需要借助一些直观的
一些图形来表达它
我们这个时候就引入一个新的图形了
就是相关系数这么一个图
我们在绘制这个图形的时候也是
先将这个数据进行整理
先分第一部分
先是第一个步骤
我们先计算这个相关系数矩阵
将这个相关系数矩阵怎么样
变成一个data.frame
然后将每一行的名称
也就是我们看到的那九个科目的名称
语文yw 数学sx 外语wy等等
一直到生物sw
将它什么变成新的一列
这一列叫km1
然后怎么样
我将这个宽的数据变成长的数据
每一列它的列名都放在km2
这里面
然后这个具体的取值
放在这个我再给它取个名字
当然这个时候只有km1
是不参与这个长宽变换的
在长宽变换之后
我再怎么样
我再将它进行一个离散化
进行一个装箱
调用cut()这个函数
我们将整个这个相关系数 相关性
从0 0.3 0.5 0.8到1
切分成这么几个区间
表示我们相关程度的高低
当然这个时候我们设了一个
right=FALSE
表示什么
表示我是左闭右开的一个过程
左闭右开的一个区间
咱们先看看前面这一部分代码
它的结果是什么
我们拿到了原始数据
就是这个相关系数矩阵
是左侧这个图
我们先将什么
先将yw sx wy等等这些变量名称
先变成了新的一列km1
然后我做了数据的什么
由宽的数据变成长的数据
也就是说每一列
每一列 每一列 每一列
我现在什么要把它叠在一起了
放在一起了
变成就是多行
就是现有的一行
要变成新的九行
变成我们这种情况
km1 km2 是不变的
这个时候怎么样
比如说这个时候语文语文对应的是1
还在这
然后语文数学0.46
对应到第二行
这是我们前面讲过的数据长宽变换的过程
在长宽变换之后
这个数据拿到之后
我再针对这个数据进行什么
进行分箱
把它落入不同的区间
进行离散化
这个数据整理完之后
我们就可以进入这个绘图环节了
进入第二个步骤
也是接下来这些代码
我们采用的还是这个ggplot
那个绘图这么一个系统
在具体映射的过程中
将x映射成km1
y映射成km2
然后我这个填充映射成什么
我具体的相关性的水平
刚才cut()的结果
离散化的结果
所映射的图形是这个geom_tile
tile的话我们看是什么
就是我们那个瓷砖
假如要看英文意思的话
是瓷砖类似这样的
它其实我们可以直观想象一下
就像我所最后得到结果
所得相关系数图
它就像地上一块一块的瓷砖
方的瓷砖放在一起
同样还做了其它一些那个参数的设置
包括我们后面还将什么
还将这个具体的相关系数
我们也映射到放到这个图里面来了
咱们看一看具体结果
这张图就是我们刚才这个geom_tile
这么一种图形
它确实像什么
就像一个个瓷砖一样
这边我们将这整个相关系数分成这么几个区间
可以看得出来
比如说这里面有一些颜色比较深的
0.6 0.62 等等
就是比如说这个什么
这个是化学和我们的这个物理
它相关性比较强
也就是说你化学成绩比较好的话
你物理成绩可能也比较好
这就是相关系数在R里面的计算
以及它的可视化展示
这前面两种情况我们做了一个简要的介绍
就是类别变量和类别变量之间的关系
数值变量与数值变量之间关系
当然还有一种可能是什么
我这里面两个变量里面
它类型是不一样的
一个是类别变量
一个是什么 数值变量
这个时候我们用到什么
就用了分组绘图
这么一种方法
分组绘图
实际上我们在前面讲单个变量的时候
讲了很多
它的数据形态 刻画的方法
所有的方法基本都可以用到这个
分组绘图里面来
就是我这个类别变量作为什么
类别变量作为我的那个分组变量
然后具体绘图的时候就按这个数值变量
绘制我的箱线图
绘制我的概率密度图等等
比如说我们现在按照这个不同的班级
来绘制数学成绩的分布
绘制它的箱线图
这个时候我就将班级作为什么
班级作为我的分组变量
然后对数学成绩绘制相应的箱线图
大家看一下
这个时候我将x映射成什么
映射成bj
它作为组别
具体将数学映射成相应的什么
箱线图
映射成相应的箱线图
咱们看一下
具体的
绘图结果
这时候可以看得出来
X轴的话就是所有的班级
从1101班一直到什么1115班
然后这个时候我们再看
它具体每一个班都有什么
都有一个箱线图
当我们有了分组这个绘图之后
就可以对不同的组别它的数据分布形态
做一个非常直观地比较了
比如说文科班的从一班到七班
它们前面这几个班
它数学成绩都怎么样
第一是相对来讲这个中位数是相对偏低的
第二是它的什么
箱子相对比较长
也就是这个四分位距是比较大的
那好也证明
这前面几个班的文科生
它是整体的数学水平
数学成绩比较低
同时还数学成绩比较分散
比较分散
再比如说这几个班的
这几个理科班的数学成绩
它怎么样
中位数很高
对不对
也就说平均大部分的同学的数学成绩都比较高
同时它箱子比较短
表明什么
大部分数学成绩都是比较集中的
整个这个班并不是说
有些同学数学成绩是九十几
有的同学成绩可能只是六十几
这分散程度很高
分散程度很大
还不是那样
它就第一是总体水平比较高
第二是什么
相对比较集中
集中在这个比较高的一个分数段里面
当然除了箱线图之外
我们应该绘制什么
可以分组绘制这个概率密度图
分组绘制概率密度图的时候
我们一个新的叫法叫什么
层峦叠嶂图
这个名字是一个非常直观的名字
非常直观 非常形象
我们一会要看它具体的图形来展示
这时候我们要需要调一个什么
ggridges
就是一个山峰
山的脊梁的意思
这里面可以把我们
这个同样我们是把这个数学成绩进行映射
按照班级来映射
因为我是什么
我后面要用到一个坐标的什么
坐标的旋转
就把它横过来
所以这个时候Y映射成班级作为分组变量
具体映射的几何图形
就是这个我们所谓的层峦叠嶂图
我们看一下它具体的效果是什么
从这个图就可以看得出来
它每一个山峰其实都是什么
都是不同的班级
都是不同的班级
这样一眼看过去的时候
它确实什么
就像我们在飞机上
看我们的山峰一样
通过这个层峦叠嶂图
或者说分组的概率密度图
我们能比较直观的看出来
这个数据的高矮胖瘦
高矮胖瘦
比如说这几个文科班的同学的成绩
我们刚刚通过箱线图也看得出来
它是比较分散的
然后像这几个理科班的成绩
它是相对比较瘦的
这个数据相对比较瘦
怎么样
它相对比较集中相对比较高
属于那个瘦高型的这么一种数据分布形态
同时我们可以比较不同的班级
它所站的位置
比如说这个班
这个班它站的毫无疑问就偏什么
就偏右
也就是说我这个成绩是相对偏高一点
像这个班的话
相对来说它的位置在这个位置
假如这两个班相比较的话
毫无疑问这个班的平均成绩可能是
这个班的平均成绩相对要是偏高一点
也就说数据的站的位置不一样
也能看得出来它集中的一个趋势
这是我们所谓的层峦叠嶂图
来反映不同的组别它数据分布的一个差别
进行对比
以上就是我们通过这个分组绘图
分组的箱线图
分组的概率密度图
也就是层峦叠嶂图
对不同的组别数据分布的形态进行一个比较
其实不仅仅是可以对不同的组别的数据分布
形态进行比较
它还可以用于特征的分组绘图
还可以用于什么特征的选择
比如我们针对这个分类问题
我最关注的组别是什么
就是我的最后的因变量
比如说我们现在关注的问题
就我们文理分科这个问题情境而言
就最后的组别就是究竟是分成文科
还是分成理科
那文科和理科和我那个特征
和我的前面的成绩究竟没有关系
那这个时候我可以怎么样
将因变量
将文理分科wlfk作为分组变量
对不同的特征
也就不同的那个成绩进行什么
分组绘图
比如这个时候我分两组绘制所有的成绩的什么
概率密度图
我们可以看一下
它们是否有区别
这时候我们可以加载这个什么
caret这个包
其中有一个什么
有这么一个函数那个featurePlot()
就针对不同的特征进行绘图
分组绘图
我们看一下
这时候的结果
我们可以看得出来
不同的自变量
其实对这个因变量的辨别能力它是不一样的
譬如说
这个化学它的文科生就相对怎么样
这个数据分布就相对比较胖一点
而且相对比较分散
而理科生的话相对什么
相对是比较尖一点
相对比较瘦一点
就文理分科它其实有比较大的那个区分度的
但像某一些科目
比如说历史
基本上文理分科就叠在一起了
就文科生也是这样
理科生也是这样
包括后面的什么后面这个语文
语文成绩也是一样
就文科生的语文成绩和理科生语文成绩
几乎没有什么太大区别
也就是说我们意味着我们后面在做分类的时候
通过这个分组绘图
我们可以看得出来
在我们这个后面做分类的时候
其实像历史语文它可能辨别能力
或者说它的分类能力
可能就不如我们刚才看到的
这些化学和物理这些科目了
这也为我们
通过这个直观的展示
通过这个对这个分组的绘图
也为我们后面的进一步的建模打下一个基础
以上我们讲解了一下
就是类别变量和类别变量
数值变量和数值变量
以及类别变量与数值变量之间的关系
它一些具体的刻画的方式
当然我们这讲的方法还是相对还是有限
感兴趣同学可以进一步看ggplot2
它相应的一些其它的一些函数
绘制更多形式的一些图形
对我们整个这个数据进行更深入的探索
本次课到此结束
谢谢大家
-第1章 气象万千、数以等观
--第1章 作业
-第2章 所谓学习、归类而已
--第2章 作业
-第3章 格言联璧话学习
--第3章 作业
-第4章 源于数学、归于工程
--第4章 作业
-讨论题
-第5章 工欲善其事、必先利其器
--第5章 作业
-第6章 基础编程——用别人的包和函数讲述自己的故事
--6.1 编程环境
--6.4 控制流
--第6章 作业
-第7章 数据对象——面向数据对象学习R语言
--第7章 作业
-第8章 人人都爱tidyverse
--第8章 作业
-第9章 最美不过数据框
--第9章 作业
-第10章 观数以形
--第10章 作业
-第11章 相随相伴、谓之关联
--11.1 导引
--第11章 作业
-第12章 既是世间法、自当有分别
--12.1 导引
--第12章 作业
-第13章 方以类聚、物以群分
--13.1 导引
--第13章 作业
-第14章 庐山烟雨浙江潮
--第14章 作业