现在Python很热,热到什么地步?
我经常在App里看到有一条视频广告,形式略有不同,但总的来说角色就两个,一个很凶的主管和一个很困扰的下属,很凶的主管布置了一个很急的活,困扰的下属挠耳挠腮,委屈说用电子表格根本不可能赶得出来,很凶的主管这时更凶了,啪啪啪一通操作,说用Python只要5分钟就出来了,还不快去学!
我觉得这条广告最有意思的地方,在于两个角色都西装革履,一看就很不程序员,更像是习惯一脸严肃坐在CBD里吹冷气的商务人士,以前我以为这是广告策划的一个Bug,每次看到这里都被这反差萌逗乐,直到有一天,有位做金融的朋友问我说Python好不好学,我才知道Python真的已经火出圈了。
先说一点,虽然现在不管圈里圈外,只要说到做数据分析、机器学习甚至人工智能,好像已经言必称Python,不过,这些领域并非天生就得是Python,别的不说,就说人工智能。
人工智能领域出了很多语言,如果你早个几年学习人工智能,可能连Python的影子都看不见,大家一般推荐的都是LISP、Prolog,哪怕是业内人士看这些语言都是又古老又偏门,尤其是Prolog,好像除了人工智能就没别的地方能见到,但是Prolog做规则推导有奇效,大家也就一直沿用下来了。
现在呢?现在不怎么提了,一来是因为基于统计的机器学习一直占据了人工智能的顶流位置,规则推导说得不多,二来是Python迅速崛起,人称“人工智能第一语言”,就连规则推导都可以用Python来做。
另一个例子是数据分析,早前都是R语言的天下,后来是R和Python两分天下,现在人工智能的东风一起来,R完全无法招架Python 迅猛发展的势头,所以这些前浪就理所当然被拍在了沙滩上。
但是,这是结果,现在我们要问的是:为什么Python能成为“人工智能第一语言”呢?
01 Python有哪些优点
现在Python很热,所以介绍Python的文章特别多,大家一定也看腻了诸如Python简单易用、灵活性高之类好像说了很多,又好像什么都没说的介绍。我们说点接地气的。
在我来看,Python最大的优点就是“拎包入住”。
如果大家去租房,一定能看到一个词,叫“拎包入住”,这个词经常作为租屋的重要卖点,也反映出消费者对租屋的一个重要需求。
什么叫拎包入住?租房行业对这个词的准确定义有争议,很多人在纠结家私家电齐全到底是不是等同于拎包入住,不过意思是清楚的,我作为租客,啥都不用准备,只需要把行李拉过来就可以住下了,这就是拎包入住。
换句话说,有不少租屋是达不到拎包入住的标准的,本来我只是要满足“住”的需要,可是因为租屋条件有欠缺,导致我不得不先客串一回装修师傅,需要先做一些其它的准备,然后才能做我想要做的事。
好了,说回编程语言。很多人喜欢从语言风格、语法设计甚至语法糖等等角度来比较编程语言的优劣,不过,我更看重另一样东西:生态环境。
以前我们说C++多么多么爆红,后来又说Java多么多么爆红,现在又轮到了Python,到底这些“网红语言”的成功背后靠的是什么?真的只是因为编程语言自身的优秀设计吗?
我认为,一款编程语言是否流行,设计当然是很重要的因素,但生态环境的成熟可能是更为直接的原因。我们经常能听到的一个关于编程的问题是,A语言早就已经过时了,现在已经有了新兴的B语言,为什么现在还要用A语言开发项目呢?
这个问题通常有两种可能,一种是项目已经用A语言做了大量开发,替换成B语言又得高楼平地起,另一种是B语言还太新,某个专业领域还没有可用的或者好用的库,同样也得高楼平地起。这两种都可以归结为同一个原因:使用B语言并不能拎包入住。
Python的成功,同样是因为能够拎包入住。
回想一下前面的广告,说用Python只要5分钟就能把看似做不完的工作做完,为什么?
不是因为Python语言设计有多么多么精巧,别人要写一万行,Python只要一行就搞定,而是Python有非常成熟的生态环境,你扔一个任务过来,用Python不用从头开始,只要找到对应的库,一句import加几行代码,可能结果就出来了。
从始至终,你都只需要关注任务本身,而不需要思考编程语言怎么处理实现,没什么杂七杂八的东西需要浪费时间。这就叫拎包入住。
02 数据科学方向的热门Python包介绍
都知道Python在人工智能、大数据方向很热,但是,真的有任务来了,究竟该用哪些包呢?很多介绍Python的教程,是真的就只介绍Python的语法,语法当然很重要,要想使用Python,首先当然得掌握语法。
但是,前面我们也进行了介绍,Python的优势在于拥有许多成熟的包,让你可以“拎包入住”,也即可以专注于任务本身,所以,我们要用Python,不但需要掌握Python的语法,同时也要了解都有哪些好用的Python,都可以用来做什么。
Python好用的包非常多,覆盖领域也是五花八门,都列出来反而显得凌乱,这里我们只介绍数据科学和人工智能方向用得多的包。
首先是pandas。这是数据分析用得非常多的包,尤其擅长各种格式化数值分析,前面提到的Python广告只说用Python,并没有说明该使用什么包,不过,既然是替代电子表格进行数据分析,想必肯定会用到pandas。
接着是scikit-learn,这个包写法很多,也有人喜欢简写为sklearn。这是个著名的机器学习包。scikit-learn非常好用,推荐大家都试一试,尤其是觉得机器学习数学很难,一看到机器学习几个字就产生抵触心理的同学。
为什么这么说呢?我们都知道,机器学习不是一种方法,而是一个大框,里面堆满各种算法模型,譬如线性模型、树形模型、支持向量机模型、以及现在在机器学习领域非常热门的神经网络模型。
每一种模型背后都依靠一套复杂的数学逻辑来支撑模型运作。在很多人看来,光是看懂机器学习模型的数学表达式就已经十分费劲,需要很深的数学功底,更不用说手推公式和实战中使用了。于是,很多人觉得机器学习“可远观而不可亵玩焉”。
当然,这里面有几个理解误区。是不是需要很深的数学功底才能明白机器学习模型的原理呢?未必,机器学习确实用到很多数学知识,不过,我经常和大家分享的一个观点是:不妨把数学看作只是一种语言,是一门外语,机器学习的运行原理,是用这门外语来描述,所以我们不太容易看懂。
那怎么办呢?跨国交流我们可以找翻译,同样,只要有人看懂了机器学习这里的数学语,然后“翻译”成中文,也就方便大家看得懂了。这件事我自己做了些尝试,写了一本书叫《机器学习算法的数学解析和Python实现》,大家感兴趣可以翻翻。
另一个误区就是得把机器学习模型的数学原理都学懂弄通了,最好能手推一遍公式,然后才能知道怎么使用。这个理解符合我们长期以来形成的按部就班的印象,不过,就我看来,使用机器学习和开车很像,没必要要求司机都学会造车了才能开车,况且,造车和开车很可能还是并不相同的两条学习曲线,毕竟老技工未必就是老司机。
如果只是想用机器学习解决问题,完全可以另辟蹊径积累经验。方法是什么呢?就是使用scikit-learn,这个包把常用的热门的机器学习模型统统做了非常良好的封装,我们完全可以像调用黑盒函数一样,操作各种机器学习模型来解决实际问题。
最后就是Pytorch、Tensorflow和Keras这几个网红深度学习包,Python这一轮走势长红,这几个深度学习包居功甚伟,在背后贡献了大量流量。
现在是深度学习时代,大家都知道深度学习能解决很多以前无解的问题,可是理论设计出来的模型,还得编程实现才能使用。怎么实现呢?就用这几个包,它们把深度学习的各个部件都已经封装好了,使用者只需要像拼装乐高积木一样,把部件拼装成完整的模型。
篇幅有限,我就简单介绍到这,当然,Python的库就像是一个工具仓库,只要你想得到的工作,都可能已经有不止一个成熟的Python库可供选择,譬如说一些细分的机器学习任务,如自然语言处理NLP,就还有好几个专门做NLP领域任务的Python包,又譬如说大数据用到的一些基础组件,如Hadoop、Spark,同样也有专门的Python对口服务。
现在大家应该感到Python真是个宝藏男孩,应该就能更为理解,为什么开发人工智能要用Python,一项人工智能的工程可能涉及到多个环节,而如果选择使用Python,它可以给你提供一条龙服务。