当我们选好了dataset后,我们通常要先进行Summarize Data(怎么翻译呢,总计数据?)这一工作,这是为了从总体上了解数据的变量的类型,大致分布,相关性等。下面我们就以最简单的数据集Iris为例,做一套「Summarize Data」。
首先抓取Iris数据wget http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data
。然后,将其用R读入数据框iris <- read.table("~/baiduyun/resources/uci-data/iris.data", header=T, sep=",", fill=TRUE)
iris数据框形如
Image Title
统计总体
先用dim(iris)
查看iris的维度,得到iris有150
行,5
列。
再用str(iris)
查看iris各字段的类型,可以看到,四个属性变量都是数值型num,类遍历是字符型chr。
接下来我们希望看到数值型变量的大致分布。比如最小最大值,分位数,以便对该变量范围及分布有大致了解。这里使用summary(iris)
就可以轻松统计出每个数值型变量的six number,分别是最小值
,第一四分位数
,中位数
,均值
,第三四分位数
,最大值
。从中位数和均值的差异可以粗略地感知该变量值的分布是否大致对称。从结果中,我们可以看到petal.length
分布似乎不太对称。
除了数值型变量的统计,我们肯定还希望统计出类别型变量中各类所占比例。这里可以用table(iris$class)
统计出该变量每个类的实例数。结果显示3种类别的花各有50个记录。
检验正太性
很多时候,建模的前提是假设数值型变量或其残差满足正太分布。在R中,对于小样本数据,可以使用shapiro.test
来验证某变量分布的正态性。当统计量W接近1,p值 < 0.1时,便可不拒绝该变量满足正太分布的假设。从下图的数据可以看出对这4个变量,我们都可以作出其满足正太分布的假设。值得一提的是,谢益辉在他的博文《统计分布的检验》中提到『根据数据检验总体的分布在我看来几乎没有什么用处』。我觉得他给出的理由很有道理。大家可以去看看。
检验相关性
R中可以使用cor(x, use= , method= )
来计算x的变量两两之间的相关系数,method参数可以指定相关系数的类型,选取默认的method=pearson
可以计算数值型变量之间的线性相关程度,这正好满足iris属性变量的类型。从下图的结果可以看出sepal.length和sepal.width相关性偏弱,且是负相关;而petal.length和petal.width相关性极强,且是正相关。
统计学上,在计算出一个统计量后,总会对其进行统计显著性检验。这里可以使用R中的cor.test
来一次检验两个变量相关关系。一般以P < 0.05 为显著, P<0.01 为非常显著。如下图结果可以得到sepal.length和sepal.width的相关系数并不显著不为0,而petal.length和petal.width的相关系数显著不为0,且非常显著。
小结
以上就是对最简单的数据进行最简单的Summarize Data的介绍了。这个过程看上去很简单,可实际上我们肯定会遇到各种各样的问题,比如变量太多怎么办?比如如何计算有序类别型变量的相关性?比如数据的质量对某些步骤结果会不会影响很大呢?那么是不是要先处理缺失异常值呢?用这些标准数据集去体会处理过程,找真实数据去体会问题是个不错的选择。
网友评论