愿君学长松,慎勿作桃李。这篇文章主要讲述Google BigQuery APPROX_QUANTILES并获得真正的四分位数相关的知识,希望能为你提供帮助。
根据docs:
返回一组表达式值的近似边界,其中number表示要创建的分位数的数量。此函数返回一个数字+ 1元素的数组,其中第一个元素是近似最小值,最后一个元素是近似最大值。听起来如果我想要真正的四分位数,我需要使用将返回
APPROX_QUANTILES(values, 4)
的[minvalue, 1st quartile, 2nd quartile, 3rd quartile, maxvalue]
根据https://en.wikipedia.org/wiki/Quartile,四分位数集包含3个数据点 - 其中没有一个是数据的最小值/最大值。
我的假设是否正确?
APPROX_QUANTILES(values, 4)
会回归真正的四分位数吗?答案作为基线,这是没有任何修改的输出,使用1到100之间的数字输入:
SELECT APPROX_QUANTILES(x, 4) AS output
FROM UNNEST(GENERATE_ARRAY(1, 100)) AS x;
+----------------------------+
|output|
+----------------------------+
| ["1","25","50","75","100"] |
+----------------------------+
输出包括最小值(1)和最大值(100)。如果您只想要四分位数,则需要将它们从数组中剥离。出于可读性/可组合性的考虑,最好使用临时SQL UDF来完成此操作。这里我使用
INT64
作为元素类型,但你可以有不同的元素类型,或者:CREATE TEMP FUNCTION StripFirstLast(arr ARRAY<
INT64>
) AS (
ARRAY(SELECT x FROM UNNEST(arr) AS x WITH OFFSET
WHERE OFFSET BETWEEN 1 AND ARRAY_LENGTH(arr) - 2)
);
SELECT
APPROX_QUANTILES(x, 4) AS output,
StripFirstLast(APPROX_QUANTILES(x, 4)) AS quartiles
FROM UNNEST(GENERATE_ARRAY(1, 100)) AS x;
+----------------------------+------------------+
|output|quartiles|
+----------------------------+------------------+
| ["1","25","50","75","100"] | ["25","50","75"] |
+----------------------------+------------------+
【Google BigQuery APPROX_QUANTILES并获得真正的四分位数】您可以看到
quartiles
数组仅包含所需的值。推荐阅读
- Android / Java,如何在某些字段中使用换行和逗号来处理csv文件()
- Swift didReceiveRemoteNotification - 无论app用户位于何处,都可以导航到rootviewcontroller(现在有错误信息)
- 如果用户在由本机生成的应用程序上隐藏了较低的硬件导航栏,则Android屏幕不适合
- Android Studio错误的含义(未注释的参数会覆盖@NonNull参数)
- ApplicationDataCompositeValue的大小
- AppFabric安装失败MSI错误代码(1603 |文件已存在)
- 由于Windows 8中的视频卡错误,无法启动Android Emulator和Genymotion。
- Xcode 10(代码签名我的App + Framework失败,因为签署第三方依赖框架(PromiseKit)失败。适用于Xcode 9)
- 我对Sapper / Svelte有一些疑问