ITPub博客

首页 > 数据库 > SQL on Hadoop > 如何成为10倍数据科学家,第1部分 - KDnuggets

如何成为10倍数据科学家,第1部分 - KDnuggets

SQL on Hadoop 作者:ITPUB社群 时间:1970-01-01 08:33:46 0 删除 编辑

如何成为10倍数据科学家,第1部分

10倍开发者是指生产力是平均水平10倍的人。我们借鉴开发者社区的建议和技巧,帮助您成为更精通的数据科学家,受到团队成员和利益相关者的喜爱。

作者:Stephanie Kim,Algorithmia。

最近我在PyData Seattle发表演讲,讲述如何通过借鉴开发者社区的建议和技巧来提升您的数据科学技能。这些建议将帮助您成为更精通的数据科学家,受到团队成员和利益相关者的喜爱。

这篇文章分为五个部分,包括:

  • 倍开发者的历史和争议。

  • 项目设计。

  • 代码设计。

  • 工作工具。

  • 模型生产化。

另外,如果您想观看完整的原始演讲,请点击这里查看。

10倍开发者是指生产力确实是普通开发者10倍的人。

10倍开发者不仅每小时编写的代码比普通开发者多,而且他们调试能力出众,由于测试代码而引入更少的bug,指导初级开发者,编写自己的文档,并拥有许多超越编程知识的广泛技能。

1968年,H. Sackman、W. J. Erikson和E. E. Grant进行了一项名为“比较在线和离线编程性能的探索性实验研究”的实验,发现程序员完成编程任务所需的时间存在很大差异。

该研究聚焦于平均拥有7年经验的项目员,发现程序员之间存在20:1的差异。

尽管实验中存在一些缺陷,例如将使用低级语言的程序员与使用高级语言的程序员混在一起,但后来有更多研究得出了类似的结果。

尽管关于10倍开发者是否存在一直存在广泛争议,但本文转而聚焦于你可以做些什么来成为更高效的数据科学家,借鉴那些被他人认为比同行快得多的资深开发者的技巧和诀窍。

了解业务

无论你在教育、生物技术还是金融公司工作,你都应该对所服务的业务至少有高层次的了解。

为了有效传达数据分析背后的故事,你应该了解是什么驱动了业务,并理解业务的目标。

例如,如果你专注于优化餐车选址,你会想了解人流量、竞争情况、该区域正在举办的活动,甚至天气。你会想了解为什么业务要针对选址进行优化。可能是为了增加现有餐车的销售额,也可能是他们打算增加餐车数量。

即使你今天可能是一家求职网站的数据科学家,明天又在一家金融公司工作,你也应该了解业务的运作方式,以便让你的分析对利益相关者具有相关性。

你还应该了解项目的业务流程,例如知道谁需要最终签字确认结果、你的部分完成后数据模型会传递给谁,以及预期的时间框架是什么。

最后,你应该确保了解利益相关者是谁,并向非技术利益相关者提出切合实际的期望。要做好成为教育者的准备,向非技术利益相关者解释为什么实现他们的目标可能需要比他们想象中更多的时间或资源。

当你理解了利益相关者的目标,并确保你就构建其解决方案所需的技术、专业知识和时间进行了沟通,那么你将成为公司更有价值的资产。

虽然了解业务很重要,但了解数据更重要。你需要知道数据是如何提取的、何时提取的、谁负责质量控制、为什么数据中可能存在缺口(例如供应商变更或提取方法变更)、可能缺少什么,以及还有哪些其他数据源可以潜在地加入以创建更准确的模型。

归根结底就是要与不同的团队交流并提出大量问题。不要害怕询问别人在做什么,也要讨论你在做什么,因为你永远不知道什么时候有人在重复劳动,或者他们是否有你需要的更干净版本的数据。例如,能够查询数据库而不是对SiteCatalyst进行多次API调用,将为你节省大量时间。

为什么在项目设计上花时间和心思会让你成为 10 倍效率的数据科学家?

  • 你只会做需要做的工作(先思考再编码),因此你会更快完成项目,因为你的工作量更少!

  • 通过发现客户/用户认为他们需要的与他们真正需要之间的误解,你将把自己定位为专家和共识构建者。

  • 你会巩固自己对需求的理解,从而避免代价高昂的错误。

代码设计

在设计代码时有许多最佳实践,但其中有一些尤为突出,会显著提升你的 x 值。

我第一次听到清晰胜过聪明这个观点是在大学的写作课上。人很容易沉迷于自己的小聪明,用最新潮的词汇来表达想法,但就像编程一样,你不仅可能把自己搞糊涂,还会把别人搞糊涂。

在上面的 Scala 示例中,第一行展示了使用简写语法的 sortBy 方法。虽然简洁,但很难想清楚下划线代表什么。尽管这是一个常见模式,许多人在匿名函数中将其用作参数名,但对于不太高级的开发者(或者当你有一段时间没看自己的代码时),弄清楚代码在做什么就变得很繁琐。

在第二个示例中,我们至少使用了参数名,而且它展示了赋值,我们可以看到它是按序列 x 中倒数第二个元素排序的。

当代码抽象程度较低时,后续调试会更容易,所以在第三个示例中,我将显式命名我的参数,使其能代表数据。

当你的大脑必须逐步处理每一步,并且要么查找要么回忆简写代码的作用时,调试会更耗时,添加新功能也会更耗时,所以尽管使用上述示例中的简写很简洁,最初输入也更快,但从长远来看,避免过于聪明对你和其他人都有好处。

虽然我们不会讨论缓存,但我们会谈到命名的重要性。想象一下,你正在查看一些旧代码,看到像 Scala 示例中那样对序列进行排序:

.sortBy(x => -x._2)

用单个字母来命名序列完全不能提供有用的信息,因为你很可能是从 API(应用程序编程接口)、数据库或 Spark 中的数据流等地方提取数据,必须运行代码才能知道“x”是什么。

所以沿用之前的 Scala 示例:

sortBy(clothesCount => -clothesCount._2)

你甚至不用运行代码就能看出我们在排序什么。

然而,有时使用 X 作为变量名有充分的理由。例如,X 常用于机器学习库中,其中 X 表示观测数据,而 y 是试图预测的变量。在这种情况下,最好遵循你所在领域的惯例,即“模型”、“拟合”、“预测”以及“x”和“y”对该领域的每个人来说都意味着相同的事情。

在数据科学之外,你应该遵循你所使用的编程语言的惯例。例如,我建议你查阅 Python 的 PEP 等文档以了解最佳实践,或者

通过注意命名约定,并在代码中保持清晰而非聪明,将使重构和调试都更加容易和快速。遵循这两个代码设计原则,你将成为一名 10 倍数据科学家。

《如何成为 10 倍数据科学家》第 2 部分。

原文。经许可转载。

简介:Stephanie Kim 是 Algorithmia 的开发者布道师。



转载声明:本文为转载整理,原文版权归原作者及原站点所有。

原文来源:KDnuggets

原创地址:https://www.kdnuggets.com/2017/09/become-10x-data-scientist-part1.html#comment-184750

原文作者:https://www.facebook.com/kdnuggets;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2022-11-21

  • 博文量
    1058
  • 访问量
    546382