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ù)的問題
眾所周知,原生hive沒有計(jì)算中位數(shù)的函數(shù)(有的平臺會有),只有計(jì)算分位數(shù)的函數(shù)percentile
在數(shù)據(jù)量不大的時(shí)候,速度尚可。但是數(shù)據(jù)量一上來之后,完全計(jì)算不出來。
那么如何解決這個(gè)問題呢,我們可以使用 row_number() over()通過兩次排序來解決同時(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ì)算完畢

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

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

以上這篇python多維數(shù)組分位數(shù)的求取方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python爬蟲實(shí)現(xiàn)爬取同一個(gè)網(wǎng)站的多頁數(shù)據(jù)的實(shí)例講解
在本篇文章里小編給大家整理了一篇關(guān)于python爬蟲實(shí)現(xiàn)爬取同一個(gè)網(wǎng)站的多頁數(shù)據(jù)的實(shí)例內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。2021-01-01
在Python中操作列表之List.append()方法的使用
這篇文章主要介紹了在Python中操作列表之List.append()方法的使用,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-05-05
pyqt QPlainTextEdit 中捕獲回車的示例代碼
在PyQt的QPlainTextEdit控件中,可以通過重寫keyPressEvent()函數(shù)來捕獲鍵盤事件,這篇文章主要介紹了pyqt QPlainTextEdit 中捕獲回車,需要的朋友可以參考下2024-03-03
python網(wǎng)絡(luò)編程示例(客戶端與服務(wù)端)
這篇文章主要介紹了python網(wǎng)絡(luò)編程示例,提供了客戶端與服務(wù)端,需要的朋友可以參考下2014-04-04
在Windows中定時(shí)執(zhí)行Python腳本的詳細(xì)教程
在Windows系統(tǒng)中,定時(shí)執(zhí)行Python腳本是一個(gè)常見需求,特別是在需要自動化數(shù)據(jù)處理、監(jiān)控任務(wù)或周期性維護(hù)等場景中,本文將結(jié)合實(shí)際案例,詳細(xì)介紹如何在Windows中通過任務(wù)計(jì)劃程序(Task Scheduler)來實(shí)現(xiàn)定時(shí)執(zhí)行Python腳本的功能,需要的朋友可以參考下2024-08-08
如何通過Python3和ssl實(shí)現(xiàn)加密通信功能
這篇文章主要介紹了如何通過Python3和ssl實(shí)現(xiàn)加密通信功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
Python中數(shù)字(Number)數(shù)據(jù)類型常用操作
本文主要介紹了Python中數(shù)字(Number)數(shù)據(jù)類型常用操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02

