在入门篇(十五)中我们已经介绍过常用的简单聚合函数,后续几篇博文我们会逐一介绍其他功能更加强大的聚合函数。本文来介绍Hive中的方差、标准差函数。
返回类型 |
函数名 |
描述 |
DOUBLE |
variance(col), var_pop(col) |
返回组内某个数字列的方差 |
DOUBLE |
var_samp(col) |
返回组内某个数字列的无偏样本方差 |
DOUBLE |
stddev_pop(col) |
返回组内某个数字列的标准差 |
DOUBLE |
stddev_samp(col) |
返回组内某个数字列的无偏样本标准差 |
DOUBLE |
covar_pop(col1, col2) |
返回组内两个数字列的总体协方差 |
DOUBLE |
covar_samp(col1, col2) |
返回组内两个数字列的样本协方差 |
方差是各个数据与平均数之差的平方的和的平均数,而标准差是方差的算术平方根。
方差计算公式:
其中,x表示样本的平均数,n表示样本的数量,xi表示个体,而s^2就表示方差。
方差是和中心偏离的程度,用来衡量一批数据的波动大小(即这批数据偏离平均数的大小)并把它叫做这组数据的方差,记作s^2。 在样本容量相同的情况下,方差越大,说明数据的波动越大,越不稳定。
这两个概念都是统计学中的,因为传统统计学中一般数据量较小,30个以上的样本就是大数据了,所以分母是n还是n-1对结果影响较大。而在大数据时代,其实两者的结果基本是一样的了,不过在数据样本数小于30时仍然建议使用无偏样本方差。
无偏样本方差计算公式:
无偏样本标准差为s。
在概率论和统计学中,协方差用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即当两个变量是相同的情况。 两个随机变量X与Y之间的样本协方差Cov(X,Y)定义为:
总体协方差的分母则为n。
标准差和方差一般是用来描述一维数据的,但现实生活我们常常遇到含有多维数据的数据集,最简单的大家上学时免不了要统计多个学科的考试成绩。面对这样的数据集,我们当然可以按照每一维独立的计算其方差,但是通常我们还想了解更多,比如,一个男孩子的猥琐程度跟他受女孩子欢迎程度是否存在一些联系啊,协方差就是这样一种用来度量两个随机变量关系的统计量。
协方差的结果有什么意义呢?如果结果为正值,则说明两者是正相关的(从协方差可以引出“相关系数“的定义,我们下篇博客介绍),也就是说一个人越猥琐就越受女孩子欢迎, 而结果为负值就说明负相关的,越猥琐女孩子越讨厌。 如果为0,也是就是统计上说的“相互独立“,即男孩子的猥琐程度跟他受女孩子欢迎程度没有关系。
创建一个文件,随意输入两列数,然后新建一个临时表,将数据插入
[root@hadoop ~]# vim test.txt
1,1
1,2
1,3
2,4
2,5
2,6
3,7
3,8
3,9
hive
hive (app)> CREATE TABLE temp_test2 (
> num1 INT
> ,num2 INT
> ) row format delimited fields terminated BY ',';
OK
Time taken: 0.055 seconds
hive (app)> load data local inpath '/root/test.txt' into table temp_test2;
Loading data to table app.temp_test2
Table app.temp_test2 stats: [numFiles=1, totalSize=12]
OK
Time taken: 0.484 seconds
hive (app)> select * from temp_test2;
OK
temp_test2.num1 temp_test2.num2
1 1
1 2
1 3
2 4
2 5
2 6
3 7
3 8
3 9
Time taken: 0.081 seconds, Fetched: 3 row(s)
方差 var_pop(col)
无偏方差 var_samp(col)
方差
hive (app)> select num1,var_pop(num2) from temp_test2 group by num1;
1 0.6666666666666666
2 0.6666666666666666
3 0.6666666666666666
无偏方差
hive (app)> select num1,var_samp(num2) from temp_test2 group by num1;
1 1.0
2 1.0
3 1.0
总体协方差 covar_pop(col1, col2)
样本协方差 covar_samp(col1, col2)
总体协方差
hive (app)> select covar_pop(num1,num2) from temp_test2;
2.0
样本协方差
hive (app)> select covar_samp(num1,num2) from temp_test2;
2.25
能看到这里的同学,就右上角点个赞吧,3Q~