君子生非异也,善假于物也。

“物” 能够延展英雄的能力。它是吕布的赤兔马,杨过的玄铁重剑,CS 中的沙漠之鹰,曹操传中的凤凰羽衣。“物” 也可用以治愈英雄,例如张无忌的黑玉断续膏,李逍遥的天香续命露,还有深夜里 TVB 的一碗面。

赤兔

对于不同的位面,有着不同的宝物定义。对古时文人来讲,笔墨纸砚,是当时具有生产力输出的四大工具。对程序员来讲,当代的 “文房四宝” 不外乎是:笔记本,大屏幕,机械键盘,人体工学椅,Google,Github 这几种。特别是机械键盘和人体工学椅,它们是极为重要的“人机接口”。前者可以用来延展英雄的输出能力,后者可以用来治愈英雄的腰椎。

机械键盘

在数据领域也有类似的情况。一个数据项目,最重要的是定义问题,其次是拿到好的数据,再次是找到合适的方法,最不重要的可能就是选择一个工具了。但是看起来最形而下的工具,却是最具体而真实的 “人数接口”。用一种顺手的工具来玩数据,我们会觉得比较舒服,输出效率更高。

市面上的分析工具大致分为两大类,菜单式的工具和命令行式的工具。前者适合于初学入门,类似于跟团旅游,提供了固定的路线。分析套路比较固定化,点几下鼠标就可以搞定也很省事。后者适合于老手玩家,类似于自由行,需要自己规划数据工作流,适用于自定义的灵活分析。大多数用户害怕命令行,然而使用命令行才能掌握真正的力量。命令行是 Jedi 的原力。

在命令行工具类别中,最耀眼的是 R 和 Python 这对双星。他们有非常多的相似之处,第一个相似之处是 “快”。这种快不是纯计算速度快,而是从想法到结果的快。因为不论是探索数据还是建模,都需要各种尝试各种试错各种踩坑,如果要花 2 小时写代码,跑 1 分钟,不如花 1 分钟写程序,跑 1 小时。因为人的时间总是更为宝贵。第二个相似之处是扩展丰富。即有大量现成的函数模块。从想法到结果的快速实现,不能等待重新造轮子,另一方面,试错也要做很多复杂的自定义任务,将各种模块进行组合,调用各种外部交互接口,这两种开源工具都非常擅长。

二者的差异点在于 Python 是一种通用型编程工具,R 专注于数据领域;R 有更为丰富的专业统计函数,Python 则长于机器学习;R 有更好的可视化包,Python 正在快速追赶;Python 和 R 的核心语法非常简洁,一些 R 包的语法则兼收并蓄,错综复杂。当你有时间的时候,双修是最好的选择。因为这两种工具类似于筷子和勺子的区别,在不同场景下使用某种工具更为有效。

R 语言这个工具与其生态系统,在统计之都上已经介绍得非常多了。下文简单介绍一下 python 的七个最为重要的数据分析模块,或者称之为七种武器。

长生剑:Numpy

长生剑

Numpy 是 Python 提供数值计算的基础模块,也是 Python 生态中历史最为悠久的模块,可称得上 “长生” 二字。如果没有这柄长生剑,就没有办法做快速高效的向量化计算。它还提供了线性代数等高级矩阵运算功能,另外还能集成 C 的代码,让你出剑更加的快。Python 的许多扩展模块都是基于 Numpy 开发的,所以学好 Numpy 就算是奠定好了根基。

碧玉刀:SciPy

碧玉刀

SciPy 是基于 Numpy 开发的高级模块,它用于解决科学计算中的一些标准问题。例如数值积分和微分方程求解,扩展的矩阵计算,最优化,概率分布和统计函数,甚至包括信号处理。练习好碧玉刀和长生剑,就足以解决常见的计算问题,并不需要自己哼哧哼哧造轮子写函数了。

孔雀翎:Matplotlib

孔雀翎

孔雀的尾羽聚合了世间所有的色彩,做数据研究同样需要漂亮的可视化工具。Matplotlib 是 python 下最著名的绘图库,提供了一整套和 Matlab 相似的 API,十分适合交互式绘图。也可将它作为绘图控件,嵌入各种应用程序中。在其基础之上,还有更为有趣的绘图工具 Seaborn 和 Bokeh。

多情环:Pandas

多情环

在数据整理阶段,我们经常需要连接读定不同类型的数据源,处理不同格式的数据对象,如果只使用 Numpy 会很麻烦。Pandas 使 Python 具备了类似 R 的数据框对象。这样方便用于真实江湖的数据处理和分析,它提供大量易用、高效的数据操作函数库,能执行 join 以及其他 SQL 类似的功能来重塑数据,支持各种格式的输入输出数据。它与 Python 生态中的其它模块也有很好的整合,多情环名不虚传。

离别钩:Statsmodels

离别钩

Statsmodels 是 python 中专门用于统计分析的模块,提供各种回归模型函数,包括广义回归和稳健回归,还提供大量时间序列分析函数,例如 ARIMA/VAR,各种经典假设检验和非参数方法一个都不少。有了离别钩,你可以随时和 R 说离别。

霸王枪:Scikit-learn

霸王枪

Scikit-learn 是非常著名的机器学习库,它提供一个统一的接口来使用不同模型,有助于迅速地在数据集上应用流行的算法。它包含了许多用于标准机器学习任务的工具,例如聚类、分类和回归等。不仅是各种算法,机器学习中重要的特征选择和模型评估均在模块中包含了。值得一提的另一个模块 gensim:提供了词向量、主题模型等函数。有了这两种模块,天下就绝没有不能解决的事。

一口箱子:TensorFlow

一口箱子

古龙并未写完最后的第七种武器,通常会将《英雄无泪》中的一口箱子作为最为神秘最为强悍的终级武器。在 Python 生态中,一口箱子只能属于 TensorFlow。它作为名门大派出品的深度学习框架,一出世就备受瞩目。TensorFlow 提供了 C++ 和 python 两种接口,让你能高效的设计各种机器学习算法,并且能运行在各类硬件架构之上。此外还有各种强力组件搭配,TensorBoard 用于监控学习过程中的各项参数,TensorServer 可用于生产环境的模型部署,甚至传说还有 TPU 这种专门用于深度学习的芯片。

在数据江湖中,没有顺手的武器,英雄亦束手加班中。七种武器虽强,但器物总是死的,更重要的是从器物的把玩中,能领悟到运用之妙,数据之道。一件武器是否能令读者觉得神奇有价值,主要还是得看使用它的是什么人。有赤兔的吕布没有看到明天,没有玄铁重剑的杨过却有更进一步的修炼。

江湖路远,少侠们一路走好。

编者注:若想了解 RStudio 为 TensorFlow 制作的接口,请点击网页 https://rstudio.github.io/tensorflow/

作者简介

一个喜欢折腾数据的人,与李舰合著了《数据科学中的 R 语言》,现就职于蚂蚁金服。

发表 / 查看评论