当前课程知识点:R语言数据分析 > 下部:博术 > 第10章 观数以形 > 10.1 一维数据空间(I)
大家好
欢迎来到《R语言数据分析》课程
今天我们看一看
如何认识和刻画一维数据空间
我们说到一维数据空间的话
是一个看似比较高大上的概念
但其实它就是单变量
具体而言它就是一根什么
数轴
然后我们观测到的数据记录
其实就是在相应的数轴上
相应的位置
它有一个取值
比如说 我们现在观测到一组数
假如说我们这是一组数学成绩的一个取值
我们可以看得出来
这里面在九十几分 八十几分的时候
这些地方相对取值是密一点的
而在80分以下的话
相对取值就少一点
就相对稀疏一点
当然也有可能在某些位置上
它有多个点重叠在一起
这时候我们可以看得出来
八十几分的时候
85分左右
它是相对取值比较密集
也就说集中在这一部分
我们所谓对一维数据空间进行描述
或者说对单变量进行认识和刻画
其实就是什么
其实就是描述整个数据分布的一个形态
具体来讲
我们有这么一些手段
比如说
我们可以通过茎叶图
直方图 概率密度图
小提琴图 箱线图
或者是一些复合的图形
比如说这个是
小提琴图和这个箱线图叠加的一个复合图形
通过这些图形 我们来直观的认识
究竟我们这个数据是怎么分布的
好 接下来我们先看一下这个茎叶图
我们现在拿到一组数
是1101班所有同学的数学成绩
总共有52名同学
那相应的我们拿到52个数据点
总共有52个数据
我们可以粗略的看
这里面有不少同学是八十几分的
也有一些同学是七十几分
甚至是五十几分
当然也有比较高的同学
成绩比较高的同学
九十几分的也有
类似这样的
我们来看 用肉眼来看的时候
能有一个直观的印象
知道可能哪些分数段集中的同学是比较多的
当然这些是相对是比较粗略的
那我们有没有更好的办法
我们可以通过这个茎叶图
来看看数据如何分布
这是我们
52个同学的数学成绩相应的茎叶图
就是左下角这一部分
茎叶图顾名思义它分成两部分
一个是什么
一个是茎
一个是叶
这个茎叶图其实和我们原始数据是一一对应的
为了展示这个对应关系
我们将什么
将整个这个52个同学的成绩
进行从低到高进行排序
比如说
我们现在看这一行
这边是茎是5
然后叶子呢
是5-7-9-9
那好
这里面其实和原始数据的55-57-59-59
是完全对应的
这个对应关系是什么
就是茎乘以10的n次方
再加上叶子乘以10的n-1次方
这里面n是取值为1的
所以我们可以通过这个茎叶图
就将整个这个数据的一个分布情况
看得相对是比较清晰了
它集中分布在哪
分布在七十几分
七十几分
当然这个数据是相对比较简单一点
我们可以看一下相对比较复杂的数据
怎么通过这个茎叶图
来进行它的分布形态的一个刻画
我们现在拿到这个数据
比前面那个数据相对就复杂一点了
它相应地茎叶图是什么
是下面这个
同样
这里面也是这么一个对应关系
但这个时候
n的取值就为2了
也就是说
这里面5是乘以多少
10的2次方
也就是5乘100
相应的是500
这边是40
60 90 90
就是540 560
590 590
是这么一个对应关系
也就是说
茎叶图的每一片叶子
和我原始数据是一一对应的
但可能有同学会问了
你这里面对应的后面不还有一个数据点
596
那应该还有接着应该写一个9
因为我这个时候
叶子只能有一位数
只能有一个数来表达它
那怎么办
我只能什么
只能是取整
四舍五入了
596四舍五入之后就变多少
就变成600
也就相应的变成这个点上面来
这个606也就变成多少
变成1了
610
它也就是说
尽量保留原始数据点的信息
同时能刻画它的分布形态
这就我们所谓的茎叶图
也就是说我们这个茎叶图
既能保留
数据的原始的信息
同时能刻画它的形态
我们来看一下
具体的
在R里面怎么实现
同样我们是以数学成绩为例
我们拿两个班的同学数学成绩
一个是1101班的
一个是1110班的
分别是文科班和理科班
两个班的数学成绩
我们拿茎叶图来刻画它的形态分布
并且进行一个对比
咱们看一下代码实现
前半部分
这一部分代码
其实都是什么
都是做数据的整理
就是从成绩表里面
通过这管道操作符
先filter
也就是把什么
相应的行取出来
就是班级为1101班的这个行都取出来
这些行都取出来
取完之后
我们只选定其中的什么
sx这一列
并将它转换成向量 [代码可优化为pull(sx)]
这个时候也就是什么
也就是我将1101班的所有同学的数学成绩取出来了
取完之后怎么样
交给stem这个函数
交给stem函数进行绘图
绘制茎叶图
同样 对于1110班同学而言
它其实所有操作也是一样的
无非是这个什么
班级选择不一样
咱们可以看一下
生成了两个茎叶图
它所呈现的数据分布的形态有什么特点
左侧是1101班的
右侧是我们那个1110班的
可以看得出来
1101班的同学的数学成绩分布
在七十几分居多
其次是80分
60分也有
然后像特别高的九十几分的
特别低的 不及格的五十几分的
就相对比较少一点了
与那个1101班形成鲜明对比的
比如这个1110班
它的成绩的分布可以看得出来
它的茎是多少
是89 90 91
都是什么
都是几乎都是90分以上了
而且集中在哪
集中在96分左右
所以看得出来
文科和理科班这两个班
数学成绩差别非常大
从这个数据分布形态也可以看得出来
虽然说我们这个茎叶图
能有效地表达数据分布的一个形态
并且能最大程度保留我们原始数据的信息
但我们需要指出来的是什么
这个茎叶图一个缺点
这缺点是什么
数据量不能太大
也就是说叶子不能太多
假如我们想象一下
这里面有几万个叶子
有几万个数据点的话
毫无疑问
我们通过茎叶图是没有办法表达的
这时候怎么办
我们可以换一种方式
既能看出数据分布的什么形态
同时我又不受这个数据个数的约束
是什么
是我们现在要讲的这个直方图
直方图最基本思想
是将我整个这个区
数据的取值区间
分成若干个小的区间
也就是说将数据进行一个
分箱的处理
每一个bin箱那个小箱子一个小区间
然后
计算落入每一个区间的数据点的个数
也就是counts
比如说 我落了95到100这个区间里面有149个人
然后
这里面再进一步的什么
将相应的这个落点的个数
映射成什么
柱子的长度
以此来表达什么
我整个这个数据在不同的区间里面
是如何分布的
这个可以看得出来
在我们这个所有700多个同学里面
它的数学成绩分布在哪
绝大部分也在哪
还是在八九十分的样子
有一部分同学分布的
它的数学成绩相对比较少的
就是
集中在高分
但是
有一部分同学
也就形成这么一个拖尾
在绘制这个直方图的时候
数据这个区域的切分
是比较关键的
那我究竟要把这个数据切成多少份
我们来看看
是具体如何计算的
切分成多少份
这个K
可以直接按这个公式来算
比如说
我假如总共有N条记录的话
我取2的对数
取2的对数再向上取整再加1
这是一种取K值的方法
就是分成K份
还有一种方法是什么
我先确定每个箱子的长度
一旦确定长度之后
其实K的值相应的也就确定了
用极差也就极大值减掉最小值
除以这个什么
箱子的长度
每个区间的长度
然后再向上取整就可以
那具体而言
这个箱子的长度
也有些不同的计算的方法
比如说这里面是通过这个标准差
来进行计算
或者是通过什么
四分位距
也就是第三分位数减掉第一分位数
就四分位距来计算也都可以
当然这个过程相对比较复杂
我们看看在R里面是如何实现的
我们看看在R里面怎么实现
在R里面通过hist这个函数
就可以直接绘制一个直方图
但这个hist函数所绘制的直方图相对比较简单
比较原始
希望通过更加丰富的表达方式把它表达出来的话
我们可以借助什么
ggplot2这么一个扩展包
为了和这个
最基本的hist函数所绘制的直方图完全一样
我们将hist这个函数所返回的相应的一些结果
比如说
它的什么
它的这个切分点
有这个区间的端点这个breaks
我们可以先提取出来
当然这个时候我们先不绘制这个图
只是
我们这个时候设为plot等于FALSE
先不绘制这个图
只是提取相应的参数
进一步交给ggplot2来使用
好 我们来看看ggplot2怎么实现它
ggplot2
首先调用这个ggplot这个函数
这里面有
接下来有一系列的什么
一系列的参数的设置
包括有连续要进行好几个操作
比如说我要绘制直方图
我还要叠加相应的什么
相应的每个区间上相应的文本
就以文本的方式将每个区间
每个柱的长度
在图上显示出来
初次看到这个ggplot的绘图的话显得比较复杂
所以我们简单讲解一下
ggplot2绘图的一个最基本的思想
我们所谓的ggplot
这个gg代表什么
它其实是一个什么
它是一套图形的语法
就基于一套图形的语法
来建立这么一个ggplot2这么一个绘图系统
当然这个2的话表示什么意思
2.0版本
当然以前有一个ggplot
但我们现在所知道的
流行比较广泛的使用比较多的
就是ggplot2
这么一个扩展包
它最基本的思想是什么
就是将相应的数据
映射成什么
映射成几何的形状
映射成几何形状
最基本的数据的结构是什么
就是一个数据框
比如说
我现在有三列
有F有M有A
我现在将F映射成什么
X
将这个A映射成Y
那好
我这两列数的话基本就确定了什么
每一行
它在相应的我这个坐标轴上(坐标空间)的什么 位置
因为你的横坐标纵坐标确定之后
我的位置就确定了
同样的
我还可以将什么
其它的一些
几何图形元素
比如说它的颜色
它的这个点的大小
也进行映射
也就是说ggplot
它其实就是一个什么
从数据到一个几何图形的映射的过程
具体来讲
我们可以套用这么一个模板
进行ggplot2的绘图
这模板是什么
首先调用这个ggplot的这个函数
确定一下
你通过哪个数据
来进行映射
要将哪些数据映射成几何图形
具体的要映射成何种几何图形
都是以什么
geom_为前缀的相应的函数进行绘制
当然这里面后面这个mapping
这个aes这个函数
就是设定了具体如何映射的过程
这两个函数是最基本的
这两个函数是最基本的
也是必须的
就在我们要
进行一个完整的ggplot2绘图的话
这是最基本的部分
也就说必须有数据
同时指定这个映射的方法
像后面一些比如说我们对坐标
进行变换
或者坐标进行操作
比如说我是选择直角坐标系
也就是说所谓的笛卡尔坐标
或者是极坐标
也都可以
后面是一些可选的操作
后面是一些可选的操作
这里面需要补充的什么
在每一次进行映射的过程中
它都有一个什么
都有一个统计变换
都有统计变换
当然你也可以把这个stat设成什么
stat = "identity"
也就表示不做统计变换也可以
就直接把原始数据映射成相应的几何图形
一般来讲
以geom_为前缀的
和以stat_为前缀的
这两组函数是成组出现的
成对出现的
在这个几何图形函数里面
它一般都会包含什么
包含相应的stat
在相应的这个统计变化里面也会包含相应的什么
geom_相应图形
这两组函数是可以相互替换使用
好 咱们看一下
回到我们刚才的这个直方图
看它是如何绘制的
首先也是调用什么
ggplot这个函数
指定了
我是通过
基于cjb这个数据进行绘图
具体如何映射
是将数学进行映射
对不对
将数学进行映射
映射成什么图形
首先映射成那个什么
一个直方图
映射成一个直方图
这个时候我们设了其中一个参数
比如这个breaks
也就是区间的端点
和我们前面那个hist的这个函数
返回的结果是完全一样的
因为我们利用了其中的结果
利用了其中返回的结果
同时将这个直方图每一根柱子
它的边的颜色
它的fill也就是填充色
都进行了设置
另外
除了绘制的这个直方图之外
我们还想什么
在每一根柱子上面
将落入这个区间的点的个数
进行一个显示
以这个text
以这么一种方式显示出来
具体显示值是什么
就是count
做了个统计变换就是count
就是做了个计数
最后我们还加了一个什么
坐标的一个处理
就是flip
相当于什么
相当于我将X和Y轴进行一个[翻转]
我们看看具体效果
假如我们加这个坐标变换的话
加这个坐标的一个X轴Y轴
坐标进行[翻转]的话
就是左侧这个图
不加的话是右侧这个图
也就看得比较清楚
我们绝大部分都分布在这个区间里面
有205个同学分布在这么一个区间
然后 相对比较偏高的分的有149个同学
也有少数同学在哪
就是相对取值比较少
它的那个数学得分比较低
当然我们看到这个直方图之后
我们一般都是什么
习惯性的在上面怎么
加一个概率密度曲线
包括我们用一些
通常的工具
比如说 excel
我们也会加这么一个概率密度曲线
那在R里面要实现这个概率密度曲线怎么加
我们首先得怎么样
首先得计算这个概率密度
首先得计算概率密度
计算概率密度有很多方法
比如说我们可以先假定它服从某个分布
然后进行参数估计
当然更多的用的是一个非参数的方法
我们这边介绍一个核密度估计的方法
我们来看看具体如何实现
我们所能观测到的是一些具体的离散的点
对不对
从直觉上讲就是某一个点
一旦我们观测到了
那这个点附近的概率密度应该相对都是什么
都是比较大的
离这个点越远的话
怎么样
它概率密度我们可能就越小一点
说明每一个点其实都会影响最终的什么
我们的概率密度
都会影响最终概率密度
其实最终概率密度是什么
其实就是我每一个点
核函数的什么一个取值的什么 叠加
这其实就是
核密度估计一个直观的认识
我们看一下
具体从数学上来讲
它是怎么实现的
其实我也是一个核函数
这个核函数代表什么
就是离我这个点越近的话
我的这个取值越大
离我的点取值越远
取值就越小
离我这个点的远近是什么
就是x-xi
就比如说我现在已经观测到了这么x1到xn
N个点
那好
那我对于每个点来讲
我都有这么一个核函数
我要计算它的贡献度的话
就这个核函数的什么
取值
对不对
然后所有的点都有贡献的话
我要怎么样
把它加起来
把它加起来
这是我们
一个核密度估计的一个最基本的方法
当然我们这个核函数也称之为窗口函数
它可以有不同的窗
比如有矩形窗 有三角窗 指数窗
用得比较多的是这个高斯窗
它的最后估计的概率密度曲线是相对比较平滑的
但核心意思都是一条
就是某个点附近
离这个点越近的话怎么样
概率密度取值越大
离得越越远的话
概率密度取值越小
这是一个直观的认识
好 我们看一下
在具体的R里面是怎么实现的
前面我们看分析这个概率密度
估计的过程相对还比较复杂
但是对于R来讲
最后实现的话就是一句话的事
在前面我们绘制了这个直方图的基础之上
我们增加一个什么
geom_density
增加这么一个函数就可以
就直接绘制了什么
直接绘制了我们的
概率密度曲线
这里面和前面直方图唯一不同的地方是什么
我在做这个统计变换的时候
(前边的直方图)用的是什么 这个count
count是计数
假如直接用计数的话
我的概率密度其实都非常小
那概率密度曲线就隐藏在最下面
像一条
几乎近似一条直线一样
那我们这个时候只能选择什么
只能选择在直方图的时候
把它映射为什么
相应的密度 ..density..
咱们看一下
具体的效果
这就是直方图再叠加什么
概率密度曲线
这么一个过程
也是反映我们整个这份数据的数学成绩
就是700多个同学的数学成绩的一个分布的情况
绘制完这个概率密度曲线之后
我们要很自然引入另外一个图形
也是用来表征我们的数据分布的形态的
是什么
就是小提琴图
我们看一下这个小提琴图
确实比较直观
比较形象
和这个名字是相一致的
什么呢
它确实像一把小提琴
但其实它的原理非常简单
我们从中间划一刀的话
你发现什么
它上半部分就是我们的概率密度曲线
所以它只是概率密度曲线做了一个对称
对称而已
以上就是我们讲的
关于茎叶图 直方图 概率密度图
以及概率密度图的什么 一个对称 小提琴图
它们都是用来表征
我们的单变量的一个数据分布形态的
几种手段
接下来的箱线图以及复合图形
我们在后续的课程里面继续讲解
本次课到此结束
谢谢大家
-第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章 作业