对于数据科学家来说,工作的一大部分都需要在交互式编程环境中对数据进行处理、分析和可视化。
在过去几年,R语言和Python成了进行数据科学中最炙手可热的两种语言。这两种语言各有优缺点,掌握这两种语言大有益处,但是针对面试者而言,最好的方式是学习其中一种并熟练掌握。
在本文中,我对这两种语言分别进行介绍,希望能帮助你更好地应对数据科学面试。
1. 选择一种语言
正如上文中所提到的,我并不建议你两种语言都掌握。在我所经历的面试中,无论是作为面试者还是面试官,我发现这些面试都允许面试者用任何一种语言解决问题。所以选取其中一种进行学习即可。
那么,应该选Python还是R语言呢?
Python
Python是一种多用途且功能齐全的编程语言。旨在实现C语言、Java等编程语言同样的的功能。与C语言不同,Python使用起来更方便,具有自动内存管理和动态类型等功能。
在我看来,用Python进行数据科学优势在于:它能够像生产系统的后端语言一样。也就是说,作为数据科学家,你的任何建模都可以通过在线网站或软件产品等形式轻松实现。如果你主要的兴趣是写代码或原型化代码,我推荐选择Python。
R
另一方面,R语言更像是分析语言。R支持所有标准的计算机科学数据结构和技术,例如数组和for循环,而且R语言非常擅长处理矩形数据集,就像在电子表格程序中看到的那样。但与电子表格不同的是,你仍可以利用迭代和抽象等计算机科学概念,这使得R语言比Excel更强大。
此外,R是学术界定量研究人员使用的语言。这也就是说,通常最先进的统计技术会最先使用在R包中,并且远早于其他语言,包括Python。因此,如果你的主要工作涉及到离线分析和数据可视化,并且你想接触到前沿的统计学包,那么R是不错的选择。
总而言之,选择任何当中一种语言都不会出错。这两种语言都很强大,使用任何一种都能实现你想完成的数据科学任务。
2. 选择操作环境
当你选择了语言之后,下一步需要熟悉最适合这种语言的互动环境。这样你之后在编写、保存代码,数据可视化以及管理包时都会更轻松。
Python
Python方面是Jupyter,并使用相关notebook进行设置。这与RStudio非常不同,但同样很有用。Jupyter提供了基于浏览器的notebook,而不是本地IDE,在当中你能够将代码分成可执行的块,因此你可以分段运行代码并进行分析。输出显示在生成代码的下方,因此你能很清楚哪个输出来自哪个分析。此外,由于它是基于浏览器的,Jupyter notebook也易于与他人共享。
R
R方面是RStudio。与使用命令行或其他IDE相比,使用RStudio进行数据分析要方便得多。使用RStudio能够管理包,访问文件,显示可视化,并为你提供可自定义的文本编辑器和控制台。整个环境为四格窗口形式,操作起来非常方便。
3. 编程基础知识
无论选择哪种语言,你都需要了解编程基础知识,比如数据类型、结构、迭代和抽象。但你在面试中不会直接被问到这些问题,因为这通常是软件工程面试中所涉及的。但是你肯定需要熟悉这些概念,从而完成数据科学面试中的白板问题,以及可带回家完成的编程挑战。
数据类型
数据类型是描述存储信息类型的一种方式。Python的数据类型有:数字、整数、长整数或浮点数;布尔值、二进制;还可以是字符串,即各种字符的组合。在R语言中,以上所有的类型还要加上:由不同的字符串表示的有序变量。
关于不同数据类型如何存储和编码这方面知识很深奥,但在面试中无需担心这方面问题。要注意的是,任何给定的数据单元都属于这些类型之一,并且数据类型将决定你能对数据执行的具体操作。例如,你可以将两个数字变量相乘,但你将无法对两个字符串执行此操作。
数据结构
数据结构是数据的数字或字符串的组合方式。Python有列表(list)和元组,两者都是有序的数据集合,其中列表在其他语言中称为数组。还有集合(set),这是无重复的无序变量集合。此外,Python还有字典(dictionary),表示键值对的有序集合。R语言中有向量(vector),这类似Python的列表,列表,矩阵和数据框。
迭代
迭代是计算机科学中的一个重要概念,它与数据结构密切相关,实质上它是对数据结构中每个项目执行操作的一种方法。这里的两大类是向量化运算和循环。向量化函数是将单个函数应用于数据结构的每个元素,并返回一个元素。
例如,你可以用五个不同数字的列表或向量,然后得到每个数字平方根的新向量。另一方面,循环能让你写执行在给定结构中的代码块。这通常比较慢,但更灵活,因为你可以执行任意代码,并得出任何输出。
循环在R和Python中以相同的形式存在。然而,向量化函数在两种语言中的形式多样且差别大。在R中,有apply
的向量化函数族。在Python中有列表解析和Numpy包中的vectorize
等选项。这看起来可能很繁琐,但一旦掌握这个概念你就会发现,这些只是相同基本概念的不同应用方式:即选用某种数据结构并对每个元素进行操作。
抽象
抽象是一种编写代码块的方法,可以通过提供给不同的输入重新使用。例如,你可以写一个函数,接受单个数字输入并将其相乘以获得平方值。然后你可以将任意数字传递给函数以获得平方输出,这比在需要时手动进行平方更简洁。Python和R都允许用户定义函数,语法略有不同。
4. 数据操作
数据处理是面试问题中的一类。例如SQL,面试官会给你提供样本数据集,并要求你输出特定结果。
对于这种类型的面试来说,重要的是你熟悉用R或Python包进行数据操作。
Python
Python方面你需要掌握Pandas,这提供了一个完整的框架来运行数据框,包含行和列的矩形数据集。Pandas具有你需要用到的所有操作符,包括过滤、聚合、连接等方法。
R
虽然R本身支持矩阵和数据框形式的矩形数据集,但你仍然可以通过学习dplyr或data.table来让操作更简便。这些包都提供了很好的操作界面:dplyr更直观和可读,而data.table更快,语法更简洁。
5. 统计
统计可能会在白板面试中遇到。这实际上是最简单的部分,因为复杂的统计函数在这些语言中通常被抽象为易于使用的函数。
R中包含许多基本的统计函数。你要花费数小时写的代码,这可能用简单线性回归就可以执行:
model <- lm(y ~ x1 + x2, data = df)
在Python中,你至少需要Numpy和Scipy软件包才能确保涵盖了基本的统计功能,但跟R语言一样,一旦安装完毕你就可以应用了。
6. 可视化
除了白板面试,许多数据科学面试还有可带回家完成的编程挑战,这通常会给出样本数据集,要求你进行分析并得出结论。通常你需要发回代码,一些解释性文本和可视化。下面看到可视化问题。
对于R和Python,进行可视化实际上只有一种选项:在Python中用matplotlib,在R中用ggplot2。这两个库都有灵活的接口,用于创建漂亮的数据可视化。
对于带回家完成的编程挑战的小建议:给图表起标题,注意对轴进行标注,如果需要可加上误差条,颜色上注意一致性。例如,如果你在图表中将iOS数据点设置为红色,Android为蓝色,那么在所有后续图表中要保持一致。同时图表选择要简单,通常只需条形图,折线图和散点图即可。
7. 结语
通常当你深入了解编程概念时会感到不知所措,但你一旦掌握了编程语言的基础知识,那么接下来就可以使用相关工具进行数据操作、统计和可视化。专注于这三个方面,那么你就能轻松搞定数据科学面试。
原文发布时间为:2018-09-19