Python 中,利用 Pandas.describe() 可以很方便的观测某一列的数量、最小值、均值、最大值、分位数等。

pd.series.describe(percentiles=[0.05,0.25,0.3,0.7,0.8])

具体可参考文章:Python学习笔记:描述性统计describe

有时候,数据存放在数据库,例如:Hive 中,并不方便导出来利用 Python 进行统计分析。

遂诞生一个想法:自己写一个类似统计的脚本。

说开干即开干!

一、分布函数

-- 查看分布
select count(1) as data_cnt,
       avg(col_name) as avg_value,
       stddev(col_name) as stddev_value, -- 标准差
       min(col_name) as min_value,
       percentile_approx(col_name, 0.1) as data_1,
       percentile_approx(col_name, 0.2) as data_2,
       percentile_approx(col_name, 0.3) as data_3,
       percentile_approx(col_name, 0.4) as data_4,
       percentile_approx(col_name, 0.5) as data_5,
       percentile_approx(col_name, 0.6) as data_6,
       percentile_approx(col_name, 0.7) as data_7,
       percentile_approx(col_name, 0.8) as data_8,
       percentile_approx(col_name, 0.9) as data_9,
       percentile_approx(col_name, 0.91) as data_91,
       percentile_approx(col_name, 0.92) as data_92,
       percentile_approx(col_name, 0.93) as data_93,
       percentile_approx(col_name, 0.94) as data_94,
       percentile_approx(col_name, 0.95) as data_95,
       percentile_approx(col_name, 0.96) as data_96,
       percentile_approx(col_name, 0.97) as data_97,
       percentile_approx(col_name, 0.98) as data_98,
       percentile_approx(col_name, 0.99) as data_99,
       max(col_name) as max_value
from table_name;

二、分位数计算

Hive 中可以利用 percentilepercentile_approx 两个函数计算分位数。

1.percentile

percentile(col, p) 只支持整型(int),p 的取值为 0-1,若为0.5,即中位数。

2.percentile_approx

percentile_approx(col, p) 支持多种数据类型,包括浮点数。

percentile_approx 还有一种形式 percentile_approx(col, p, B),参数B控制内存消耗的近似精度,B越大,结果的精度越高。

默认值为10000。当 col 字段中的 distinct 值的个数小于B时,结果就为准确的百分位数。

当需要统计多个分位数时,可以传入一个数组的参数,例如:array(p1, p2, p3) 即可。

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

其输出结果为数组的形式,需要进一步处理。

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

三、优化后的方法

-- 查看分布
select explode(percentile_approx(cast(col as double), array(0.05, 0.5, 0.95), 9999)) as percentile
from table_name;

参考链接:【Hive】计算分位数

参考链接:hive计算分位数

原文地址:http://www.cnblogs.com/hider/p/16907592.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性