为什么互联网公司在数据科学家工作中更喜欢Java / Python?


53

我在数据科学家的职位描述中多次看到要求Python / Java经验而无视R的情况。以下是我从我通过Linkedin申请的一家公司的首席数据科学家那里收到的一封个人电子邮件。

X,感谢您的联系和表达兴趣。您确实具有良好的分析技能。但是,由于我们是互联网/移动组织,所以我们所有的数据科学家都必须具备Java / Python方面的良好编程技能,并且我们所做的一切都是在线的。

尽管我尊重首席数据科学家的决定,但我无法清楚地了解Python可以完成R无法完成的任务。有人愿意详细说明吗?实际上,我很想学习Python / Java,请提供更多细节。

编辑:我在Quora上找到了一个有趣的讨论。 为什么Python是数据科学家的首选语言?

Edit2:来自Udacity的有关机器学习的语言和库的博客


8
Python是一个很好的折衷方案:它为数据科学(熊猫,scikit等)提供了许多(非标准)库,并且许多工业过程已经用python编码。
Manu H

4
“我们的数据科学家必须具备Java / Python良好的编程技能,因为我们是一个互联网/移动组织,我们所做的一切都是在线的”,这是一个不言而喻的事实 -结论并非来自此前提。我怀疑CDS只是想摆脱您。
Spacedman

5
@ManuH如果以“非标准”表示,则表示“不在标准库中”,这是正确的。但是这些工具得到了相当广泛的使用,它们无疑是该语言的主要内容。numpy目前有超过100k的SO问题,pandas有74k。我认为您当然可以证明它们是行业标准。(至少在软件开发方面。我几乎不称自己为“数据科学家”。)
jpmc26,2016年

2
“数据科学家”的定义不明确。基本上,数据科学家是可以用数据做有用的事情的人。他们不必使用机器学习或统计软件包。可能有人在使用Java / Scala / Spark /之类的东西来管理大量数据并获得有用的见解,而无需任何机器学习。
Akavall '16

2
@ jpmc26是的,那是我的意思。现在,我意识到甚至可以提到尚未达到行业标准的库(对于python的另一个论点)
Manu H

Answers:


67

因此,您可以与其余代码库集成。看来您的公司混合使用Java和python。如果站点的某个角落需要机器学习,该怎么办;将数据与数据库或缓存一起传递给R,依此类推?为什么不全部使用相同的语言?它更快,更清洁且易于维护。

知道任何仅在R上运行的在线公司吗?我也不...

一切都说Java是我从事数据科学工作的最后一种语言。


1
我正要说的是,面向服务的体系结构还可以帮助桥接技术。PMML有点麻烦。我没有用过,但是您是一家Java商店,母企业语言,所以您永远不会知道……
Emre

3
@Enthusiast不要忘记,您可以使用RPy2在python下运行R(例如),因此您可能最终(如我在上一份工作中所做的那样)运行通过python用R编写的模型,以便可以通过Web界面展示它们通过django。
MD-Tech

2
我们使用加载到R解释器中的纯文本.r文件构建模型,以进行测试(并促进构建)。虽然正在构建和测试它,但是我们构建了一个python django项目,该项目的某个部分引用了RPy2并创建了RPy2对象。然后,这些对象用于加载R文件的方式与在解释器中加载它们的方式相同,以便我们可以访问包装模型的函数。然后,我们可以通过python将数据从数据库传递到R。蟒蛇层给了我们使用Django和对数据库等控制的web前端..
MD-科技

1
@Enthusiast模型的结果由RPy2中的R返回,并以各种图形形式(主要是图形)显示在前端。
MD-Tech

2
@Enthusiast这是一个贝叶斯金融网络,但我不能说更多。模型是用直R编写的。我随时在Vim中对其进行编辑,并通过在RPy2对象上使用source(“ our_code.r”)将R代码作为文本加载到RPy2中,从而对其进行了“部署”。这样做是为了让我们可以实时编辑模型。这不是这个问题的答案;这是对尚未被要求的答案;)
MD-Tech

24

可能有很多原因,例如:

  1. 员工灵活性:一个Java / Python程序员可以轻松地转移到其他任务或项目。

  2. 候选人的可用性:有很多Java / Python程序员。您不想引入一种新的编程语言来以后发现没有合格的工人,或者它们太贵了。

  3. 集成和ETL:有时候,获得质量正确的数据是项目中最难的部分。因此,使用与其他系统相同的语言是很自然的。

  4. 业务模型定义:大多数业务规则和业务模型已经用这种语言编写。

  5. 只是保持简单。很难掌握最新技术。语言的基础可能很混乱。为此,R,为此,Ruby,Scala,Clojure,F#,Swift,Dart……他们可能需要不同的服务器,不同的路径和管理的地狱。它们都有自己的带有工具和插件的IDE(并非总是免费的)。查看Bob叔叔有关语言选择新技术的观点

因此,即使您使用R来完成特定任务在5%到15%的生产率上有优势,他们也可能更喜欢即使工作效率最高的工具。


尽管是正确的,但以上方法均未真正回答问题。获取数据减少了查询数据库或读取.csv文件的99%的时间-目标R实际上是市场上最合适的工具。候选人的可用性:Java程序员比R程序员多,这并不意味着您必须放弃R候选人(如果有的话)。只要科学家部署可以由某些服务器(或公司正在运行的其他任何东西)运行的可读代码,科学家如何执行他们的练习就并不重要。
gent16年

当然,您不应该丢弃候选人。人比工具重要得多。他们的团队可以学习R,候选人可以学习Java / Python。但这需要时间,这意味着金钱。
borjab

我当然不同意的是,它不介意该语言。当团队中唯一知道R的成员没有假期并且他们需要进行更改时,老板将不会高兴。或只是问团队“哦,太好了,我们需要学习一种新语言,只是因为新语言是通过这种方式完成的”。可能是服务器管理是另一个部门,新型服务器需要一些新的分析,过程等。可能是您需要IT安全方面的许可才能使用新的语言。
borjab

@GennaroTedesco候选人编写的代码必须由其他程序员维护,可以一起工作,也可以在将来与原作者保持联系的将来进行。拥有一个精通技术的候选人是不够的,考虑在需要时聘请一位精通该技术的候选人有多么容易仍然很重要。当然,如果有充分的理由,可以引入一种新的利基技术,但是有充分的理由要克服这些商业风险。
彼得尼斯(Peteris),2016年

可能必须利用R的$ X生产力的提高,但它没有帮助,如果他们必须花费$在改变他们的工作流程的努力2X。他们为什么要这样做,特别是如果他们可以雇用其他人而他们可能不会花2 美元呢?
user1908704

14

总的来说,对于纯数据科学和统计学练习,R提供了最好和最快的data.table工具和方法(尤其是如果使用软件包),否则,在Python中实现将更为繁重(我假设Python都是Pandas,不过)。实际上,大多数数据科学家确实使用R来执行其模型和计算,或者只是为了查看数据的行为。

一旦练习完成,就该向其他必须使用(即部署)的人提供该练习了;为此,通常首选使用Python提交代码,原因有两个:

  1. 大多数体系结构是用Python编写的,或者是Python友好的,因此实现以该语言原生编写的模型会更加容易。
  2. R语法和语法极其复杂。我本人除其他外强烈支持R,但必须承认语法并不是很简单,而且学习曲线非常好。

综上所述,只要方法,库和包可用(在Python中大多数都可以,那么这完全没问题),就可以轻松地将R代码翻译成任何其他语言,这仍然是事实。大量的基础架构和数据库都支持底层的R代码,因此可移植性并不是真正的问题,尤其是如果只是必须提交计算结果的话(因此,实际上没有人真正看到底层的代码)。

Java几乎对纯数据科学本身毫无用处(据我记得,尽管斯坦福大学拥有用Java编写的机器学习NLP库的集合,但请检查)。之所以需要它,是因为公司的其他成员在很大程度上使用了它,而他们不想用新的东西代替它。


感谢您分享您的观点和经验!这是有帮助的。从您的第二段开始,我假设您正在谈论scikit-learn?还是说RPy?关心详细吗?
发烧友

1
我只是说,无论您在R中做什么,都很可能有一个类似的Python程序包完成相同的工作。熊猫涵盖了大多数东西data.table。正如您所提到的,scikit-learn是另一个示例,但是根据实际情况,还有更多示例。
gent16年

1
就是我做的 一旦完成对R的研究,就可以转换为python以集成到代码库中。但是@Enthusiast是否可以在该公司做同样的事情取决于它的文化。大多数人使用老板使用的编程语言。而且Python不难学习。
jf328

1
@GennaroTedesco:“我的意思是简单地说,无论您在R中做什么,都有可能有一个类似的Python软件包完成相同的工作”。我实际上非常不同意这一说法。R的最大优点是90%的统计学家使用R而不是Python来发布最新和最“伟大”的文章。如果这些方法流行起来,它们最终可能会进入Python。但这对Python也是一个好处。有很多 R stats软件包只是垃圾,而我认为Python stats软件包更有可能是经过尝试的真实方法。
悬崖AB

“ R语法和语法非常复杂。我本人除其他外,都非常支持R,但必须承认该语法并不是很简单,而且学习曲线也非常好。” 两者似乎都是观点,但其中一个是客观陈述,另一个则反对。我很困惑。我也觉得Python的语法和习惯用法比较复杂(例如,强调OOP),所以这个答案让我感到困惑。
明亮的星星,

7

我已经看到很多公司使用“数据科学家”这个标题来担任“数据工程师”类型的角色。特别是在大数据空间中。

如果公司使用Hadoop或Spark等分布式框架来进行分析,那么Java或Python(或者可能是Scala)将是最有意义的语言。


在这种情况下,我肯定知道该角色是建模人员,因为它要求机器学习技能和特定的技术列表。
2016年

通过使用Java / Python库,他们仍然可以在这些技术中做到这一点,就像想到H20或MLlib一样。
greenpenguin

4

爪哇

在Java问题上,我不得不不同意其他海报。有一些noSQL数据库(例如hadoop)需要用Java编写mapreduce作业。现在,您可以使用HIVE获得几乎相同的结果。

蟒蛇

python / R辩论仍在继续。两者都是可扩展的语言,因此潜在地它们可能具有相同的处理能力。我只知道R,而我的python知识还很肤浅。以小企业主的身份来讲,您不希望您的企业中使用太多工具,否则它们通常会缺乏深度,并且很难支持它们。我认为这将取决于团队中工具知识的深度。如果团队专注于python,那么聘请另一位python数据科学家将很有意义,因为他们可以使用现有的代码库和历史性的实验代码。


2

至少对于我目前的团队(约80名数据科学家和工程师)而言,我们没有这种偏好。这里一半的数据科学家使用R,另一半使用Python。许多人都可以同时编写代码。我们确实在生产中部署了Python和R代码。

我认为我们的任何数据科学家都根本不会使用Java。如果他们需要处理大数据,则可以使用SparkSQL或PySpark。数据工程团队混合使用Java / Scala / Python / Go。

如果您是一家小型公司中为数不多的数据专家之一,那么我可以理解为什么他们需要某些语言技能,因此您既可以从事数据科学工作,也可以从事工程学。但是tbh,我认为大多数小型公司都没有足够的数据来使Python或R无法在生产中处理。


您能否详细说明贵组织的业务类型?是内部ML工作还是外部客户使用?
发烧友

1
@Enthusiast零售业务。内部ML的100%。
储钱盒

0

作为具有少量R经验的通用程序员,我的观点是:R在数据科学方面非常出色,但是它面向的是人们手动解释数据。如果您想将结果用于自动化的事物,则必须与其他事物进行交互,并且使用诸如R的问题特定语言很难进行其他事情。您可以在R中建立网站吗?:)另一方面,python确实有现成的用于数据科学的库,它是一种通用的编程语言,不会妨碍您使用它进行任何其他操作。对于Java来说,这对于具有数十万到数百万行代码的大型编程项目非常有用。如果数据科学部分需要与此接口,那么使用Java进行所有操作就有意义。

wh吟:为什么我必须分别登录每个StackExchange网站?


4
市场上几乎所有可用的工具都可以轻松运行R代码。Java对于数据科学几乎没有用。
绅士

1
@GennaroTedesco JAVA对于在bigdata工具中进行编码非常有用。因此对于查询数据部分有用。
发烧友

-1

Python中的工具比R更好。R社区非常停滞,而Python社区发展得非常快。特别是在数据科学工具中。
此外,Python与其周围的所有内容都更容易工作。您可以轻松地抓取网络,连接数据库等等。这使得原型制作变得非常快。
而且,如果您有一个可以使用的原型,并且希望使其更快或将其集成到公司工作流中,通常可以使用Java重新实现它。

R有一些简洁的工具和可视化工具,但是在其中构建新的东西并不是很好。


4
这绝对是完全错误的。
绅士
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.