17611538698
webmaster@21cto.com

改变数据科学的三种编程语言

编程语言 0 571 2024-09-06 11:23:36

图片

导读:Python、Julia 和 Rust 是数据科学领域的三大领先语言,但每种编程语言各有优劣势。以下是各位开发者需要了解的内容。

最强大、最灵活的数据科学工具便是计算机编程语言。


绝大多数时刻,正确解决数据科学问题的唯一方法是自己动手解决问题,即便只有几行代码。


但掌握编程语言也需要一些时间,而且您选择的语言会受到许多因素的影响,包括您现有的编程经验、问题范围以及您是否需要优先考虑运行速度或开发的速度。


在本文中,我们将介绍对现代数据科学影响最大的三种编程语言。这些语言不仅因为其强大和速度而至关重要,还因为其便利性以及如何通过第三方库实现数据驱动的工作。


Python


图片

如果不提及Python,就不大可能讨论现代数据科学。这门已有几十年历史的语言在过去 10 年里人气大增,部分原因是它已经成为事实上的数据科学语言。

Python 的两大卖点就体现在这里。

首先,Python 是一种相对容易编程的语言。你可以用 Python 快速制作一个可运行的软件原型,并且随着时间的推移逐步提高其性能。

使用 Python 进行数据科学项目所需的时间不像使用其他语言那样长。现有的数据科学文化提供了许多可用于你自己的基于 Python 项目的快速模板,这也对开发者有所帮助。

第二大卖点是 Python 的第三方库生态系统,它几乎保证了其他人已经开发出针对你遇到的问题预先打好包的解决方案。

该生态系统为数据科学提供了丰富的资源,包括:数字运算库(NumPy、Pandas、Polars);图形和绘图工具(Bokeh、Plotly);用于可重复工作的笔记本环境(Jupyter);机器学习和 AI 工具包(PyTorch);分析工具(DuckDB)等等。

尽管 Python 很受欢迎且很有吸引力,但它也存在一些缺点,使得一些数据科学应用程序更难开发和部署。

Python 缺乏将 Python 应用程序部署为独立本机程序的机制。如果您编写了一个 Python库,可以通过 PyPI 将该库打包并分发给其他用户。但这意味着其他用户知道如何设置 Python 环境来使用您的代码。

将 Python程序打包成一个让没有 Python 经验的人可以下载并运行它的方式要困难得多。请注意,这也并非不可能,只是存在一些困难,而且 Python 的工具链本身不支持。

想要将自己创建的 Python 工具重新打包供他人使用的数据科学人员的选择有限。他们可以将自己的工作部署为库,并假设其他人了解 Python;他们可以通过 Web 界面部署相关应用程序(并不是总是可行);他们可以通过 Docker 等容器系统进行部署(同样,对方并不总是熟悉);或者他们可以使用第三方工具将 Python 运行时与他们的应用程序及其库打包在一起(并非总是很可靠)。

另一个缺点是原生 Python 代码的速度。在执行基于 CPU 的计算时,它比 C、Rust、Julia 等其他语言慢得多。这意味着任何高性能 Python 代码通常都不是用 Python 本身编写的,这会在你和正在做的工作之间增加一个额外的抽象级别。

目前正在努力使原生 Python 更快,但我们不太可能在短期内看到与机器原生代码类似的速度。

Julia

图片

Julia 语言于2012 年首次发布,专为数据科学家而创建。

它的创建者希望拥有一种像 Python 一样易于使用、但速度却与 C 或 Fortran 一样快的语言,并且无需同时使用多种语言即可获得最佳结果。

Julia 的神奇之处在于,它通过 LLVM 编译器系统“即时”编译(或 JITed)为机器原生代码。Julia 代码具有 Python 语法的简单性,因此易于编写并支持快速结果。您可以先让编译器推断类型,然后再提供类型注释以获得更好的性能。

Julia 的软件包集合包含适用于大多数常见数据科学或分析工作的库,如常见数学函数(如线性代数或矩阵理论)、AI、统计以及用于并行计算或 GPU 驱动计算的工具。

许多软件包都是用 Julia 原生编写的,但有些软件包包含众所周知的第三方库,例如TensorFlow。如果你在共享库中已有 C 或 Fortran 代码,则可以直接从 Julia 中调用它,并且开销极小。

数据科学家使用交互式Jupyter 记事本环境快速编写和共享代码。Julia软件包增加了对 Jupyter 和JupyterLab IDE中的 Julia 编码的支持。

那么,使用 Julia 有什么缺点?

一个问题和 Python 一样,Julia 存在一个大限制:仍然没有简单的方法来捆绑 Julia 程序,以便没有 Julia 运行时的人可以使用它。存在各种解决方法,但没有一个“万无一失”的解决方案可以处理创建可再分发应用程序的整个工作流程。

用户在学习 Julia 的过程中,早期就会遇到另一个问题:“首次 X 时间”问题(也称为“首次绘图时间”或“TTFP”)。

由于 Julia 是 JIT 编译的,因此程序首次运行时的执行速度可能比后续运行要慢得多。经验丰富的 Julia 用户会快速学习可用于减少首次运行延迟的工具和技术。

第三个可能的障碍是,其他语言核心库中的一些常用内容在 Julia 中只能作为第三方项目使用。例如,Python 的pathlib库提供了一种面向对象的方式来处理文件路径。在 Julia 中,路径本身被处理为字符串,这使得一些常见的路径操作变得比需要的更加复杂。

Rust

图片

Rust是地球上总体上最热门的新语言之一,值得一提的是它在数据科学领域的影响力日益增强。

Rust 允许开发人员编写运行速度快、使用真正的并行性、内存安全且可避免各种错误的数据科学工具,所有这些功能在处理大规模数据时都非常的重要。

现在,许多数据科学家可能已经使用过 Rust 开发的工具。

比如,用于数据框的Polars库是用 Rust 编写的,可以在包括 Python 在内的许多其他语言中使用。但 Rust 的原生包集合(称为“crates”)也使数据科学工作能够直接在该语言中进行。ndarray crate 提供了强大的矩阵数学工具,大致类似于 Python 中的 NumPy。plotters crate可以渲染图表和图形。evcxr_jupyter项目提供了一个 Jupyter 内核,用于在笔记本环境中使用 Rust。

与使用 Python 或 Julia 相比,从 Rust 项目生成可再分发的二进制文件会更加容易,这对于数据科学而言是一个显著的优势。与仅创建项目相比,Rust 使创建数据科学工具(如 Polars)也变得更加容易。

Rust 对正确性和内存安全性的坚持既是其宝贵的功能,也是其最大的缺点。

Python(还有 Julia)用执行速度换取开发速度,而 Rust 则恰恰相反。Rust 的学习曲线比 Python 或 Julia 更加陡峭,编写 Rust 程序比编写 Python 或 Julia 程序需要更长的时间。

这使得 Rust 不太适合需要在短时间内制作原型项目,但更适合正确性和安全性更重要的工作。Rust 的安全特性使其成为开发数据科学库或公共应用程序的理想选择,但对于仅供内部使用的项目,它可能不是您的最佳选择。

结语


由于 Python 的支持范围广泛并且整体功能强大,选择 Python 进行数据科学开发几乎不会出错,尽管与其他解决方案相比,它可能需要做更多工作才能成为最快或最可重新分发的选择。


Julia 是专为数据科学而构建的,它实现了以更少的整体工作量实现更快的速度,但重新分发独立的 Julia 程序也很困难。


Rust 的速度和正确性无与伦比,这也是为什么它成为许多常见数据科学工具的首选语言。但对于需要快速迭代或快速原型设计的项目来说,它并不是最佳选择。


通过以上内容,相信各位能够了解和有效选择数据科学的三种语言了~

作者:聆听音乐的鱼

评论