⽤Go替代Python在⽣产环境中进⾏数据分析
数据分析
介绍
⽬前,计算机领域正在从IT时代向DT时代迅速演进。
IT时代,就是信息科技时代。是⽤信息技术改善⼯作效率。
DT时代,就是数据科技时代。根据数据进⾏决策,改善决策效率。数据科技正在颠覆⼀个⼜⼀个⾏业的格局。最近⼏年,数据科学家这个新职位也成为了职场上最热门的职位。
根据数据进⾏决策,这个⼯作可以分为两个部分,⼀个部分是数据的采集、整理、加⼯和处理,另⼀部分是使⽤统计学、机器学习、⼈⼯智能等的模型从数据中提取知识进⾏决策。
数据和数据之间的关系,决定了基于数据决策的效果的理论上限。模型,只能⽆限逼近这个理论上限。
⽽且,现实中,简单和复杂的模型,其实际效果相差都不⼤。因此,如何搜集数据、处理数据、加⼯数据、分析数据,这样的脏活和累活,其实才是数据科学⼯作中最重要的⼯作,也是⼯作量最⼤的⼯作。设计模型相对来说没有那么重要。
⽬前,数据处理和分析,主要使⽤的是Python语⾔,也有⼀些统计学背景的从业者使⽤R语⾔。当然,也有⼈使⽤SAS,SPSS,Matlab 等付费语⾔和软件。
Python语⾔中,numpy和Pandas库更是数据分析的神器。简单、灵活、强⼤。
探索性的数据分析和⽣产环境中的数据分析
但是,Python⽤于数据分析,也有⼀些问题。Python作为⼀门动态语⾔,有很多表现⼒强⼤的语法糖,开发效率⾮常⾼,但运⾏效率很低。⽽且Python语⾔对多线程的⽀持并不好。
⽇常进⾏⼀些探索性的数据分析,Python是⾮常实⽤的⼯具。Python开发效率⾼,可以快速编写出多个版本的代码,进⾏数据探索,寻内部规律。
但是,⼀旦在⽣产环境中部署Python数据分析程序,就会暴露出Python程序运⾏性能低的问题。⽣产环境中并发访问量有时可能很⼤,如果部署Python的数据分析程序,由于其性能较低,需要部署⼤量节点,使⽤⼤量计算资源来满⾜并发需求。这成本就⽐较⾼了。
⽽且即使部署⼤量资源,由于Python程序性能较低,也难以满⾜某些要求快速响应的业务场景。
那么,有没有什么适合数据分析且运⾏效率⾼的语⾔呢?R语⾔⾏不⾏呢?抱歉,R语⾔虽然也⾮常适合编写数据分析程序,但是R语⾔的运⾏效率⽐Python语⾔还低。
我发现Go语⾔,是替代Python进⾏⾼性能数据分析⾮常适合的语⾔。
Go语⾔
介绍
Go语⾔(⼜叫Golang,因为在Go语⾔刚发布时,⽤Go很难在搜索引擎搜索到Go语⾔的信息)是Google公司在2007年推出的⼀门静态编译型语⾔。Go语⾔诞⽣的⽬的,是为了作为C语⾔的补充,是为了取代C++。主要⽬的是为了编写后端程序。Go语⾔官⽅⾄今都没有推出过前端开发框架。当然,你现在也可以到⼀些第三⽅⽤Go语⾔开发的前端开发框架。GTK,QT等都有Go语⾔对应的版本。
Go语⾔的设计思想,就是简单。Go语⾔只有25个关键字。Go语⾔最强调的就是简单性,我估计可能是为了和C++反着来吧。众所周
知,C++是⼀门⾮常复杂,并且复杂性在不断攀升的语⾔。C++的复杂性带来了很多问题。
Go语⾔是C语⾔的后继。从其设计来看,⾮常接近C语⾔,只是给C语⾔增加了少量功能⽽已。基本上就是给C语⾔添加了⼀些现代编程需要的少数特性:对象,接⼝,多返回值,协程,channel,切⽚,字典,垃圾回收器,闭包,错误管理,跨平台等。
go语言开发环境搭建
Go语⾔是⼀门静态编译型的语⾔,⽣成的是机器码,因此其程序运⾏效率⾮常⾼,接近C。Go语⾔的语意表达能⼒没有Python强,也没有Python那么多语法糖,因此其开发效率⽐Python略低,完成同样的功能需要编写稍多⼀些的代码。但权衡开发效率和运⾏效率后,我认为⽤Go替代Python在⽣产环境中进⾏数据分析,是⾮常正确的决定。
Go语⾔的数据分析库
Python中的numpy和pandas,在Go语⾔中也有对应的开源软件:gonum和gota。gonum和gota,⽐numpy和pandas的性能要强很多。
Go语⾔和Python语⾔的性能对⽐
Go语⾔和Python语⾔⼀般性能对⽐
我在⽹上到⼀份
在上述测试报告中,⼤部分测试⽤例下,Go语⾔程序要⽐Python语⾔程序快40多倍。
Golang Gota和Python Pandas性能对⽐
我们知道,在测试⽤例下表现好,不⼀定代表真实场景下表现也⼀样好。
因此,我分别⽤Python3的pandas和Golang的gota编写了⼀个简单的数据分析程序,模拟现实中的数据分析问题,对两者的性能进⾏了对⽐测试。
测试程序做了三件事情:
1,从json字符串创建数据帧(就是⼀个表)对象
golang⽐python快84倍。
python:
1505.480ms
go:
17.865437ms
2,对数据帧的每⼀⾏累加后做平均
golang⽐python快218倍。
python:
0:00:05.673854
go:
26.218691ms
3,对数据帧的每⼀⾏累加后做平均,再把结果作为新的列添加进数据帧
golang⽐python快61倍。
python:
0:00:03.063486
go:
50.572171ms
因为gota底层⽤的是gonum,pandas底层⽤的是numpy。所以,我没有对gonum和numpy单独执⾏性能对⽐测试。上述性能对⽐结果应该能够代表gonum和numpy的性能差异。
⽤Go替代Python在⽣产环境中进⾏数据分析
通过以上对⽐,我们看到Go语⾔在进⾏数据分析时,其运⾏效率⽐Python要⾼出2个数量级。如果在⽣产环境中,需要部署100台服务器运⾏Python程序以满⾜业务需要。那么如果使⽤Go语⾔编写数据分析程序,则可能只需要1、2台服务器就够了。并且能够满⾜某些要求响应时间⾮常短的业务场景。
⽽且,Go语⾔的开发效率也没有⽐Python低太多。这买卖划得来!
但也不是说,以后我们就只需要⽤Go语⾔进⾏数据分析了。
在执⾏探索性数据分析任务时,通常执⾏⼀次程序后,就需要修改很多代码,然后再重新执⾏程序看下结果。这个过程需要重复很多轮。这种场景下,⽤⾼开发效率的Python编写程序是更合适的选择。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。