数据科学家的Python软件工程
数据科学 将数学和统计学、专业编程、高级分析、机器学习和人工智能(AI)与特定主题的专业知识相结合,以揭示隐藏在组织数据中的可操作的洞察力。
数据科学是所有行业中显示出最快增长率的领域之一。这是由于数据源和由其产生的数据量不断增加的结果。
数据科学作为一个领域,自从开始获得认可以来,在其他学科中引起了争议。
在这篇文章中,我们将学习软件工程的基本原理,为什么它对数据科学家很重要以及各种原则。我们将进一步了解重构、清洁和模块化代码(这里我们主要关注python)、测试和审查。
为什么软件工程对数据科学家很重要
数学家反对在没有彻底理解基本原理的情况下使用工具,软件工程师批评数据科学家对基本编程概念的无知,而统计学家则哀叹从业者中经常出现缺乏基本统计知识的情况。
而且,说实话,它们都是有效的。
当涉及到统计和算术时,你确实需要牢固掌握概率、代数和微积分等概念。
这种知识必须有多广泛?
基本的东西是不容商量的,尽管很多东西取决于你的职能。
类似的情况也适用于编程;如果你的工作需要你编写生产代码,你至少必须熟悉软件工程的基本知识。
为什么?
原因有很多,但在我看来,这些原因可以归纳为以下几个原则
- 完整性 – 代码的完整性是指它是如何有效地编写的,对错误有弹性,能捕捉到异常,经过测试,并受到外界的监督。
-
可解释性 – 代码被理解的能力及其充分的文件。
-
速度 – 代码的速度,它可以在现实世界中执行。
-
模块化 – 脚本和对象应该是模块化的,以允许重复使用,减少重复,并提高不同类的代码效率。
重构的意义
在我们的代码开始工作后,重构为我们提供了整洁和模块化的能力。我们也有机会提高我们代码的有效性。一个软件工程师在讨论有效的代码时,通常会使用其中的一个术语–
- 运行时间更短
-
更少的内存空间
-
并行化是减少我们运行时间的一个非常好的方法。编写一个脚本来并行处理数据,同时利用机器的部分或全部处理器,这被称为并行化。
我们的脚本通常是串行计算数据,先解决一个问题,然后再转到下一个问题,如此反复。这通常发生在我们开发Python代码的时候,如果我们想从并行化中获益,我们必须对其进行具体说明。
- 由于Python并没有真正向操作系统释放内存,因此在这种语言中减少内存的使用是很有挑战性的。当对象被删除时,它们的内存对新的Python对象来说是可用的,但它不会因为free()而返回到系统。
编写清洁代码的重要性
我们将在本文中讨论的大多数主题理论上都可以归类为创建更清洁的代码的工具或建议。然而,在这个特定的部分,我们将集中讨论 “干净 “这个词的精确定义。正如罗伯特-马丁在他的《清洁代码》一书中指出的那样,即使是有缺陷的代码也可以运行,然而,肮脏的代码可以使一个开发团队陷入困境。
How?
说实话,有很多选择,但是考虑到在审查写得很差的代码时浪费的时间,或者在开始一个新工作时才发现你要用旧的、难以辨认的代码工作。
编写模块化代码的重要性
尽管Python本质上是一种面向对象的编程语言,但对它所包含的内容的详细解释不在本文的范围之内。
但简而言之,面向对象的编程是关于创建具有其属性和行为的模块,与程序性编程相反,在程序性编程中,你为脚本编码一串指令,让其遵循。
在现实生活中,这些特质被称为品质,行为被称为技巧。
上述场景中的对象Computer和Printer将是独立的类。
一个类是一个蓝图,包括该类每个对象的属性和方法。
换句话说,我们设计的所有计算机和打印机都会有类似的功能和工作原理。
封装 是支撑这一主张的理论。封装指的是将数据和功能整合到一个对象或模块中的能力。
此外,当一个程序被分解成模块时,各个模块如果不负责执行,就不需要知道某件事情是如何完成的。
这又有什么帮助呢?
除了使你的代码在不同的类中更有效和可重复使用外,如前所述,它也使你在必要时更容易调试。
当程序的每一部分在整个程序被组合起来之前就已经完善时,在其他程序中重复使用独立的模块就会更简单。通过能够识别错误的根源,你也可能更容易补救问题。
测试的重要性
数据科学的测试是必需的。数据科学家的代码中缺乏测试,这经常是其他软件相关领域抱怨的根源。在其他算法或脚本中,一个错误可能只是导致程序停止工作,而在数据科学中,这甚至更加危险,因为程序可能会运行,但由于错误的编码值、不恰当的使用功能或与模型所基于的假设相矛盾的数据,产生不正确的见解和建议。
当我们谈论测试时,有两个关键的想法值得讨论 —
- 一个单元测试
-
测试驱动的开发
代码审查的重要性
团队中的每个人都会从代码审查中受益,它鼓励优秀的编程实践并使代码准备好用于生产。代码审查的主要目的是为了发现错误。然而,它们对于提高可读性和确保团队标准的实现也很有用,可以防止将迟缓或不干净的代码送入生产。
除了这些好处之外,代码审查还有利于知识共享,因为团队成员可以阅读不同的编码方法和背景的例子。
结论
在这个故事中,我们看到了一些基本原理,即使对于那些尽管本质上不是程序员,但却试图从一个完全不同的背景进入这个领域的人来说也是有用的。这些有助于写出更好的生产代码,节省时间,并使程序员在实施脚本时的生活更轻松。