使用方法
- 在数据集框里粘入你的样本,一行一个数,也可以直接粘 Excel 的一列、或用逗号 / 空格 / 分号 / 制表符分隔。示例是 12、15、18、20、22、25、28、30、33、35、38、40 共 12 个数。
- 在「百分位 p」填 0 到 100 之间的数,示例 90,表示「第 90 百分位」,也就是约 90% 的观测不超过的那个数值。
- 按「计算」,或在数据集框里按 Ctrl+Enter(Mac 用 Cmd+Enter);单行的 p 输入框则直接按裸 Enter。
- 看结果区四格:三种定义各自给一个数——最近秩法、线性插值、PERCENTILE.EXC——以及 IQR 与离群点判定。
- 下方说明行会写出 n、均值、Q1、Q2、Q3、IQR 和 Tukey 上下须,点「复制结果」复制的就是这一行。
这个百分位计算器能解决什么问题
第一类场景是报数口径对齐。「P95 响应时间 200 毫秒」这类 SLA 指标,不同监控系统用的分位数定义可能不同:同一份数据、同一个 p=95,最近秩法给 40.00、线性插值给 38.90,差了 1.10。本页把三种定义并排摆出来,就是在你拿去写报告之前先把口径摊开。
第二类场景是定位一个值在分布里的位置。已知某接口耗时 37 毫秒,想知道它在历史样本里算不算慢:把样本粘进来,看到第 90 百分位是 37.70,就知道 37 已经贴着头部 10% 的边缘。
第三类场景是排查离群值。Q1、Q3 与 IQR 出来后,Tukey 上下须一并给出,落在须外的数会被逐个点名,适合先筛一遍再决定是修正还是剔除。
第四类场景是核对别人的结果。Excel 里 =PERCENTILE.INC(区域,0.9) 与 =PERCENTILE.EXC(区域,0.9) 常常给出两个不同的数,很多人以为是自己写错了公式。本页两列都算,可以直接对着看。
这个百分位计算器不做的事也说清楚:它不做正态假设下的百分等级换算(那是「均值 + 标准差」的另一套口径),不做加权分位数,不做分组频数表的分位数,也不画图——要看分布形状请用图表类工具。
原理与规则说明
三种定义的差别全在「位置 h 怎么算」。设排序后的样本为 x₁ ≤ x₂ ≤ … ≤ xₙ,q = p/100。
最近秩法(NIST/SEMATECH 统计方法手册的定义):取 r = Math.ceil(q * n),答案就是 a[r-1]。它永远返回样本里真实存在的一个数,不做插值。示例 n=12、p=90 时 r = ceil(10.8) = 11,第 11 个数是 38。
线性插值法(R type 7、numpy.percentile 默认、Excel PERCENTILE.INC):位置 h = (n - 1) * q(0 基),在 a[floor(h)] 与 a[floor(h)+1] 之间按小数部分插值。为什么用 (n−1) 而不是 (n+1):(n−1) 让 q=0 与 q=1 恰好落在首、末两个元素上,端点封闭,这正是 INC 里 INC 的含义。示例 h = 11 × 0.90 = 9.9,在第 10 个数 35 与第 11 个数 38 之间取 0.9 处:35 + 0.9 × 3 = 37.70。
PERCENTILE.EXC:位置 h = (n + 1) * q(1 基)。用 (n+1) 是为了让中位数正好落在序列正中间,代价是两端取不到——它只在 1/(n+1) < q < n/(n+1) 时有定义。n=12 时这个开区间是 (7.69%, 92.31%),所以 p=5、95、98、99、100 时 EXC 一列显示「不适用」。这不是程序出错,是函数定义本身如此(Excel 在这些位置返回 #NUM!)。示例 p=90 时 h = 13 × 0.90 = 11.7,在第 11 个数 38 与第 12 个数 40 之间取 0.7 处:38 + 0.7 × 2 = 39.40。
还有一个容易被忽略的实现细节:排序必须写成 a.sort(function (m, n) { return m - n; })。Array.prototype.sort 不传比较函数时会把元素转成字符串按 UTF-16 码位排,[10, 2] 会被排成 [10, 2](因为 '1' < '2'),分位数立刻全错。这是本页唯一一处必须显式传参的调用。
遵循的来源分别是:最近秩定义出自 NIST/SEMATECH《e-Handbook of Statistical Methods》;INC 与 EXC 出自 Excel 的 PERCENTILE.INC / PERCENTILE.EXC 函数定义,INC 与 R 的 type 7 一致;IQR 与 1.5×IQR 的须长出自 John W. Tukey 1977 年《Exploratory Data Analysis》的箱线图;数值按 IEEE 754 双精度。
输入到输出的完整链条:文本按 [\s,,;;]+ 切分 → 丢掉空串 → Number() 转换 → 过滤掉 NaN 与非有限值 → 升序排序 → 三个函数各算一次 → 结果 toFixed(2);四分位一律走线性插值(INC)口径,避免同一页里出现两套 Q1。
最常见的误用是把百分位当成名次或得分。「第 90 百分位 = 38」说的是数值 38,不是「排第 90 名」,也不是「考了 90 分」;同一份数据里第 90 百分位可以是 38,也可以是 3.8,取决于量纲。第二个误用是混用定义:示例 p=90 下三法给 38.00、37.70、39.40,极差 1.70,报数时不写清用的是哪一个,对方复算必然对不上。
完整示例(数值仅作演示)
默认数据是 12、15、18、20、22、25、28、30、33、35、38、40(n = 12),p = 90。这 12 个数与下方对照表的全部行同源,p=90 落在展开后的第 18 行。
- 排序后序列:12, 15, 18, 20, 22, 25, 28, 30, 33, 35, 38, 40(本页自动排序,粘乱序也行);
- 均值 = 316 ÷ 12 = 26.3333;
- 最近秩法:r = ceil(0.90 × 12) = 11 → 第 11 个数 = 38.00;
- 线性插值(INC):h = 11 × 0.90 = 9.9 → 35 + 0.9 × (38 − 35) = 37.70;
- PERCENTILE.EXC:h = 13 × 0.90 = 11.7 → 38 + 0.7 × (40 − 38) = 39.40;
- 三法极差 = 39.40 − 37.70 = 1.70;
- 四分位(INC 口径):Q1 = 19.50、Q2 = 26.50、Q3 = 33.50,IQR = 14.00;
- Tukey 上下须:19.50 − 1.5 × 14 = −1.50、33.50 + 1.5 × 14 = 54.50,12 个数全部落在区间内,无离群点。
把 p 换成 50 再看一次:最近秩法给 25.00,线性插值和 EXC 都给 26.50——三法在中位数附近容易碰头,而在两端分歧最大,这正是「样本越少、定义差异越刺眼」的直观体现。
输入范围与对照表
数据集至少 2 个数、最多 20000 个;单个数值允许负数与小数,绝对值不超过 1e15。百分位 p 接受 0 到 100,步长 0.01。下面这张表用默认的 12 个数,把 p 从 5% 扫到 60%,用来观察三种定义的分歧随 p 怎么变。
| 项目 | 取值 | 说明 |
|---|---|---|
| 样本 n | 12 | 与表单默认值一致 |
| 扫描区间 | p:5% → 60% | 步长 5%,共 12 行 |
| 最近秩法 | 12.00 → 30.00 | 只在样本值上跳变,阶梯状 |
| 线性插值 | 13.65 → 29.20 | 连续变化 |
| EXC 有效区间 | (7.69%, 92.31%) | 区间外显示「不适用」 |
| 加载更多 | p:65% → 100% | 再补 10 行,共 22 行 |
点「加载更多」把表补到 22 行;点「导出对照表 CSV」下载带 BOM 的文件(Excel 双击打开中文不乱码);点「复制对照表 TSV」把整张表复制成制表符分隔文本,可直接粘进表格软件。
边界与精度说明
样本量小于 2 时拒收并提示「至少需要 2 个数」——n=1 时三个定义全部退化成那一个数,没有分位可言。n=2 时最近秩法在 p=50 给较小的那个数(示例 [10,20] 给 10.00),线性插值给 15.00,差 5.00;样本越小定义差异越大,这不是 bug。
p 超出 0 到 100 拒收;p 填非数字或留空拒收。数据集里混进文字时不会整体失败,而是跳过无法解析的片段并在说明行告诉你丢掉了几项;但如果丢掉的数量超过一半,本页会直接报错让你检查格式,避免你在不知情的情况下拿残缺样本算分位数。
EXC 越界时显示「不适用」而不是留空或写 0:留空会被误读成「算不出来」,写 0 会被误读成「答案是 0」,两者都比明确的「不适用」更危险。
精度方面所有结果保留 2 位小数。参与运算的是完整双精度值,只有显示层四舍五入;但 IEEE 754 的安全整数上限是 2^53 = 9007199254740992,超过它的整数不再能精确表示,长 ID 一类的数据请换算成相对量再粘进来。
还有一条与插值有关的边界:样本存在重复值时,线性插值可能返回一个「样本里不存在」的数(示例 37.70 就不在那 12 个数里),这是插值的正常结果;如果你要求结果必须落在真实观测上,就取最近秩法那一列。
常见问题
第 90 百分位和「考了 90 分」是一回事吗?
不是。百分位是一个数值,含义是「约 90% 的观测不超过它」。它可以是 38,也可以是 3.8,取决于你测的是什么;90 分是一个得分,两者没有换算关系。
三个结果该用哪一个?
看对标对象:与 Excel PERCENTILE.INC 或 Python numpy.percentile 对齐用「线性插值」;与 Excel PERCENTILE.EXC 对齐用第三列;规范要求「必须是真实观测值」时(例如某些 SLA 约定)用最近秩法。示例 p=90 下三者是 38.00、37.70、39.40。
为什么 PERCENTILE.EXC 有时显示「不适用」?
因为它的定义域是开区间 (1/(n+1), n/(n+1))。n=12 时即 (7.69%, 92.31%),所以 p=5、95、98、99、100 都不适用;Excel 在这些位置返回 #NUM!,本页显示「不适用」。
数据需要我先排序吗?
不用,本页会先排序再算,而且传的是数值比较函数而不是默认的字符串排序——默认排序会把 [10, 2] 排成 [10, 2],分位数会全错。
只有两个数能算吗?
能,但要留意分歧。[10, 20] 在 p=50 时最近秩法给 10.00、线性插值给 15.00,差 5.00。样本越小定义差异越大,报数时越要注明用的是哪一列。
IQR 和那个 1.5 倍系数是哪来的?
IQR = Q3 − Q1;1.5×IQR 的须长出自 Tukey 1977 年《Exploratory Data Analysis》的箱线图约定。示例 Q1=19.50、Q3=33.50、IQR=14.00,须为 −1.50 与 54.50,全部观测落在须内。
数据里混了文字或多余空格会怎样?
无法解析的片段会被跳过,说明行告诉你丢了几项;丢掉超过一半会直接报错让你检查格式。纯空格与空行不算数据,多个分隔符连在一起也只算一个。
粘进去的数据会被上传吗?
不会。解析、排序、三个分位数函数全在页面内存里完成,不发任何网络请求;开发者工具的 Network 面板里除页面自身资源外不会出现新请求,刷新后输入即清空。
相关工具
百分位计算器只解决「一组数的分位数」这一件事,数的来源与结果的呈现各有专门页面。
- 文本统计工具——先摸清文本里的数字与符号规模,再决定要不要抽样算分位。
- 词频统计工具——按出现次数排序后取头部比例,是分位思路在文本上的另一种用法。
- 统计字符出现次数——粘进来的数据若混了异常字符,先在这里定位。
- 文章可读性检测——可读性分数同样要按分位解释,绝对值之间不可比。
- FleschKincaid计算器——先算出可读性分数,再用本页看它落在样本的第几百分位。
- 随机数字1转1000生成器——批量造样本,用来反复验证三种分位数定义的差异。
- 饼图图表生成——把分好段的数据画成占比图,比只报一个分位数更直观。
- 计算器:查看全部计算器。