pandas中计算分位数的方法describe,quantile,以及sql中计算分位数的方法percentile_approx,percent_rank() over()
1.pandas中计算分位数的方法describe,quantile
准备一张表
def test():df = pd.DataFrame({'a':[1,2,3],'b':[4,5,6],'c':['d','e','f']})print(df)
表结构如下:
(1)p分位数原理和计算过程
例:a =[20,10,30],求这组数的四分之一,二分之一,四分之三分位数,即p=0.25,p=0.5,p=0.75的情况
1.从小到大排序[10,20,30],长度n = len(a) = 3
2.使用公式求分位数位置,即分位点:pos = 1 + (n-1)*p
pos(0.25) = 1 + (3-1)*0.25 = 1.5 向下取整结果为pos(0.25)_low = 1,分位点小数部分0.5
pos(0.5) = 1+(3-1)*0.5 = 2 向下取整结果为pos(0.5)_low = 2,分位点小数部分0
pos(0.75) = 1 + (3-1)*0.75 = 2.5 向下取整结果为pos(0.75)_low = 2,分位点小数部分0.5
需要注意的是分位点的小数部分,影响着最终分位数的结果
3.求分位数
排序后,a[0] = 10,a[1]=20,a[2] = 30
四分之一:a[pos(0.25)_low -1] + (a[pos(0.25)_low]-a[pos(0.25)_low -1]) * (pos(0.25)-pos(0.25)_low) = a[0] + (a[1]-a[0])*(1.5-1) = 15
二分之一:a[pos(0.5)_low -1] + (a[pos(0.5)_low]-a[pos(0.5)_low -1]) * (pos(0.5)-pos(0.5)_low) = a[1] + (a[2]-a[1])*(2-2) = 20
四分之三:a[pos(0.75)_low -1] + (a[pos(0.75)_low]-a[pos(0.75)_low -1]) * (pos(0.75)-pos(0.75)_low) = a[1] + (a[2]-a[1])*(2.5-2) = 25
p分位数可以用于分组,即将任意个数的数据从小到大进行分组,使得每一组的包含的数据的个数都近似相等,等频分箱
(2)describe
def test():df = pd.DataFrame({'a':[1,2,3],'b':[4,5,6],'c':['d','e','f']})print(df.describe(include='all'))# 需要注意的是,要加上'all',否则,只会分析a,b数字列# 也可以分析单列print(df['a'].describe())# 也可指定分位数print(df.describe(percentiles=[0.6]))
结果如下:
含义如下,
count:某一列中非空数据的个数
unique:非数字型的值去重后的个数
top:出现最多次数的痱数字型的值–由上图可知,如果一些值出现次数相同,只会取其中一个作为top
freq:出现最多次数的痱数字型的值出现的次数
mean:平均值
std:标准差
min:最小值
25%:四分之一分位数
50%:二分之一分位数
75%:四分之三分位数
max:最大值
(3)quantile
def test():df = pd.DataFrame({'a':[1,2,3],'b':[4,5,6],'c':['d','e','f']})print(df['a'].quantile(0.25))
结果为1.5
需要注意的是,如果分为点为两个数之间,比如说这个例子,分位点为1 + (3-1)*0.25 = 1.5,即第一个数a[0]和第二个数a[1]之间,如下图,有5中不同的设置分位点的方式,不同的方式,导致分位点的小数部分不同,因为计算分位数时需要用到分位点小数部分,导致最终分位数也会不同
def test():df = pd.DataFrame({'a':[1,2,3],'b':[4,5,6],'c':['d','e','f']})print(df['a'].quantile(0.25,interpolation='linear')) #使用公式1+(n-1)*p得出分位点1.5,分位数为1+(2-1)*0.5=1.5print(df['a'].quantile(0.25,interpolation='lower')) #使用公式1+(n-1)*p得出结果1.5,取1为分位点,即第一个数a[0],分位数为1+(2-1)*0=1print(df['a'].quantile(0.25,interpolation='higher')) #使用公式1+(n-1)*p得出结果1.5,取2为分位点,即第二个数a[1],分位数为2+(3-2)*0=2print(df['a'].quantile(0.25,interpolation='nearest')) #使用公式1+(n-1)*p得出结果1.5,靠近1,则取1为分位点,靠近2,取2为分位点,1.5在中间,算是靠近1print(df['a'].quantile(0.25,interpolation='midpoint')) #使用公式1+(n-1)*p得出结果1.5,取左右平均值,即(1+2)/2作为分位点,这里恰巧和公式得出的结果一样
结果为:
2.sql中percentile_approx,percent_rank() over()
(1)percentile_approx
%spark.sqlselect percentile_approx(order_payment_amt, array(0.25, 0.5, 0.75), 100) # 默认精度为10000,这里设置为100,精度越小,消耗资源越少,array数组中即为百分位数from alg.alg_test_jr_tag_19;
结果为:
(2)percent_rank() over(partiton by…order by…)
judge_customer as (select order_phone_num,rfm_score,--PARTITION BY :分组子句,表示分析函数的计算范围,不同的组互不相干; ORDER BY: 排序子句,表示分组后,组内的排序方式;--不需要partition by,因为整个表就相当对于一组round(percent_rank() over (order by rfm_score), 2) as percent_cus --结果为每行的百分比,范围[0,1]from put_score),```
pandas中计算分位数的方法describe,quantile,以及sql中计算分位数的方法percentile_approx,percent_rank() over()相关推荐
- oracle中删除一天记录吗,删除oracle SQL中超过24小时的记录(delete records older than 24 hours in oracle SQL)...
删除oracle SQL中超过24小时的记录(delete records older than 24 hours in oracle SQL) 我想删除所有超过24小时的记录. 我使用以下查询相同, ...
- ajax在项目中怎么使用,我如何添加项目在sql中使用jQuery(ajax)通过web服务
我有一个web服务,并在其中有两种方法(select,insertdata).我想用jquery在sql中插入一条记录.我怎样才能做到这一点?我已经制作了该代码,但它不起作用.请帮助我.我如何添加项目 ...
- 在mysql表中如何变换列和行_在SQL中转换列和行的简单方法?
有几种方法可以转换这些数据.在你最初的帖子中,你说PIVOT对于这个场景来说似乎太复杂了,但是可以很容易地使用UNPIVOT和PIVOTSQL Server中的函数. 但是,如果您无法访问这些函数,则 ...
- ORACLE EBS中消息队列fnd_msg_pub、fnd_message在PL/SQL中的应用
EBS 中集成的FND_MSG处理很方便的在form中很方便的弹窗.提示消息之外,在写PL/SQL包的时候,也可以方便的进行借用来进行错误信息的收集.并且这个是基于session的,不同于客户化的lo ...
- oracle 偶数与奇数,在PL / SQL中计算数字中的奇数和偶数
我们给定一个正整数数字,任务是使用PL / SQL计算数字中奇数和偶数的计数. PL / SQL是SQL与编程语言的过程功能的组合.它是由Oracle Corporation在90年代初开发的,目的是 ...
- SQL中合并多行记录的方法总汇
SQL中合并多行记录的方法总汇 --前几天还在抱怨:sql只有sum(数值),不能sum(字符串) --如果不是分组统计,用select @values = @values + ',' + value ...
- sql中截取字符串函数_SQL Server 2017中的顶级SQL字符串函数
sql中截取字符串函数 SQL Server 2017 has been in the talk for its many features that simplify a developer's l ...
- 第一章 SQL中使用的符号
文章目录 第一章 SQL中使用的符号 符号表 第一章 SQL中使用的符号 SQL中用作运算符等的字符表 符号表 每个符号的名称后跟其ASCII十进制代码值. 符号 名称和用法 [space] or [ ...
- 详解SQL中Groupings Sets 语句的功能和底层实现逻辑
前言 SQL 中 Group By 语句大家都很熟悉, 根据指定的规则对数据进行分组 ,常常和 聚合函数 一起使用. 比如,考虑有表 dealer ,表中数据如下: 如果执行 SQL 语句 S ...
- 简化SQL式计算之行间计算
在数据库应用开发中,我们经常需要面对复杂的SQL式计算,行间计算就是其中一种,比如用每月的销售额除以上月的销售额,求比上期,或用每月销售额除以去年同月的销售额,求同期比.有些数据库没有提供SQL200 ...
最新文章
- JAVA基础 (二)反射 深入解析反射机制
- c 语言三种正规循环,C语言复习题库
- 插件、页面-在csdn写markdown,基于chrome插件-by小雨
- python3入门教程-python3入门教程之基本数据类型(一)
- 初学Java Web(9)——学生管理系统(简易版)总结
- Coursera公开课笔记: 斯坦福大学机器学习第二课“单变量线性回归(Linear regression with one variable)”
- 做运营,打杂不可怕,可怕的是你 3 年后还在打杂!
- pytorch学习笔记 1. pytorch基础 tensor运算
- C#中使用NPIO实现导入导出Excel简单操作
- memset 和 memcpy 和 memcmp (strncmp遇到\0会中断)
- CondenseNet: An Efficient DenseNet using Learned Group Convolutions
- OWASP 创始人:关注首要问题,开源库也可以放心使用
- MySQL查询优化:查询慢原因和解决技巧
- html的table的子节点,HTMLTableElement子节点并不如预期
- 国家计算机二级c语言考试试题,国家计算机二级c语言考试试题题库
- MBA-day12 逻辑学-关系判断
- 安装服务器系统教程20180615
- 椭圆抛物面matlab程序,椭圆抛物面画法.pdf
- python web py入门-1-web.py简介和安装
- 苹果IOS的ANCS服务
热门文章
- OpenBionics机械手项目介绍|BCIduino社区整理
- php职业发展路径是什么意思,如何找准职业发展路径
- vue 获取公网IP和地理位置
- spider mysql_MySQL中间件Spider引擎初探
- 京东智能客服言犀启发式问答技术揭秘
- 基于JSP的保险业务管理系统【数据库设计、源码、开题报告】
- pH敏感型白蛋白纳米粒-壳聚糖白蛋白pH敏感型水凝胶-瑞禧
- new115.com dz.html,网页HTML特殊字符编码对照表
- JAVA统一社会信用代码正则,用户登录名正则
- 第20讲:Mybatis 中 XML 文件是如何解析的?