『python训练营』数据分析:寻找Python最优计算性能
1、场景描述在数据统计分析过程中 , 求累计值(总和)是最常用的统计指标之一 , 市面上的各种流行数据库均支持的查询方式基本如下:
selectsum(c)fromtable_name;
当数据量在小规模时 , sum只是一瞬间的事情 , 让你感觉电脑真牛逼啊 , 我掰手指头要算半天的数 , 它居然可以这么快 , 下面是1万多条数据的字段求和 , 只用了8ms 。
文章图片
但是当数据量不断增长到一个量级时 , 比如说 , 先定个小目标:一亿条订单求总额 , 你可以尝试在常规的数据库上执行同样的语句需要多长时间 。
在我的电脑上执行这样的查询 , 大约需要10s 。
文章图片
或者更大的量级 , 十亿、百亿、万亿?你一秒钟给我算出来 , 哈哈 , 电脑也算懵逼了 。
文章图片
采用分布式存储、分布式计算 , 是目前解决大规模计算的通用方法 , 让你吃100个馒头 , 估计一礼拜也吃不完 , 做慈善 , 一人一个分给班里的同学 , 几分钟就没了 , 吃不完的那个放学别走 。
2、举栗说明今天我们不讲分布式计算 , 先看看如何在单机上达到最优的计算性能 。
以下的示例 , 用python语言模拟求1亿条订单金额的平均值 。
大家注意:我国小学生以后的课程都有python了 , 在未来编程是个基本技能 。
2.1首先用传统的ForLoop方式
【『python训练营』数据分析:寻找Python最优计算性能】还是一亿条数据跑分
文章图片
结果:
文章图片
看来也不快啊 , 花了十几秒 , python在没有特定优化的前提下 , 比Java , Go语言慢了不少 。
2.2内置sum函数上场
不过我们知道python有内置的sum函数 , 是不是会快一点?让我们来试试:
文章图片
结果:
文章图片
不到十秒 , 快了一点点 , 但还是不理想 。
2.3神兵numpy
听说有个numpy库 , 可以向量化(vectorization)执行各种运算 , 牵到台上看看:
文章图片
结果:
文章图片
哎呀48毫秒 , 真心牛逼啊 , 足足快了几百倍 , 比Go、Java都快 , 不信你可以自己写个Go语言的版本对比一下 。
2.3没完
听说还有个叫numba的 , 看简写nb也很NB , 要不把刚才的那些再跑一遍瞧瞧:
文章图片
可以看出numba对ForLoop的提升明显 , 对内置sum和numpy向量化影响不大 。
来个最终对比图 , 一目了然(柱子越低性能越好):
文章图片
3、结论:磨刀不误砍柴工现在有些数据库为了满足OLAP的需求 , 已经集成了向量化处理 , 通过测评 , 的确是显著提高了数据分析统计的性能 , 限于篇幅 , 今天不在此展开了 。
Pythonnumpy库主要提供:
ndarray , 速度快且空间高效的多维array , 可进行向量化算术操作和更高级推广应用能力 。
标准数学函数 , 可快速执行整个array上的数据操作 , 而不需要写循环:
比如说arr=np.array([[1.,2.,3.],[4.,5.,6.]]) , 可以进行arr*arr , arr*0.5 , 1/arr等运算 , 这些运算都是对array中的元素做相应的计算 , 即向量化的操作 。
- 埃尔法哥哥我学python的一点感受
- Python小镇Python必备技能:用pandas读Excel常见操作
- Python爱好者社区漫画 | 程序员逆天改命
- 全民学Python的热潮,风变编程带你领略它的独特魅力
- 埃尔法哥哥python教程:TF模型部署的特点
- 同样是做数据分析,你月薪8k他30k,到底差在了哪?
- Python1怎样解决虚拟内存不足问题
- 空间异常即刻诊断,华为云DAS服务新增空间&元数据分析特性
- 埃尔法哥哥Python入门系列9-Python数据类型
- 智慧黑科技NASA追踪16年冰盖消失和海平面上升 大数据分析得出这个“结果”