通过查询计算 SQLiteDB 的下四分位数和上四分位数

Posted

技术标签:

【中文标题】通过查询计算 SQLiteDB 的下四分位数和上四分位数【英文标题】:Calculate lower and upper quartile of SQLiteDB via query 【发布时间】:2013-01-09 20:45:43 【问题描述】:

我想计算这些fiddle with my DB and the query中我称之为“差异”的值的上四分位数和下四分位数

如何使用 SQLite 做到这一点?

http://www.sqlite.org/contrib?orderby=date 上有一个扩展名 extension-functions.c,其中包含这些命令。

如果这足以解决我的问题?如何将它集成到我的 Windows-XAMPP 环境中?

【问题讨论】:

【参考方案1】:

我已经在您的查询中计算了上四分位数和下四分位数。

请检查这个小提琴:http://sqlfiddle.com/#!2/4f1a82/31/0

基本上逻辑是:

上四分位数 == 平均值(“最高数字”AND 平均值(“整个数据”)) 下四分位数 == 平均值(“最低数字”AND 平均值(“整个数据”))

因此添加的查询逻辑是:

((MIN(diff)+ AVG(diff)) / 2) AS lowerQuartile,
((MAX(diff)+ AVG(diff)) / 2) AS upperQuartile,

【讨论】:

嗨@Michael Meier,如果这有帮助,请告诉我。 你好,谢谢你的回答,但是第一个四分位数应该是21,中位数应该是30,第三个四分位数应该是70。我没有见过这种计算第一和第三的方法四分位数之前...你确定它是正确的吗? 不,这不会正确计算四分位数。见en.wikipedia.org/wiki/Quartile,一般来说四分位数与均值无关。【参考方案2】:

我发现了一个基于this blog post 的rather unpleasant approach - 基本上,使用 GROUP_CONCAT 按顺序列出所有值,并使用子字符串函数提取第 25 或第 75 个百分位数的值。

【讨论】:

【参考方案3】:

这里有 2 个计算上四分位数 (Q3) 的版本:

选项 1: 计算 Q3 位置并获得其间值的平均值。 http://sqlfiddle.com/#!3/29f19/5 来源:How to Calculate the Upper Quartile

选项 2(更准确): 计算 Q3 位置并对最近的位置赋予更多权重(插值)。这种方法与 MS Excel 中的QUARTILE.EXC 相同。 http://sqlfiddle.com/#!3/29f19/6

注意:如果您想实现使用 N-1 的 QUARTILE/QUARTILE.INC,您可以通过减小大小而不是增加大小来实现。 SELECT @Q3_POS = 0.75*(COUNT(*)-1.00) from [Table1]

来源:Why Excel has Multiple Quartile Functions and How to Replicate the Quartiles from R and Other Statistical Packages

更多测试:

http://sqlfiddle.com/#!3/ca246/1位置接近上限值(Q3位置:6.75) http://sqlfiddle.com/#!3/ef046b/1 居中位置 (7.5) http://sqlfiddle.com/#!3/e2a49/1位置接近下限值(8.25) http://sqlfiddle.com/#!3/5f48c/1 准确位置 (9)

【讨论】:

以上是关于通过查询计算 SQLiteDB 的下四分位数和上四分位数的主要内容,如果未能解决你的问题,请参考以下文章

js 算数组平均值最大值最小值偏差标准差中位数数组从小打大排序上四分位数下四分位数

箱型图

Python数据可视化 箱线图

四分位数计算方法

箱线图(boxplot)简介与举例

【R语言】--- 箱型图