愉快地迁移到 Python 3

为数据科学家准备的 Python 3 特性指南

Python 已经成为机器学习和一些需处理大量数据的科学领域的主流语言。它支持了许多深度学习框架和其他已确立下来的数据处理和可视化的工具集。

然而,Python 生态系统还处于 Python 2 和 Python 3 并存的状态,且 Python 2 仍然被数据科学家们所使用。从 2019 年底开始,系统工具包将会停止对 Python 2 的支持。对于 numpy,2018 年之后任何更新将只支持 Python 3

为了让大家能够顺利过渡,我收集了一系列 Python 3 特性,希望对大家有用。

图片来源于 Dario Bertini post (toptal)

使用 pathlib 更好的对路径进行处理

pathlib 是 Python 3 中的默认模块,能帮你避免过多的使用 os.path.join:

在之前的版本中总是不可避免的使用字符串连接(简洁但明显可读性很差),如今使用 pathlib 后,代码会更安全、简洁、易读。

同时 pathlib.Path 提供了一系列方法和特性,这样一来 python 的初学者就不需搜索了:

pathlib 会节省你大量的时间,具体用法请参考 文档 和 说明

类型提示现在是 Python 的一部分啦

Pycharm 中类型提示示例:

Python 已不再是一个小型的脚本语言了,如今的数据处理流程包含许多步骤,每步涉及不同的构架(而且有时会涉及不同的逻辑)

引入类型提示功能有助于处理日渐复杂的程序,因此机器就可以帮助实现代码验证。而以前是不同的模块需使用自定义的方式在文档字符串(doctrings)中指定类型(提示:pycharm 能够将旧的 doctrings 转换为新的 Type hinting)。

下图是一个简单的例子,这段代码对不同类型的数据均有效(这正是我们喜欢 Python 数据栈的原因)。

这段代码样例适用于 numpy.array(含多维数组)、astropy.Table 及 astropy.Column、bcolz、cupy、mxnet.ndarray 等。

这段代码可用于 pandas.Series,但方式不对:

这还仅是两行代码。想象一下一个复杂系统的行为将是多么的难以预测,仅因一个函数就有可能行为失常。在大型系统中,明确各类方法的期望类型是非常有帮助的,这样会在函数未得到期望的参数类型时给出警告。

如果你有重要的代码库, MyPy 这样的提示工具很可能成为持续集成途径的一部分。由 Daniel Pyrathon  发起的名为“让类型提示生效”的在线教程可为您提供一个很好的介绍。

旁注:不幸的是,类型提示功能还未强大到能为 ndarrays 或 tensors 提供细粒度分型,但是或许我们很快就可拥有,这也将是 DS 的特色功能。

类型提示→运行中的类型检查

在默认情况下,函数注释不会影响你代码的运行,但也仅能提示你代码的目的。

然而,你可以使用像 enforce 这样的工具在运行中强制类型检查,这有助你调试(当类型提示不起作用时会出现很多这样的情况)。

函数注释的其他惯例

如前所述,函数注释不会影响代码的执行,但是它可提供一些供你随意使用的元信息(译者注:关于信息的信息)。

例如,计量单位是科学领域的一个常见问题,astropy 包能够提供一种简单装饰器来控制输入量的单位并将输出量转换成所需单位。