Python vs R : 在机器学习和数据分析领域中的对比


为了鼓励新工具的出现,机器学习和数据分析领域似乎已经成了 “开源” 的天下。Python 和 R 语言都具有健全的生态系统,其中包括了很多开源工具和资源库,从而能够帮助任何水平层级的数据科学家展示其分析工作。

  机器学习和数据分析之间的差异有些难以言明,但二者最主要的不同就在于,比起模型的可解释性,机器学习更加强调预测的准确性;而数据分析则更加看重模型的可解释性以及统计推断。Python ,由于更看重预测结果的准确性,使其成为机器学习的一把利器。 R ,作为一种以统计推断为导向的编程语言,在数据分析界也得到广泛应用。

  当然,这并不代表二者只能在各自的一个领域中得到应用。Python 也可以高效地完成数据分析工作,R 在机器学习中也具有一定的灵活性。它们都拥有相当多的资源库去实现彼此特定的函数功能,比如 Python 就有很多资源库来提高自己统计推断的能力,R 也有很多包可以提升预测的准确率。

  Python 中关于机器学习和数据分析的包

  虽然 Python 本身就更倾向于机器学习, 但它还是有很多包可以进一步优化这一属性。PyBrain 是一个模块化的机器学习资源库,其中包含很多有效的算法可以满足机器学习任务的需要。除了很多直观灵活的算法,这个资源库还内置很多环境可以用来检验和比较这些机器学习算法的效果。

  Scikit-learn 可能是 Python 最受欢迎的机器学习资源库了。基于 Numpy 和 Scipy ,scikit-learn 提供大量用于数据挖掘和分析的工具,从而提高了 Python 本就出色的机器学习可用性。NumPy 和 SciPy 各自为战,虽然它们是 Python 中数据分析的核心部分,但数据分析家更可能仅仅原生地去使用它们,而不是基于一个更高的角度。 Scikit-learn 却将二者结合成为一个机器学习资源库,同时也降低了大家的学习门槛。

  在数据分析领域,Python 也因几个库而包受推崇。 作为其中最为著名的库之一,Pandas 为 Python 提供了高性能处理的数据结构和数据分析工具。如同其他很多 Python 的库一样,从你着手一个新项目到真正做些有价值的工作这过程的时间将会因它大大缩短。如果你执着于 Python 同时又希望使用 R 的功能, RPy2 库能够提供所有 R 的主要功能,并给你一个 R 在 Python 中使用的流畅化体验。

  R 中关于机器学习和数据分析的包

  就像 Python 一样,R 也拥有大量的包来提升它的表现。要想在机器学习领域媲美 Python,R 中的 Nnet 包具有快速构建神经网络模型的能力。通过提供一系列函数来提升所构建模型的有效性,CAret 包也可以加强 R 在机器学习的能力。

  就 R 在数据分析领域的表现,仍然有很多包可以用来提升它本就出色的能力。不管是建模前的准备,建模,以及建模后的分析工作,R 都有很多包可以胜任。这些包大多专门用来完成特定的任务,比如数据的可视化,连续变量回归和模型验证。

  两种编程语言都拥有如此多交叉功能的资源库和包,你会选择哪种编程语言作为伴你在数据战场厮杀的武器呢?

  在机器学习和数据分析中的 Python

  如果你已经有一些编程的基础了,Python 可能更加适合你。相较于 R ,Python 的语法结构与其他编程语言更加类似,便于上手。此外,就像是口头语一样, Python 代码的可读性也是无人能及的。这种代码的可读性更加强调提高生产力,而 R 非标准的代码可能会导致在编程进程中的磕绊。

  Python 是一种很灵活的编程语言,所以如果你打算把已经完成的机器学习或者数据分析的项目移植到其他领域,那么使用 Python 可以使你不必再去学习新的编程语言。

  Python 的灵活性也使得它非常适用于生产。举个例子,当数据分析的任务需要与 Web 应用程序相整合的时候,你仍然可以使用 Python 且不需要和其他编程语言相整合。而虽然 R 是一个很好的数据分析的工具,但它在数据分析之外的领域却有所限制。

  如果你刚入门编程,对那些 “标准化” 的语法并不熟悉,那么无论哪种编程语言的学习曲线对你而言都差不多。但要是你希望跨过机器学习和数据分析的门槛,Python 可能是更好的选择。特别是 Python 有 scikit-learn 库的加持。这个库表现良好且更新频繁。 R 可能有很多包,但显得有些零乱且一致性较差。

  在机器学习和数据分析中的 R

  目前, R 主要是用在科研和调查工作中。然而,随着 R 逐渐扩展到商业领域,这一现状也开始得到改变。 R 是由统计学家所创造出来的,因此它可以很轻易地管理基本的数据结构。给数据打标签,填充缺失值,筛选等等这些对于 R 而言很容易就可以实现,R 也更加强调易于操作的数据分析,统计和图形化模型工作。

  由于 R 是作为统计性的编程语言而构建的,因此它具有很好的统计方面的支持。它能够很好地展现统计学家的思维,所以如果你具有统计背景的话,用起来会很顺手。诸如像 statsmodels 包能够基本覆盖 Python 中的统计模型,而且 R 中与统计模型相关的包功能会更加强大。对于刚入门的程序员, R 只需要写几行代码就能够构建模型了,这样一来,它会比 Python 更容易解释一些。

  R 中与 Python 的 pandas 库功能最为接近的大概就是 dplyr 包了,只不过它会比 pandas 库限制得更多。虽然这听起来不太好,但实际上使用 dplyr 包时会促使你更专注于寻求问题的解决之道,而且 dplyr 包的代码也比 pandas 库更容易理解。

  选择你自己的编程语言吧

  R 最大的问题在于一致性不够好。其中的算法流程被分成三块,使得它们相对而言不够统一。你不得不学习新的方法来建模并用新的算法来做预测,伴随这个过程,结果的有效性将会明显下降。你需要理解每个包是怎么用的,同样地,R 中包的帮助文档由于不够完整,一致性也不好。

  不过,要是你需要一个数据分析的工具用于学术, R 绝对可以胜任这项工作。 Python 则被广泛地用于商业也更便于协作,不过 R 也越来越得到重视了。不管是日常的使用和机器学习,还是通过和 R 一般众多的包来做数据分析, Python 都能做到,因此也更推荐使用 Python 。

  如果你对 R 还比较陌生,不如学习 Python 并通过 RPy2 包来实现 R 的功能。 这样一来,你就可以在一种编程语言里同时使用二者的功能,而且由于很多公司已经开发了在 Python 中使用的生产系统, Python 可谓生产力高效。这点在 R 中就不适用了。一旦你学会了 RPy2 ,再想跳到 R 里面并没有那么复杂,不过反过来就相对而言困难得多了。

  不管你想解决什么类型的问题, Python 和 R 都有功能相近的资源库可以使用。每种编程语言都有很多的分支、模块、集成开发环境和算法,以至于你难以出什么大的纰漏。不过要是你希望使用一个灵活性强,扩展性好,多功能又能胜任机器学习和数据分析工作的编程语言, Python 或许是明智之选。

原文作者: Tom Radcliffe

译作者:Vector