本文可以看做是诚实预告版的《如何成为一名全栈数据科学家》,有感于湾区日报推荐的一篇文章《全栈数据科学家》,并探索如何正确点亮“数据科学家”的技能树以及 Python 在这棵技能树中的位置。
机器学习、大数据、数据挖掘这些红到碰不得的词碰撞出“数据科学家”、“数据工程师”这样的新兴职位,《全栈数据科学家》一文中作者提出了一个典型的数据科学部门的组成结构:
-
数据科学家:统计学家中代码写得最好的与工程师中统计学最好的“思考者”;
-
数据工程师:给数据科学家喂食、将他们的想法落地实现的“行动者”;
-
基础工程师:维护数据的“工人”。
这里不再重复作者对于职能分配等方面的讨论,有兴趣可以去阅读一下原文。首先需要说明,和 Web 开发领域的“全栈工程师”类似,全栈不是“物美价廉”的代名词,也不是“难以沟通,喜欢单打独斗”找的借口,而是对这个领域的所有环节都充满兴趣,对于从无到有的创造过程充满激情,更是能够理解彼此的需求,让团队沟通协作更加顺畅的润滑剂,所以每个领域都存在也需要更多的全栈!好了,干了这碗鸡汤,回归正题。我分别去 Quora 和蛤乎进行搜索,找到两张广义上数据科学家的技能图谱:
总的来说分为下面几个分支:
-
数学,统计,机器学习;
-
数据采集、分析、挖掘;
-
数据库、大数据处理;
-
结果报告、可视化。
在这些分支中,除了核心的数学能力、对数据的敏感以及创造性思维等,其余大部分要依赖编程语言或相关的工具来完成,并且同时可能存在多个竞争语言可供选择,下面我们就逐一讨论 Python 在这些领域中的应用:
https://pyhub.cc/topics
数学,统计
Numpy, SciPy 是 Python 中最常用于科学计算、统计分析的库,在这方面常见的竞争者有 MATLAB(Octave)和 R。尤其是与 R 语言的纷争一直存在,我曾经用过一段时间的 R 作为数据分析工具,如果要问我 R 好用吗?我不得不回答“好用”,毕竟它生来就是用于统计分析的;可是如果要问我 R 难用吗?我也不得不回答“难用”,难用主要体现在与一般编程语言迥异的数据结构与语法体系,另外在对原始数据的处理方面确实不如通用型编程语言 Python,可能比较适合用于初步处理过的数据,或者等待别人喂食的数据科学家更适合使用。
数据采集(爬虫)
爬虫应该算是 Python 最具优势的领域了,Requests + re 库或者专业爬虫框架 Scrapy ,让你可以在短时间内通过简短的脚本就可以爬去大量数据。
查看图片
在爬虫领域最有可能超越 Python 可能要算 Node.js ,更简单的异步、对 DOM 的操作以及直接执行前端 JavaScript 代码是它最大的优势,但是在第三方库的支持上还有很长的路要走。
大大大数据
性能一直都是 Python 的短板,而涉及到大规模数据的处理往往又对性能有较高的要求,因此在大数据处理方面 Java 与 C++ 显然占据更多先天优势,不过好在大部分大数据处理工具如 Hadoop、Spark 等都提供了 Python 适配接口。但是如果可能的话,学习一下 Java 或者 C++ 哪怕是语法更像 Python 的 Scala,都是值得的,作为一名全栈的觉悟不是追求一门技术上下通吃,而是能够掌握最合适的工具用在最恰当的地方。
其它一般的数据库不管是关系型还是 NoSQL,几乎没有不提供 Python 驱动的(如果有只能说明这个数据库的开发还不够完善,尽量别用 😜)。
结果报告与可视化
Jupyter (前身为 IPython Notebook)的兴起轨迹几乎与大数据、可视化等概念绑定在一起,交互式地执行任何(40多种)语言,结果展示在 Web 上,这简直是最理想的结果展示工具!
查看图片
当然同样以绘图著称的还有 R,其绘制的统计结果图标看起来会更专业(见仁见智吧)一些。Jupyter 在可视化方面更多需要依赖 Web 渲染,因此可以更好地与一些著名的 JavaScript 可视化工具相结合,例如 Bokeh,D3.js,three.js 等。Python 自己的可视化工具包括上面提到的 SciPy 家族中的 Matplotlib,以及跨平台的 plot.ly 等。
除了这些之外,还有一个非常具有艺术特色的可视化工具包 Processing 也非常值得推荐(现在也提供了 Python 适配版本~)。
总结
Life is short, you need Python. (and JavaScript 🤑)