Python 数据科学家的软件工程


数据科学将数学和统计学、专业编程、高级分析、机器学习和人工智能 (AI) 与特定主题领域的专业知识相结合,揭示隐藏在组织数据中的可操作见解。

数据科学是各个行业增长速度最快的领域之一。这是由于数据源和由此产生的数据量不断增加。

自数据科学开始获得认可以来,它就在其他学科中引发了争议。

在本文中,我们将学习软件工程的基础知识,为什么它对数据科学家很重要以及各种原则。我们将进一步了解重构、简洁和模块化代码(这里我们主要关注 Python)、测试和评审。

为什么软件工程对数据科学家很重要?

数学家反对在没有透彻理解底层原理的情况下使用工具,软件工程师批评数据科学家对基本编程概念的无知,统计学家则哀叹从业人员中经常缺乏基本统计知识。

而且,说实话,他们都是正确的。

在统计和算术方面,你确实需要牢牢掌握概率、代数和微积分等概念。

这些知识需要掌握到什么程度?

基础知识是不可协商的,尽管很多取决于你的职位。

类似的情况也适用于编程;如果你的工作需要编写生产代码,那么你至少必须熟悉软件工程的基础知识。

为什么?

原因有很多,但我认为,它们可以总结为以下原则:

  • 完整性 - 代码完整性是指代码编写得有多有效,对错误的弹性,捕获异常,经过测试以及是否受到外部审查。

  • 可解释性 - 代码的可理解性及其充分的文档。

  • 速度 - 代码在现实环境中执行的速度。

  • 模块化 - 脚本和对象应该是模块化的,以便于重用,减少重复,并在类之间提高代码效率

重构的重要性

在我们的代码能够工作之后,重构使我们能够整理和模块化它。我们还有机会提高代码的效率。软件工程师在讨论有效代码时通常会使用以下其中一个术语:

  • 更短的运行时间

  • 更少的内存空间

我们可以通过以下方式处理这两点:

  • 并行化是减少运行时间的绝佳方法。编写一个脚本以并行处理数据,同时利用机器的一些或所有处理器,这被称为并行化。

    我们的脚本通常以串行方式计算数据,先解决一个问题,然后再继续解决下一个问题,依此类推。这通常发生在我们开发 Python 代码时,如果我们想从并行化中获益,我们必须明确说明这一点。

  • 由于 Python 不会真正将内存释放回操作系统,因此在这种语言中减少内存使用量具有挑战性。当对象被删除时,它们的内存可供新的 Python 对象使用,但不会免费返回给系统(free())。

编写简洁代码的重要性

我们将在本文中讨论的大多数主题从理论上讲都可以归类为编写更简洁代码的工具或建议。但是,在本节中,我们将重点关注“简洁”一词的确切含义。正如 Robert Martin 在他的著作《Clean Code》中指出的那样,即使是有缺陷的代码也可以运行,但肮脏的代码可能会使开发团队陷入困境。

如何?

说实话,有很多选择,但请考虑一下在审查编写得很糟糕的代码时浪费的时间,或者在开始新工作时却发现你将要处理旧的、难以阅读的代码时浪费的时间。

编写模块化代码的重要性

尽管 Python 本身是一种面向对象的编程语言,但本文不打算详细解释其含义。

但简而言之,面向对象编程是关于创建具有其属性和行为的模块,而不是过程化编程,在过程化编程中,你为脚本编写一系列指令以供其遵循。

在现实生活中,这些特征被称为特性和行为作为技术。

上述场景中的计算机和打印机对象将是独立的类。

是一种蓝图,它包含该类型每个对象的属性和方法

换句话说,我们设计的所有计算机和打印机都将具有相似的特性和功能。

封装是该命题背后的理论。封装是指将数据和函数集成到单个对象或模块中的能力。

此外,当程序被分解成模块时,如果各个模块不负责执行某项操作,则它们不需要知道该操作是如何完成的。

这有什么帮助?

如前所述,除了使你的代码在类之间更高效且可重用之外,它还可以简化必要的调试过程。

在将整个程序组合在一起之前,每个程序部分都经过完善,这样可以更容易地在其他程序中重用单独的模块。你还可以更轻松地解决问题,因为能够识别错误的根本原因。

测试的重要性

数据科学需要测试。数据科学家代码中缺乏测试是其他软件相关领域经常抱怨的一个问题。在其他算法或脚本中,错误可能只会导致程序停止工作,但在数据科学中,这甚至更危险,因为程序可能会运行但会产生错误的见解和建议,原因可能是编码错误的值、使用不当的特征或与模型所基于的假设相矛盾的数据。

当我们谈论测试时,有两个关键概念值得讨论:

  • 单元测试

  • 测试驱动开发

代码审查的重要性

团队中的每个人都受益于代码审查,代码审查鼓励良好的编程实践并使代码准备好投入生产。代码审查的主要目的是查找错误。但是,它们也有助于提高可读性和确保符合团队标准,防止将缓慢或不干净的代码引入生产环境。

除了这些好处之外,代码审查还有助于知识共享,因为团队成员可以阅读不同编码方法和背景的示例。

结论

在这个故事中,我们看到了一些即使对于那些尽管本质上不是程序员但试图从完全不同的背景进入该领域的人来说也很有用的基础知识。这些有助于编写更好的生产代码,节省时间,并在实施脚本时使程序员的生活更轻松。

更新于:2023年1月9日

233 次浏览

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告