在 BigQuery 中计算百分位数

Posted

技术标签:

【中文标题】在 BigQuery 中计算百分位数【英文标题】:Computing Percentiles In BigQuery 【发布时间】:2017-10-12 09:17:20 【问题描述】:

我正在使用 BigQuery,我需要计算数据集列的第 25、50 和 75 个百分位数。

例如,我如何使用 BigQuery 和 STANDARD SQL 获得上述数字。我查看了 PERCENT_RANK、RANK 和 NTILE 函数,但似乎无法破解它。

这里有一些可以指导我的代码

感谢您的帮助!

【问题讨论】:

当您说“这里有一些可以指导我的代码”时,您的意思是要包含一些示例代码吗? 【参考方案1】:

查看标准 SQL 中的 APPROX_QUANTILES 函数。如果您要求 100 个分位数 - 您会得到百分位数。因此查询将如下所示:

SELECT percentiles[offset(25)], percentiles[offset(50)], percentiles[offset(75)]
FROM (SELECT APPROX_QUANTILES(column, 100) percentiles FROM Table)

【讨论】:

有没有办法得到准确的百分位数?看起来 APPROX_QUANTILES 的聚合是近似的……【参考方案2】:

如果近似聚合对您不起作用,您可能想要使用 PERCENTILE_CONT 函数(尽管它会使用更多内存,因此它可能不适用于大数据),例如以下示例来自here

SELECT
  PERCENTILE_CONT(x, 0) OVER() AS min,
  PERCENTILE_CONT(x, 0.01) OVER() AS percentile1,
  PERCENTILE_CONT(x, 0.5) OVER() AS median,
  PERCENTILE_CONT(x, 0.9) OVER() AS percentile90,
  PERCENTILE_CONT(x, 1) OVER() AS max
FROM UNNEST([0, 3, NULL, 1, 2]) AS x LIMIT 1;

+-----+-------------+--------+--------------+-----+
| min | percentile1 | median | percentile90 | max |
+-----+-------------+--------+--------------+-----+
| 0   | 0.03        | 1.5    | 2.7          | 3   |
+-----+-------------+--------+--------------+-----+

【讨论】:

【参考方案3】:

您可以使用以下代码获得细粒度的百分位分析。

  SELECT
  offset + 1 AS percentile,
  value AS percentile_value,
  FROM UNNEST(( 
    SELECT 
      APPROX_QUANTILES(value, 100) as percentile_value,
    FROM data_set
  )) AS percentile_value  WITH OFFSET as offset

然后你可以根据需要得到任何百分位数。

【讨论】:

以上是关于在 BigQuery 中计算百分位数的主要内容,如果未能解决你的问题,请参考以下文章

python使用pandas中的groupby函数和agg函数计算每个分组数据的两个分位数(例如百分之10分位数和百分之90分位数)

Pandas .. 分位数函数是不是需要排序数据来计算百分位数?

JavaScript中的分位数/百分点/百分位数/逆累积分布函数

如何在 JavaScript(或 PHP)中获取数组的中位数和四分位数/百分位数?

R语言分位数计算Percentiles

如何计算基于组的分位数?