在进行数据分析之前,我们往往要首先对数据有一个大致的了解。对于统计性的数据,最好首先看看数据是如何分布,并把分布图示化,可以帮助我们确定后续的分析策略。现在,以R中著名的iris数据为例来计算其中一组数据的分布情况。
Min. 1st Qu.
Median
Mean 3rd Qu.
Max.
4.300
5.100
5.800
5.843
6.400
7.900
32
57
49
12
> data(iris)
> names(iris)
[1] "Sepal.Length" "Sepal.Width"
"Petal.Length" "Petal.Width"
[5] "Species"
> length(iris$Sepal.Length)
[1] 150
1. 最简单的办法:hist
hist可以很直接的看到各组数据的Frequency或者Density分布情况,计算Frequency或者Density依据参数而定,比较粗糙。
![[转载]在R中统计数据的频数或者密度分布并图形化 [转载]在R中统计数据的频数或者密度分布并图形化](https://i-blog.csdnimg.cn/blog_migrate/39d130dc2ffad29d873473732acf9bee.jpeg)
2. 可选的办法:density
查看density的帮助文档,可以发现函数density计算的是数据的核心密度(kernal density)分布,大多数时候该函数并非我们想要的。但是有些时候,density可以帮助我们计算数据的密度分布,计算结果是
continuous的,图形化的结果也是continuous的曲线。density的计算可以通过bw参数(bandwidth)来控制,bw参数最直观的影响就是曲线的平滑性。默认的bw是通过函数bw.nrd0()计算得出,也可以手动设置。
> plot(density(iris$Sepal.Length))
![[转载]在R中统计数据的频数或者密度分布并图形化 [转载]在R中统计数据的频数或者密度分布并图形化](https://i-blog.csdnimg.cn/blog_migrate/d5ee7e74375b90567381daf9a889716a.jpeg)
#改变bw参数来改变density的结果
> plot(density(iris$Sepal.Length,bw=0.2))
![[转载]在R中统计数据的频数或者密度分布并图形化 [转载]在R中统计数据的频数或者密度分布并图形化](https://i-blog.csdnimg.cn/blog_migrate/bf81a5b2d5d4e0395a53c5bd60ca96c3.jpeg)
3. 计算频度分布并用barplot作图
我经常用的办法,比较繁琐一些,但是感觉图形化的结果也更美观。首先用cut和table计算数据的频数分布,在用barplot作图。table函数计算的是每个数据在数据集中出现的次数,但是无法计算数据区间内的数据频数分布,需要用cut辅助。
> summary(iris$Sepal.Length)#看数据的分布区间
> m<-seq(4,8,by=1)#设置一个区间范围
> table(cut(iris$Sepal.Length,m))#计算各个区间的频数
(4,5] (5,6] (6,7] (7,8]
>
barplot(table(cut(iris$Sepal.Length,m)))#作图
>barplot(table(cut(iris$Sepal.Length,seq(4,8,by=0.1))))#更详细的频数分布
![[转载]在R中统计数据的频数或者密度分布并图形化 [转载]在R中统计数据的频数或者密度分布并图形化](https://i-blog.csdnimg.cn/blog_migrate/565829daf09b91313278c0fd156f83b6.jpeg)
转自:http://blog.sina.com.cn/s/blog_7b41b6910102v3s5.html