python多維數(shù)組分位數(shù)的求取方式
在python中計(jì)算一個(gè)多維數(shù)組的任意百分比分位數(shù),只需用np.percentile即可,十分方便
import numpy as np a = [154, 400, 1124, 82, 94, 108] print np.percentile(a,95) # gives the 95th percentile
補(bǔ)充拓展:如何解決hive同時(shí)計(jì)算多個(gè)分位數(shù)的問(wèn)題
眾所周知,原生hive沒(méi)有計(jì)算中位數(shù)的函數(shù)(有的平臺(tái)會(huì)有),只有計(jì)算分位數(shù)的函數(shù)percentile
在數(shù)據(jù)量不大的時(shí)候,速度尚可。但是數(shù)據(jù)量一上來(lái)之后,完全計(jì)算不出來(lái)。
那么如何解決這個(gè)問(wèn)題呢,我們可以使用 row_number() over()通過(guò)兩次排序來(lái)解決同時(shí)計(jì)算多個(gè)分位數(shù),速度飛快。
比如我們需要計(jì)算mkt_mcc_storeidx表下以mkt_label,mccgroup,month分組,value_mccgroup的分位數(shù)
第一步:利用row_number() over()給value_mccgroup在分組里排序,記錄下排名

第二步:計(jì)算mkt_label,mccgroup,month分組下的數(shù)據(jù)總數(shù)

第三步:join前兩步的結(jié)果,取rank=你需要計(jì)算的分位數(shù)位置,想計(jì)算多少個(gè)分位數(shù)就計(jì)算多少個(gè)

第四步:再排一次序,這次數(shù)據(jù)量就已經(jīng)少了很多了,畢竟每組里面只有幾個(gè)數(shù)據(jù),記錄排名

第五步:得到具體的分位數(shù)

第六步:行轉(zhuǎn)成列,所有分位數(shù)計(jì)算完畢

后來(lái)查看了下SQL代碼的執(zhí)行樹(shù),發(fā)現(xiàn)percentile利用了map來(lái)存數(shù)據(jù),怪不得這么耗內(nèi)存,其實(shí)時(shí)間久并不是算的時(shí)間久,是因?yàn)閮?nèi)存不夠了,系統(tǒng)一直在回收內(nèi)存

而rank over 僅僅就是個(gè)排序而已

以上這篇python多維數(shù)組分位數(shù)的求取方式就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python使用pygame模塊編寫(xiě)俄羅斯方塊游戲的代碼實(shí)例
這篇文章主要介紹了Python使用pygame模塊編寫(xiě)俄羅斯方塊游戲的代碼實(shí)例,最基本的方塊變換和行消除等功能都在代碼中一一體現(xiàn),需要的朋友可以參考下2015-12-12
Python對(duì)兩個(gè)有序列表進(jìn)行合并和排序的例子
這篇文章主要介紹了Python對(duì)兩個(gè)有序列表進(jìn)行合并和排序的例子,最終代碼經(jīng)過(guò)不斷優(yōu)化,小編非常滿意,需要的朋友可以參考下2014-06-06
Python datatime庫(kù)語(yǔ)法使用詳解
這篇文章主要介紹了Python datatime庫(kù)語(yǔ)法使用詳解,datetime模塊用于是date和time模塊的合集,文章圍繞相關(guān)資料展開(kāi)詳情,感興趣的小伙伴可以擦參考一下2022-07-07
python3檢查字典傳入函數(shù)鍵是否齊全的實(shí)例
這篇文章主要介紹了python3檢查字典傳入函數(shù)鍵是否齊全的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
python寫(xiě)入已存在的excel數(shù)據(jù)實(shí)例
下面小編就為大家分享一篇python寫(xiě)入已存在的excel數(shù)據(jù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05

