那里有数百种编程语言,例如,采用一种字母编程语言的整个字母表。在数据科学领域,有两大竞争者:R和Python。现在为什么这个博客关于R而不是Python?
我必须坦白:我真的很想要Python。我深入研究了语言及其扩展。然而,它从来没有真正对我有用。我认为其中一个问题是Python试图成为每个人的宠儿。它可以做任何事情......和它相反。不,真的,它是学习编程的好语言,但我认为它有一些非常严重的缺陷。我在这里列出了一些:
- 它从使用哪个版本开始!当前版本的版本号为3,但仍然有很多代码基于以前的版本号2.问题是没有向后兼容性。甚至
print
命令的语法都改变了!* 接下来要选择哪个发行版!对于R用户来说,似乎是一个笑话对于Python用户来说是一个悲伤的现实:那里有各种不同的发行版。最着名的数据科学是Anaconda:https://www.anaconda.com/。其中一个原因是Python中的整个包系统很乱。为了给你一个例子,看看官方文档:https://packaging.python.org/tutorials/installing-packages/ - 七(!)页面基本上是R中的一个命令:(install.packages()
我知道,这不完全公平,但你明白了。* 有几个GUI,不可否认,这也是一个品味的问题,但在我看来,当谈到数据科学任务 - 你需要在线工作和脚本的组合 - 没有比这更好的GUI来自微软的RStudio(现在有Rodeo,免费下载:https://www.yhat.com/products/rodeo,但我不知道它有多成熟)。* 何时使用函数以及何时在对象上使用方法没有一般规则。这个问题的原因就是我上面所说的:Python希望成为每个人的宠儿,并试图同时实现一切。在这个有启发性的讨论中,不仅可以看到我,人们争相找到何时使用的标准:https://stackoverflow.com/questions/8108688/in-python-when-should-i-usea-a-功能代替方法。这里可以找到一个具体的例子,其中解释了为什么函数any(df2 == 1)
给出了错误的结果,你必须使用例如方法(df2 == 1).any()
。非常容易混淆和容易出错。* 更复杂的数据科学数据结构不是核心语言的一部分。例如,您需要用于向量的NumPy包和用于data.frames的pandas包。这本身不是问题,而是这带来的不一致。举个例子:虽然NumPy和pandas支持矢量化代码,但基本Python不支持它,你必须使用好的旧循环。* Python和R都不是最快的语言,但是与R ++(通过Dirk Eddelbuettel的Rcpp)相比,与最快的C ++之一的集成在Python中的表现要好得多,现在它可以被认为是标准方法。所有R数据结构都由相应的C ++类支持,并且有一种通用的方法来编写可以像常规R函数一样调用的超快C ++函数:
`library``(Rcpp)`
`bmi_R <-` `function``(weight, height) {`
`weight / (height * height)`
`}`
`bmi_R``(80, 1.85)` `# body mass index of person with 80 kg and 185 cm`
`## [1] 23.37473`
`cppFunction``("`
`float` `bmi_cpp``(float weight, float height) {`
`return weight / (height * height);`
`}`
`")`
`bmi_cpp``(80, 1.85)` `# same with cpp function`
`## [1] 23.37473`
在数据科学领域使用Python的一个主要原因是深度学习:神经网络。像Tensorflow这样的主要框架和像Keras这样的API过去都是由Python控制的,但是现在也有适用于R的优秀包装器(https://tensorflow.rstudio.com/和https://keras.rstudio.com/)。
总而言之,我认为R确实是大多数数据科学应用的最佳选择。学习曲线在开始时可能会稍微陡峭,但是当您使用更复杂的概念时,它比Python更容易使用。
网友评论