python 分位数 位置_Python解释数学系列——分位数Quantile
1. 分位数计算案例与Python代码
案例1
Ex1: Given a data = [6, 47, 49, 15, 42, 41, 7, 39, 43, 40, 36],求Q1, Q2, Q3, IQR
Solving:
步骤:
1. 排序,从小到大排列data,data = [6, 7, 15, 36, 39, 40, 41, 42, 43, 47, 49]
2. 计算分位数的位置
3. 给出分位数
分位数计算法一
pos = (n+1)*p,n为数据的总个数,p为0-1之间的值
Q1的pos = (11 + 1)*0.25 = 3 (p=0.25) Q1=15
Q2的pos = (11 + 1)*0.5 = 6 (p=0.5) Q2=40
Q3的pos = (11 + 1)*0.75 = 9 (p=0.75) Q3=43
IQR = Q3 - Q1 = 28
import math
def quantile_p(data, p):
pos = (len(data) + 1)*p
#pos = 1 + (len(data)-1)*p
pos_integer = int(math.modf(pos)[1])
pos_decimal = pos - pos_integer
Q = data[pos_integer - 1] + (data[pos_integer] - data[pos_integer - 1])*pos_decimal
return Q
data = [6, 7, 15, 36, 39, 40, 41, 42, 43, 47, 49]
Q1 = quantile_p(data, 0.25)
print("Q1:", Q1)
Q2 = quantile_p(data, 0.5)
print("Q2:", Q2)
Q3 = quantile_p(data, 0.75)
print("Q3:", Q3)
分位数计算法二
pos = 1+ (n-1)*p,n为数据的总个数,p为0-1之间的值
Q1的pos = 1 + (11 - 1)*0.25 = 3.5 (p=0.25) Q1=25.5
Q2的pos = 1 + (11 - 1)*0.5 = 6 (p=0.5) Q2=40
Q3的pos = 1 + (11 - 1)*0.75 = 8.5 (p=0.75) Q3=42.5
import math
def quantile_p(data, p):
pos = 1 + (len(data)-1)*p
pos_integer = int(math.modf(pos)[1])
pos_decimal = pos - pos_integer
Q = data[pos_integer - 1] + (data[pos_integer] - data[pos_integer - 1])*pos_decimal
return Q
data = [6, 7, 15, 36, 39, 40, 41, 42, 43, 47, 49]
Q1 = quantile_p(data, 0.25)
print("Q1:", Q1)
Q2 = quantile_p(data, 0.5)
print("Q2:", Q2)
Q3 = quantile_p(data, 0.75)
print("Q3:", Q3)
案例2
给定数据集 data = [7, 15, 36, 39, 40, 41],求Q1,Q2,Q3
分位数计算法一
import math
def quantile_p(data, p):
data.sort()
pos = (len(data) + 1)*p
pos_integer = int(math.modf(pos)[1])
pos_decimal = pos - pos_integer
Q = data[pos_integer - 1] + (data[pos_integer] - data[pos_integer - 1])*pos_decimal
return Q
data = [7, 15, 36, 39, 40, 41]
Q1 = quantile_p(data, 0.25)
print("Q1:", Q1)
Q2 = quantile_p(data, 0.5)
print("Q2:", Q2)
Q3 = quantile_p(data, 0.75)
print("Q3:", Q3)
计算结果:
Q1 = 7 +(15-7)×(1.75 - 1)= 13
Q2 = 36 +(39-36)×(3.5 - 3)= 37.5
Q3 = 40 +(41-40)×(5.25 - 5)= 40.25
分位数计算法二
结果:
Q1: 20.25
Q2: 37.5
Q3: 39.75
2. 分位数解释
四分位数
概念:把给定的乱序数值由小到大排列并分成四等份,处于三个分割点位置的数值就是四分位数。
第1四分位数 (Q1),又称“较小四分位数”,等于该样本中所有数值由小到大排列后第25%的数字。
第2四分位数 (Q2),又称“中位数”,等于该样本中所有数值由小到大排列后第50%的数字。
第3四分位数 (Q3),又称“较大四分位数”,等于该样本中所有数值由小到大排列后第75%的数字。
四分位距(InterQuartile Range, IQR)= 第3四分位数与第1四分位数的差距
确定p分位数位置的两种方法
position = (n+1)*p
position = 1 + (n-1)*p
3. 分位数在pandas中的解释
在python中计算分位数位置的方案采用position=1+(n-1)*p
案例1
import pandas as pd
import numpy as np
df = pd.DataFrame(np.array([[1, 1], [2, 10], [3, 100], [4, 100]]), columns=['a', 'b'])
print("数据原始格式:")
print(df)
print("计算p=0.1时,a列和b列的分位数")
print(df.quantile(.1))
程序计算结果:
序号
a
b0
1
1
1
2
10
2
3
100
3
4
100
计算p=0.1时,a列和b列的分位数
a 1.3
b 3.7
Name: 0.1, dtype: float64
手算计算结果:
计算a列
pos = 1 + (4 - 1)*0.1 = 1.3
fraction = 0.3
ret = 1 + (2 - 1) * 0.3 = 1.3
计算b列
pos = 1.3
ret = 1 + (10 - 1)* 0.3 = 3.7
案例二
利用pandas库计算data = [6, 47, 49, 15, 42, 41, 7, 39, 43, 40, 36]的分位数。
import pandas as pd
import numpy as np
dt = pd.Series(np.array([6, 47, 49, 15, 42, 41, 7, 39, 43, 40, 36])
print("数据格式:")
print(dt)
print('Q1:', df.quantile(.25))
print('Q2:', df.quantile(.5))
print('Q3:', df.quantile(.75))
计算结果
Q1: 25.5
Q2: 40.0
Q3: 42.5
4. 概括总结
自定义分位数python代码程序
import math
def quantile_p(data, p, method=1):
data.sort()
if method == 2:
pos = 1 + (len(data)-1)*p
else:
pos = (len(data) + 1)*p
pos_integer = int(math.modf(pos)[1])
pos_decimal = pos - pos_integer
Q = data[pos_integer - 1] + (data[pos_integer] - data[pos_integer - 1])*pos_decimal
Q1 = quantile_p(data, 0.25)
Q2 = quantile_p(data, 0.5)
Q3 = quantile_p(data, 0.75)
IQR = Q3 - Q1
return Q1, Q2, Q3, IQR
pandas中的分位数程序
直接调用.quantile(p)方法,就可以计算出分位数,采用method=2方法。
参考文献:
内容来源于网络如有侵权请私信删除
python 分位数 位置_Python解释数学系列——分位数Quantile相关推荐
- python四分位数_Python解释数学系列——分位数Quantile
1. 分位数计算案例与Python代码 案例1 Ex1: Given a data = [6, 47, 49, 15, 42, 41, 7, 39, 43, 40, 36],求Q1, Q2, Q3, ...
- python分位数函数,Python解释数学系列——分位数Quantile
跳转到我的博客 1. 分位数计算案例与Python代码 案例1 Ex1: Given a data = [6, 47, 49, 15, 42, 41, 7, 39, 43, 40, 36],求Q1, ...
- python图例位置_Python | 图例位置
python图例位置 Legends are one of the key components of data visualization and plotting. Matplotlib can ...
- python函数调用位置_Python: 浅谈函数局部变量快在哪
前言 这两天在 CodeReview 时,看到这样的代码 # 伪代码 import somelib class A(object): def load_project(self): self.proj ...
- python 梯度下降_Python解释的闭合形式和梯度下降回归
python 梯度下降 机器学习 , 编程 (Machine learning, Programming) 介绍 (Introduction) Regression is a kind of supe ...
- python r转义_Python快速入门系列之二:还学不会我直播跪搓衣板
Python作为一个,目前最火的编程语言之一,已经渗透到了各行各业.它易学好懂,拥有着丰富的库,功能齐全.人生苦短,就用Python. 这个快速入门系列分为六篇,包含了Python大部分基础知识,每篇 ...
- python 进度条_Python小程序系列——动态进度条(1)
Python动态进度条I 开始我们的第一个Python程序. 显示一个动态进度条,在同一个位置显示从1%到100% 源代码附上来: import sys #有关Python运行环境的变量和函数impo ...
- 如何查看python解释器位置_Python:查看解释器的位置
以前学Python时,有时出现这样的情况:明明记得装了scipy包,怎么打import scipy报错说我没这个包? 问题出在,你的电脑上安装了不止一个Python... 而每安装一个包,仅仅在这个P ...
- python函数调用位置_python函数定义,调用,传参,位置参数及关键字参数,返回值
使用函数是真正开始编程的第一步,函数y=f(x)我们并不陌生,对x进行一顿操作得到一个值y.给不同的x,进行相同的操作,得到相应的y值. 程序层面函数是执行特定任务的一段代码,将一段代码定义成函数并为 ...
最新文章
- 执行力的问题--系统的无奈
- OpenCV相机使用的实例(附完整代码)
- 属实逼真,决策树可视化!
- IDEA将Maven项目中src源代码下的xml配置文件编译进classes
- HTML与CSS基础之否定伪类(四)
- 《金色梦乡》金句摘抄(一)
- ajax preview,In jQuery, using ajaxSend to preview the url built
- Docker 禁止被列入美国“实体名单”的国家、企业、个人使用
- 当U盘内的文件夹都成了1KB的快捷方式的解决方法
- 《乐高EV3机器人搭建与编程》——2.1 零件储存箱
- 一些lightbox插件(弹出层)
- 《计算机网络 PDF》炸了!!!
- cmdn(聪明的女人)
- 基于ARM嵌入式系统的PC/104总线设计
- 多重序列比对 CLUSTALX
- 常见的浏览器兼容问题和解决方法
- 360与腾讯弹窗大战 数亿网民被迫围观
- 互联网产品经理的职责
- google的RateLimiter限流器的使用
- 【软考软件评测师】2019综合知识历年真题
热门文章
- 【毕业设计】jSP在线教学质量评价系统的设计与实现(源代码+论文)
- matlab图像水印技术研究,动态图像数字水印matlab的实现开题报告.doc
- 二叉树和等于某值路径_Go刷LeetCode系列:二叉树(3)二叉树路径和
- mysql 8 多线程_mysql8 参考手册--通用线程状态
- Python+OpenCV:图像修复(Image Inpainting)
- QList (链表) QVector (数组)
- 大端模式、小端模式、网络字节顺序与主机字节顺序
- 利用filebeat推送mysql慢查询日志
- Dos命令将合并两个文本文件的内容
- 【Cocos2d-X开发学习笔记】第05期:渲染框架之布景层类(CCLayer)的使用