导读
楼主本人统计学专业在读,这几年也完成了不少数据分析的报告,故而想整理一点写数据类报告的tips。本文先整理了对一份数据进行描述性分析的流程。包括变量说明和利用平均数、方差、偏度峰度等基本统计量进行解读的思路。
一般来说一份数据报告要包含研究目的、描述性分析、特征工程、建模分析、模型检验、模型对比的过程,最后需要加上最重要的结论和建议。其中数据处理的第一步就是描述性分析。
有人说不知道描述性分析该描述什么,好像没什么可写。我的理解是,对读者而言,描述性分析其实就是在最开始给读者呈现对数据的初步观察,让其产生对数据的初印象,而建立模型的过程等于深挖这份数据集的特点;对个人而言,我们可以通过描述性分析发现特征的特点,从而对特征进行一些变换和处理,接下来再根据发现的数据特点以及研究目标去选用合适的模型。描述性分析的过程不该太长,以免喧宾夺主,应该指出重点的发现,并且尽量简单直白。接下来将对描述性分析的流程进行梳理,代码部分利用R语言实现
数据集包含哪些内容?拿到一份数据首先要解决的就是这个问题。通常我们见到的csv格式的数据,都是以数据框形式存在,每一列都是代表一项特征,所以不妨先拿出头几行数据进行观察。这次用的例子是来自狗熊会(公众号:CluBear)的数据集,是二手市场上在售的1289条的汽车的10项指标数据,数据是前几年的,自变量包括汽车描述,排量,性能,级别,车门,车座,马力,发动机和前制动类型等10个变量,那么我们关心的变量是什么呢?这就是数据报告的目的性,本次设定因变量为汽车的价格,探究汽车价格的关键影响指标。下面可以先展示一下数据集的前几行。
描述 | 价格 | 排量 | 性能 | 级别 | 车门 | 车座 | 马力 | 发动机 | 前制动类型 |
---|---|---|---|---|---|---|---|---|---|
奥迪Q3 2017款 30 TFSI 时尚型 | 20.6 | 1.4 | 自动 | 紧凑型 | 5 | 5 | 88 | L4 | 通风盘式 |
川汽野马F10 2011款 1.5L 手动 | 2.1 | 1.5 | 手动 | 小型 | 5 | 5 | 88 | L4 | 盘式 |
丰田汉兰达 2015款 2.0T 四驱豪华版 7座 | 27.8 | 2 | 自动 | 中型 | 5 | 7 | 220 | L4 | 通风盘式 |
奥迪Q5 2013款 40 TFSI 进取型 | 27.88 | 2 | 自动 | 中型 | 5 | 5 | 211 | L4 | 通风盘式 |
这样一份关于市场上汽车特征的数据集,对于不了解汽车的人来说,每个数值代表的含义就不够明确,比如价格20万元是高还是低呢?级别又代表什么含义?紧凑型比小型大还是小?前制动类型没听说过,什么意思等等。所以为了解释数据,我们需要对这些变量(或特征)进行一个说明。
变量说明表一般包含变量名、变量说明和取值范围这几个关键因素,变量名称很多时候数据集会以英文命名,所以就需要一个简要说明,对于数值型变量,可以介绍单位;对于类别变量,列出类别数。那么取值范围里面就可以把类别大致写一下,比如级别为大型的汽车就没有出现在前面展示的数据里,所以有必要在取值范围中出现。整理好后就可以看出前制动类型不止有通风盘式还有盘式,级别不仅有紧凑型还有大型。
下面视情况可以再添加一些备注,备注可以对比较难以理解的变量进行解释,比如级别指的含义其实就是空间大小,或者是展示简单统计信息,如各类型样本的占比等。
变量类型 | 变量名 | 详细说明 | 取值范围 | 备注 |
---|---|---|---|---|
因变量 | 在售价格 | 单位:万元 | 1.3~280.0 | |
自变量 | 描述 | 汽车品牌与年份及关键字 | 文字信息 | |
排量 | 单位:升 | 1.3~6.2 | ||
性能 | 定性变量,2个水平 | 手动,自动 | 手动约占28%,自动72% | |
级别 | 定性变量,5个水平 | 小型,紧凑型,中型,中大型,大型 | 左边按照从小到大排序 | |
车门 | 整数变量 | 2,3,4,5 | 存在部分数据偏差 | |
车座 | 整数变量 | 4,5,7,8 | ||
马力 | 连续变量 | 85~575 | ||
发动机 | 定性变量,7个水平 | L3,L4,V5,L6,V8,H4,L5 | 代表不同的气缸排列方式 | |
前制动类型 | 定性变量,2个水平 | 盘式,通风盘式 | 制动方式,通风盘式造价较高 |
还是以汽车价格数据为例,目前我们的因变量是价格,所以首选价格分析。对单变量进行统计量描述的时候可以用常见的统计量来做初步观察,统计量的主要意义在于整合数据,并且呈现出数据告诉我们的关键信息。
平均数即为样本观测值的总和平均。xi为我们的观察值,n为样本量,则有
x ˉ = ∑ i = 1 n x i n \bar x=\frac{\sum_{i=1}^n x_i}{n} xˉ=n∑i=1nxi
如汽车价格的平均数为17.3万元
中位数是对数据中心位置的度量。将所有数据按照升序排列,位于中间的数值。
(a)观测数为奇数时,中位数是位于中间的那个数值;
(b)观测数为偶数时,中位数是位于中间两个数的平均值。
百分位数(percentile): 第p百分位数满足条件的一-个数值,至少有p%的观测值小于或等于该值,且至少有(100 - p)%的观测值大于或等于该值。常用到的四分位数即:第25,50,75百分位数。
如汽车价格的中位数为11.4万元
R中求平均值、中位数、分位数的函数为mean(x),median(x),和quantiel(x,p)
在描述统计的过程中,没有任何一个数字是孤零零地呈现的。我们需要对数字进行一个对比和解释,比如说分组取平均值,这对于类别变量就较为有效
tapply函数常用对于因子型进行分组计算,按照index分组,对x进行fun的计算, tapply(X, INDEX, FUN )
#按照级别对价格求均值
tapply(suv_data$价格,suv_data$级别,mean)
- 大型 紧凑型 小型 中大型 中型
NA 102.50000 10.84507 6.47700 52.46496 20.53357
从上面的分组价格可以看出不同大小的汽车平均价格相差很大,这就给我们提供了一个信息,即这个特征是个区分度高的“好”特征,在建模过程应该持续关注。
中位数和平均数其实都是耳熟能详的统计量,但是主要的区别在于平均数是一个受异常值影响大的统计量,而中位数则比较稳健。比如说一个公司有1个人是100万元,剩下99个人都是1000元,中位数是1000,但是平均工资就会超过1万元。显然这个平均值没有意义,因为它没有做到呈现关键信息的作用。这时候中位数和众数其实都是相对好的统计量。
有时候视情况还可以补充一些最大值和最小值之类的数据,就像老师重点关注优生和差生一样,因为他们在集体里具有一定的代表性,某种意义上代表了老师教学成果的上下限。下面简单呈现一些对汽车数据的部分统计结果。
summary用于一键计算所有特征的统计量,对数值型计刚才提到的所有统计量,类别变量统计频数,还有很多这类统计函数,下次再整理一下
summary(suv_data)
价格 排量 性能 级别 车门 车座 马力
Min. : 1.30 Min. :1.300 手动:359 - : 4 -: 4 Min. :4.000 Min. : 85.0
1st Qu.: 7.60 1st Qu.:1.600 自动:930 大型 : 4 2: 8 1st Qu.:5.000 1st Qu.:144.0
Median : 11.50 Median :2.000 紧凑型:669 3: 1 Median :5.000 Median :163.0
Mean : 17.52 Mean :2.099 小型 :160 4: 5 Mean :5.219 Mean :180.2
3rd Qu.: 20.00 3rd Qu.:2.400 中大型:133 5:1271 3rd Qu.:5.000 3rd Qu.:201.0
Max. :280.00 Max. :6.200 中型 :319 Max. :8.000 Max. :575.0
NA's :4 NA's :4
结果给出最大值和最小值之后,可i以重新去数据集里定位它的具体信息。比如汽车数据的价格最高值来自奔驰G级AMG 2016款 AMG G63 Edition 463,为280万元,但是!同样我们需要思考数字的含义,280万是多高呢?很高?还是只是比一般的高一点呢?
这时我们可以想到中位数和平均数,上面的问题就有了答案,中位数为11.5万元,均值则为17.5万元,说明280万确实是比一般的车贵太多了!这样正常吗?像这样的高价汽车有多少呢?如果我们假设一百万算高价,那么高于100万元的SUV汽车在数据集里总共也只12款,占总体的不到1%,所以说市场上的百万级汽车的数量还是较少,这些汽车价格并非异常,市面上是存在这样的需求的。
接下来有一些统计量可以描述数据的变化
方差:变异程度的度量,每条数据和平均值的差的平方和,公式如下
s 2 = ∑ i = 1 n ( x i − x ˉ ) 2 n s^2=\frac{\sum_{i=1}^n (x_i-\bar x)^2}{n} s2=n∑i=1n(xi−xˉ)2
而标准差 s s s即为上式开根号
极差(range): 最大值减去最小值。优点,容易计算;缺点,比平均数还容易受异常值影响。
r a n g e = x ( n ) − x ( 1 ) range=x_{(n)} -x_{(1)} range=x(n)−x(1)
四分位数间距(inter quartile range):
I Q R = Q 3 − Q 1 IQR=Q3-Q1 IQR=Q3−Q1
即第3四分位数-第1四分位数。所以IQR就是中间的50%的数据的极差。这个统计量不常见到,但是提供了一种度量变异的新想法,可以尝试与极差进行比较
融合了平均数和标准差,值越大说明变异程度越强。 σ \sigma σ为标准差, μ \mu μ为平均值,则样本的变异系数为
c o e f o f v a r i a n c e = s x ˉ × 100 % coef\ of\ variance=\frac{s}{\bar x}\times100\% coef of variance=xˉs×100%
数据的分布形态主要指数据分布是否对称,偏斜程度如何,分布陡峭程度等。所以大多时候需要结合统计图来观察。
偏度(Skewness) :描述变量取值分布形态对称性的统计量。其计算公式为:
β s = m 3 m 2 3 2 = 1 n ∑ i = 1 n ( x i − x ˉ ) 3 ( 1 n ∑ i = 1 n ( x i − x ˉ ) 2 ) 3 2 \beta_s=\frac{m_3}{m_2^{\frac{3}{2}}}=\frac{\frac{1}{n}\sum_{i=1}^n (x_i-\bar x)^3}{(\frac{1}{n}\sum_{i=1}^n (x_i-\bar x)^2)^\frac{3}{2}} βs=m223m3=(n1∑i=1n(xi−xˉ)2)23n1∑i=1n(xi−xˉ)3
当分布为对称分布时,正负总偏差相等,偏度值等于0;当分布为不对称分布时,偏度值大于0或小于0。偏度绝对值越大,表示数据分布形态的偏斜程度越大。
峰度(Kurtosis) :描述变量 取值分布形态陡峭程度的统计量。样本峰度计算公式为:
β k = m 4 m 2 2 = 1 n ∑ i = 1 n ( x i − x ˉ ) 4 ( 1 n ∑ i = 1 n ( x i − x ˉ ) 2 ) 2 \beta_k=\frac{m_4}{m_2^2}=\frac{\frac{1}{n}\sum_{i=1}^n (x_i-\bar x)^4}{(\frac{1}{n}\sum_{i=1}^n (x_i-\bar x)^2)^2} βk=m22m4=(n1∑i=1n(xi−xˉ)2)2n1∑i=1n(xi−xˉ)4
timeDate包里有kurtosis和skewness,psych包里的describe也可以计算
library(timeDate)
kurtosis(suv_data$价格)
[1] 43.57262
attr(,"method")
[1] "excess"
skewness(suv_data$价格)
[1] 4.727704
attr(,"method")
[1] "moment"
从上面可以看到偏度值是47,远大于0,故而明显右偏,而峰度值则略大于3,即为比正态分布稍微平缓一点。
在这里我们结合价格的频数直方图可以更清晰一点。这张图上可以看出右偏指的其实就是峰值靠左边,尾巴在右边。大部分的价格整体集中在0-20万元分段,但是有一小部分汽车价格特别高,这时候这些高价车就会让所有车的平均价格被拉高了,和刚才提到的工资例子一样,这也很明显地服从二八分布的法则。
简单说下二八法则,价格类的数据常常服从一种经济定律,80/20法则,也叫帕累托法则,这是20世纪初意大利统计学家、经济学家维尔弗雷多·帕累托提出的,他指出:在任何特定群体中,重要的因子通常只占少数,而不重要的因子则占多数,因此只要能控制具有重要性的少数因子即能控制全局。这个原理经过多年的演化,已变成当今管理学界所熟知的二八法则——即80%的公司利润来自20%的重要客户,其余20%的利润则来自80%的普通客户。
这类法则在解释价格分布时有很重要的作用,在研究价格数据这类经济金融相关的数据时,我们可以补充这些相关知识来充实解读,数字永远只是数字,背后的含义才是需要深挖的事情。总的来说,价格的中位数为11.4万元,而均值则为17.3万元,平均值高于中位数,呈现右偏分布。价格明显地服从二八分布,即80%的价格分布在23.5万内,在最大价格的20%以内,故而是少数高价的SUV汽车样本拉高了样本的平均价格。以上就是对于价格单变量的描述分析。关于统计图和多变量之间的描述分析下次继续整理。