分位数-hive,sas,r,python求法

为了方便,总结如下:


hive

percentile函数和percentile_approx函数,其使用方式为percentile(col, p)、percentile_approx(col, p),p∈(0,1)

其中percentile要求输入的字段必须是int类型的,而percentile_approx则是数值类似型的都可以
其实percentile_approx还有一个参数B:percentile_approx(col, p,B),参数B控制内存消耗的近似精度,B越大,结果的准确度越高。默认为10,000。当col字段中的distinct值的个数小于B时,结果为准确的百分位数。
如果我要求多个分位数怎么办呢?,可以把p换为array(p1,p2,p3…
),即

percentile_approx(col,array(0.05,0.5,0.95),9999)

如果不放心的话,就给col再加个转换:

percentile_approx(cast(col as double),array(0.05,0.5,0.95),9999)

其输出结果长这样:

[0.0,4001.0,4061.0]

没法直接用啊!再加个转换:

explode(percentile_approx(cast(col as double),array(0.05,0.5,0.95),9999))as percentile

输出结果就长这样了:

percentile
0
4001
4061

例如:

扫描二维码关注公众号,回复: 2230119 查看本文章
select apply_date,
avg(period) as mena,
percentile(period,0.25) as p25,
percentile(period,0.5) as p50,
percentile(period,0.75) as p75
from vdm_fin.cc_loan_object
group by apply_date;

R

mean()
apply( mat, 1, mean) ##apply可以对于矩阵做统计。1代表列,2代表行
median()
quantile( ,probs=seq(0,1,0.25)) ##分位数


sas

proc univariate data=cc_rate;
var rate;
by apply_date;
output out=cc_rate_percent pctlpts=0.25,0.5,0.95 pctlpre=p25 p50 p75;
run;

python

猜你喜欢

转载自blog.csdn.net/changzoe/article/details/80815480
SAS