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()相关推荐

  1. 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小时的记录. 我使用以下查询相同, ...

  2. ajax在项目中怎么使用,我如何添加项目在sql中使用jQuery(ajax)通过web服务

    我有一个web服务,并在其中有两种方法(select,insertdata).我想用jquery在sql中插入一条记录.我怎样才能做到这一点?我已经制作了该代码,但它不起作用.请帮助我.我如何添加项目 ...

  3. 在mysql表中如何变换列和行_在SQL中转换列和行的简单方法?

    有几种方法可以转换这些数据.在你最初的帖子中,你说PIVOT对于这个场景来说似乎太复杂了,但是可以很容易地使用UNPIVOT和PIVOTSQL Server中的函数. 但是,如果您无法访问这些函数,则 ...

  4. ORACLE EBS中消息队列fnd_msg_pub、fnd_message在PL/SQL中的应用

    EBS 中集成的FND_MSG处理很方便的在form中很方便的弹窗.提示消息之外,在写PL/SQL包的时候,也可以方便的进行借用来进行错误信息的收集.并且这个是基于session的,不同于客户化的lo ...

  5. oracle 偶数与奇数,在PL / SQL中计算数字中的奇数和偶数

    我们给定一个正整数数字,任务是使用PL / SQL计算数字中奇数和偶数的计数. PL / SQL是SQL与编程语言的过程功能的组合.它是由Oracle Corporation在90年代初开发的,目的是 ...

  6. SQL中合并多行记录的方法总汇

    SQL中合并多行记录的方法总汇 --前几天还在抱怨:sql只有sum(数值),不能sum(字符串) --如果不是分组统计,用select @values = @values + ',' + value ...

  7. sql中截取字符串函数_SQL Server 2017中的顶级SQL字符串函数

    sql中截取字符串函数 SQL Server 2017 has been in the talk for its many features that simplify a developer's l ...

  8. 第一章 SQL中使用的符号

    文章目录 第一章 SQL中使用的符号 符号表 第一章 SQL中使用的符号 SQL中用作运算符等的字符表 符号表 每个符号的名称后跟其ASCII十进制代码值. 符号 名称和用法 [space] or [ ...

  9. 详解SQL中Groupings Sets 语句的功能和底层实现逻辑

    前言 SQL 中  Group By  语句大家都很熟悉, 根据指定的规则对数据进行分组 ,常常和 聚合函数 一起使用. 比如,考虑有表  dealer ,表中数据如下: 如果执行 SQL 语句  S ...

  10. 简化SQL式计算之行间计算

    在数据库应用开发中,我们经常需要面对复杂的SQL式计算,行间计算就是其中一种,比如用每月的销售额除以上月的销售额,求比上期,或用每月销售额除以去年同月的销售额,求同期比.有些数据库没有提供SQL200 ...

最新文章

  1. JAVA基础 (二)反射 深入解析反射机制
  2. c 语言三种正规循环,C语言复习题库
  3. 插件、页面-在csdn写markdown,基于chrome插件-by小雨
  4. python3入门教程-python3入门教程之基本数据类型(一)
  5. 初学Java Web(9)——学生管理系统(简易版)总结
  6. Coursera公开课笔记: 斯坦福大学机器学习第二课“单变量线性回归(Linear regression with one variable)”
  7. 做运营,打杂不可怕,可怕的是你 3 年后还在打杂!
  8. pytorch学习笔记 1. pytorch基础 tensor运算
  9. C#中使用NPIO实现导入导出Excel简单操作
  10. memset 和 memcpy 和 memcmp (strncmp遇到\0会中断)
  11. CondenseNet: An Efficient DenseNet using Learned Group Convolutions
  12. OWASP 创始人:关注首要问题,开源库也可以放心使用
  13. MySQL查询优化:查询慢原因和解决技巧
  14. html的table的子节点,HTMLTableElement子节点并不如预期
  15. 国家计算机二级c语言考试试题,国家计算机二级c语言考试试题题库
  16. MBA-day12 逻辑学-关系判断
  17. 安装服务器系统教程20180615
  18. 椭圆抛物面matlab程序,椭圆抛物面画法.pdf
  19. python web py入门-1-web.py简介和安装
  20. 苹果IOS的ANCS服务

热门文章

  1. OpenBionics机械手项目介绍|BCIduino社区整理
  2. php职业发展路径是什么意思,如何找准职业发展路径
  3. vue 获取公网IP和地理位置
  4. spider mysql_MySQL中间件Spider引擎初探
  5. 京东智能客服言犀启发式问答技术揭秘
  6. 基于JSP的保险业务管理系统【数据库设计、源码、开题报告】
  7. pH敏感型白蛋白纳米粒-壳聚糖白蛋白pH敏感型水凝胶-瑞禧
  8. new115.com dz.html,网页HTML特殊字符编码对照表
  9. JAVA统一社会信用代码正则,用户登录名正则
  10. 第20讲:Mybatis 中 XML 文件是如何解析的?