文档介绍:数据分析师待遇数据分析:谋求Python最优计算性能
1、场景描述
在数据记录分析过程中,求合计值(总和)是最常用的记录指标之一,市面上的多种流行数据库均支持的查询措施基本如下:
select sum(c) from数据分析师待遇数据分析:谋求Python最优计算性能
1、场景描述
在数据记录分析过程中,求合计值(总和)是最常用的记录指标之一,市面上的多种流行数据库均支持的查询措施基本如下:
select sum(c) from table_name;
当数据量在小规模时,sum只是一瞬间的事情,让你感觉电脑真牛逼啊,我掰手指头要算半天的数,它居然可以这样快,下面是1万多条数据的字段求和,只用了8ms。
但是当数据量不断增长到一种量级时,例如说,先定个小目的:一亿条订单求总额,你可以尝试在常规的数据库上实行同样的语句需要多长时间。
在我的电脑上实行这样的查询,大概需要10s。
或更大的量级,十亿、百亿、万亿?你一秒钟给我算出来,哈哈,电脑也算懵逼了。
采用分布式寄存、分布式计算,是目前解决大规模计算的通用措施,让你吃100个馒头,估计一礼拜也吃不完,做慈善,一人一种分给班里的同窗,几分钟就没了,吃不完的那个放学别走。
2、举栗阐明
今天我们不讲分布式计算,先看看如何在单机上达到最优的计算性能。
如下的示例,用python语言模拟求1亿条订单金额的平均值。
人们注意:中国小学生后来的课程所有有python了,在将来编程是个基本技能。
一方面用老式的For Loop措施
还是一亿条数据跑分
成果:
看来也不快啊,花了十几秒,python在没有特定优化的前提下,比Java,Go语言慢了不少。
内置 sum函数上场
但是我们懂得python有内置的sum函数,是不是会快一点?让我们来试试:
成果:
不到十秒,快了一点点,但还是不抱负。
神兵numpy
据说有个numpy库,可以向量化(vectorization)实行多种运算,牵到台上看看:
成果:
哎呀48毫秒,真心牛逼啊,足足快了几百倍,比Go、Java所有快,不信你可以自己写个Go语言的版本对比一下。