python 求均值_数据分析:寻找Python最优计算性能
1、場景描述
在數據統計分析過程中,求累計值(總和)是最常用的統計指標之一,市面上的各種流行數據庫均支持的查詢方式基本如下:
select sum(c) from table_name;
當數據量在小規模時,sum只是一瞬間的事情,讓你感覺電腦真牛逼啊,我掰手指頭要算半天的數,它居然可以這么快,下面是1萬多條數據的字段求和,只用了8ms。
但是當數據量不斷增長到一個量級時,比如說,先定個小目標:一億條訂單求總額,你可以嘗試在常規的數據庫上執行同樣的語句需要多長時間。
在我的電腦上執行這樣的查詢,大約需要10s。
或者更大的量級,十億、百億、萬億?你一秒鐘給我算出來,哈哈,電腦也算懵逼了。
采用分布式存儲、分布式計算,是目前解決大規模計算的通用方法,讓你吃100個饅頭,估計一禮拜也吃不完,做慈善,一人一個分給班里的同學,幾分鐘就沒了,吃不完的那個放學別走。
2、舉栗說明
今天我們不講分布式計算,先看看如何在單機上達到最優的計算性能。
以下的示例,用python語言模擬求1億條訂單金額的平均值。
大家注意:我國小學生以后的課程都有python了,在未來編程是個基本技能。
2.1 首先用傳統的For Loop方式
還是一億條數據跑分
結果:
看來也不快啊,花了十幾秒,python在沒有特定優化的前提下,比Java,Go語言慢了不少。
2.2 內置 sum 函數上場
不過我們知道python有內置的sum函數,是不是會快一點?讓我們來試試:
結果:
不到十秒,快了一點點,但還是不理想。
2.3 神兵numpy
聽說有個numpy庫,可以向量化(vectorization)執行各種運算,牽到臺上看看:
結果:
哎呀48毫秒,真心牛逼啊,足足快了幾百倍,比Go、Java都快,不信你可以自己寫個Go語言的版本對比一下。
2.3 沒完
聽說還有個叫numba的,看簡寫nb也很NB,要不把剛才的那些再跑一遍瞧瞧:
可以看出numba對For Loop的提升明顯,對內置sum和numpy向量化影響不大。
來個最終對比圖,一目了然(柱子越低性能越好):
3、結論:磨刀不誤砍柴工
現在有些數據庫為了滿足OLAP的需求,已經集成了向量化處理,通過測評,的確是顯著提高了數據分析統計的性能,限于篇幅,今天不在此展開了。
Python numpy庫主要提供:
ndarray,速度快且空間高效的多維array,可進行向量化算術操作和更高級推廣應用能力。
標準數學函數,可快速執行整個array上的數據操作,而不需要寫循環:
比如說arr = np.array([[1.,2.,3.],[4.,5.,6.]]),可以進行arr * arr,arr * 0.5,1/arr等運算,這些運算都是對array中的元素做相應的計算,即向量化的操作。
歡迎關注公眾號:數獵天下DataHunter
-數據分析展示就用 DataHunter-
數據可視化大屏展示工具-免費試用?www.datahunter.cn?channel=weibo總結
以上是生活随笔為你收集整理的python 求均值_数据分析:寻找Python最优计算性能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python冒泡排序_5种python方
- 下一篇: ae万能弹性表达式_AE脚本精品表达式合