数据分析:寻找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媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Crossin的编程教室

【每周一坑】图像的指纹:数字水印 + 【解答】鸡兔同笼

曾经有过这样的新闻:某公司的员工将内网论坛上的言论截屏发布到互联网上,引发了热议。于是公司通过截图定位到了员工的身份,将其开除。

21020
来自专栏牛客网

美团java后台方向/2018春招/二面问题

22300
来自专栏程序员叨叨叨

6.4 移位操作符

Cg语言中的移位操作符,功能和C语言中的一样,也可以作用在向量上,但是向量类型必须是int类型。例如:

13120
来自专栏大数据挖掘DT机器学习

R语言绘制中国地图,并展示流行病学数据

本文作者:姜晓东,博士毕业于上海交通大学,目前任教于湖南师范大学医学院,专业神经毒理学。 流行病学的数据讲究“三间分布”,即人群分布、时间分布和空间分布。其中...

3.8K60
来自专栏PPV课数据科学社区

【完整案例】如何用R实现空间数据可视化

image.png 流行病学的数据讲究“三间分布”,即人群分布、时间分布和空间分布。其中的“空间分布”最好是在地图上展示,才比较清楚。R软件集统计分析与高级...

1.2K70
来自专栏数据结构与算法

网络最大流算法—最高标号预流推进HLPP

吐槽 这个算法。。 怎么说........ 学来也就是装装13吧。。。。 长得比EK丑 跑的比EK慢 写着比EK难 思想 大家先来猜一下这个算法的思想吧:joy...

40960
来自专栏CDA数据分析师

手把手教你用Python分析豆瓣电影——以《我不是药神》《邪不压正》为例

《我不是药神》是由文牧野执导,宁浩、徐峥共同监制的剧情片,徐峥、周一围、王传君、谭卓、章宇、杨新鸣等主演 。影片讲述了神油店老板程勇从一个交不起房租的男性保健品...

37030
来自专栏数据派THU

手把手教你用R处理常见的数据清洗问题(附步骤解析、R语言代码)

R是进行运算、清洗、汇总及生成概率统计等数据处理的一个绝佳选择。此外,由于它独立于平台、短期内不会消失,所以生成的程序可以在任何地方运行。并且,它具备非常棒的辅...

48930
来自专栏生信技能树

【生信菜鸟经】如何系统入门R语言

写在前面 R语言不仅在生物信息数据处理中发挥着重要作用,也是其它主流数据处理人士的首选工具。现在非常多自学生物信息学的小伙伴必须学的就是R,所以写一个R的系统性...

1.4K90
来自专栏CSDN技术头条

Weiflow:微博也有机器学习框架?

本文从开发效率(易用性)、可扩展性、执行效率三个方面,介绍了微博机器学习框架Weiflow在微博的应用和最佳实践。 在上期《基于Spark的大规模机器学习在微博...

34980

扫码关注云+社区

领取腾讯云代金券