一、什麼是分位數
分位數(Quantile)是一個更具體的概率分布的特殊點。分位數將我們的數據集、數值或概率分布分成若干份,每一份都包含了統計意義上的相同比例的數據。
比如,第25分位數(第一四分位數,Q1)就是將數據或概率分布分成4份,每一份都包含了整個數據或概率分布中25%的數據。
hive的percentile()函數能夠方便地計算分位數。
SELECT percentile(age, 0.25) FROM user;
以上的函數將查詢user表中年齡的第一四分位數。
二、如何使用hive percentile
hive percentile()函數常用的語法如下:
percentile(expr, pct)
expr是要處理的欄位名或者是表達式,pct是0到1之間的百分比。
對於一個expr序列,pct指定一個值,該值在expr序列中有比它小的值的比例為pct。
三、hive percentile的計算方式
hive percentile的計算公式如下:
percentile(expr, pct) ├── 如果expr全為NULL,則返回NULL ├── 否則,所有expr值都將載入到內存中 ├── 如果pct小於0或大於1,則返回NULL ├── 如果只有一個expr值,返回該值 ├── 對於pct小於1的,排除NULL後,將expr值升序排列 ├── 對於pct為1,排除NULL後,將expr值降序排列 ├── 計算rank=floor(pct*(count-1)) └── 對於pct小於1的,返回排在排好序的結果中第rank個不是NULL的值。對於pct為1,返回排好序的結果中倒數第rank個不是NULL的值
四、hive percentile的示例
示例1:計算乘客年齡分位數
計算Titanic數據集中乘客年齡的中位數、四分位數和十分位數:
-- CREATE TABLE passengers(age INT, name STRING); -- Load data: LOAD DATA LOCAL INPATH '/path/to/titanic.csv' INTO TABLE passengers; -- 查看中位數 SELECT percentile(age, 0.5) FROM passengers; -- 查看四分位數 SELECT percentile(age, 0.25), percentile(age, 0.5), percentile(age, 0.75) FROM passengers; -- 查看十分位數 SELECT percentile(age, 0.1) AS P10, percentile(age, 0.2) AS P20, percentile(age, 0.3) AS P30, percentile(age, 0.4) AS P40, percentile(age, 0.5) AS P50, percentile(age, 0.6) AS P60, percentile(age, 0.7) AS P70, percentile(age, 0.8) AS P80, percentile(age, 0.9) AS P90 FROM passengers;
示例2:計算 sales 表的 95th百分位數 (即P95)
在 sales 表的 amount 欄位中查找第95個百分數值的數值,即P95:
SELECT percentile(amount, 0.95) as P95 FROM sales;
示例3:計算sales表中欄位price的75th百分位數 (即P75)
計算sales表中欄位price的75th百分位數 (即P75)
SELECT percentile(price, 0.75) as P75 FROM sales;
五、總結
hive percentile函數可以非常方便地計算分位數,只需要指定想得到的分位數比例,就可以得到對應的數值。
在數據分析、數據可視化等領域,分位數是一個非常重要的指標。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/244891.html