如果您想使用甚至掌握数据分析技能的话,Python/ target=_blank class=infotextkey>Python一定是您的最佳选择。它不但容易被学习,而且具有广泛且活跃的社区支持。目前,大多数数据科学库、以及机器学习框架,都能够提供Python接口。
在过去的数月中,不少用于数据科学的Python项目,都相继发布了针对主要功能的更新版本。它们有些是关乎实际数字运算;有些则是让开发者能够更轻松、更快速地编写出针对数据科学的任务代码。下面,让我们来讨论其中最为典型的6种Python工具。
由于NumPy能够为Python用户提供快速而强大的数学库,因此SciPy使用NumPy来为常见的、面向数学和数据科学的编程任务提供各种代码库。其中包括:线性代数、统计工程、以及信号处理等方面。
SciPy如何协助数据科学
作为便捷且被广泛使用的数学和统计工具,SciPy长期以来停留在1.0版本上。当然,该版本具有很强的跨版本向后兼容性。
根据其核心开发人员--Ralf Gommers的说法,SciPy项目的1.0版不但整合了项目的治理和管理方式,而且包含了一个与macOS和windows的不同的持续集成过程,以及对预构建的Windows二进制文件的适当支持。这就意味着,Windows用户可以直接使用SciPy,而无需考虑额外的环节。
自2017年发布1.0版本以来,该项目已经交付了七个主要版本,它们持续在如下方面进行改进与优化:
从哪里下载SciPy
我们既可以从GitHub的链接处获得源代码,又可以从Python Package Index的链接处,下载SciPy的二进制文件,然后在命令行中输入“pip install sciPy”以完成安装。
Numba允许通过LLVM(Low Level Virtual Machine,低级虚拟机)编译器框架,将Python函数或模块编译为汇编语言,以便随时运行Python程序。在此方面,Numba与Cython(不但可以被Python调用,而且能够让被加速的代码更易于分发给第三方,下文会详细讨论)极其相似。当然,Numba会更易于使用。
Numba如何协助数据科学
Numba帮助数据科学家的方式主要体现在,它加速了编写Python的各项操作。也就是说,您可以使用纯Python,对项目进行原型设计,然后使用Numba对其进行注释,以便快速地投入生产环境。
同时,Numba也可以快速地运行在那些为机器学习和数据科学应用所构建的硬件上。Numba的早期版本曾可以支持编译出CUDA(Compute Unified Device Architecture)加速代码。不过其最新版本则采用了新的、更为高效的GPU代码缩减算法。它不但能够加快编译速度,还支持Nvidia CUDA和AMD ROCm的API。
此外,Numba还可以通过优化JIT编译函数,以实现跨CPU内核的并行执行。当然,您的代码需要添加一些额外的语法,才能正确地完成。
从哪里下载Numba
我们既可以从GitHub的链接处获得源代码,又可以在Python Package Index的链接处下载Numba,然后在命令行中输入“pip install numba”以完成安装。其预构建的二进制文件可以支持Windows、MacOS、以及通用的linux。此外,它还被当作了Anaconda Python发行版的一部分。用户可以在命令行中输入“conda install numba”以完成安装。
Cython是将Python代码转换为可以更快地运行、大数量级的C语言代码。这种转换对于重数学量(math-heavy)的代码、或是在各种紧密循环中运行的代码,都非常方便。值得一提的是,这两种情况在为工程、科学、以及机器学习编写的Python程序中,也是十分常见的。
Cython如何协助数据科学
从本质上说,Cython代码实际上是带有一些额外语法的Python代码。这些Python代码不但可以被Cython编译成C语言,而且能够通过使用Cython的类型注释,让其性能得到了几十倍、甚至几百倍的改进。
在Cython 3出现之前,Cython使用的是0.xx的版本编号方案。不过,Cython 3不再支持Python 2的语法了。尽管Cython 3目前仍处于测试阶段,但是已有Cython的拥护者强烈建议人们使用该版本,去代替其早期的版本。同时,鉴于Cython的许多(尽管不是全部)函数都可以使用与Python完全兼容的语法,因此Cython 3强烈建议用户更多地去使用“纯Python”模式。
同时,Cython还支持与IPython和Jupyter notebooks的集成。由Cython编译的代码,可以通过内联注释的方式,在Jupyter notebooks中被使用,就像使用Python代码一样。
此外,您还可以在启用了配置文件引导优化(profile-guided optimization)的情况下,为Jupyter编译Cython模块。使用该方式构建的模块,可以根据其生成的分析信息,进行各种快速的编译和优化。值得注意的是,该方式仅能够在与GCC编译器共同使用时,被Cython所使用。而微软的VC环境尚对此并不支持。
从哪里下载Cython
我们既可以从GitHub的链接处获得源代码,又可以在Python Package Index的链接处下载Cython,然后在命令行中输入“pip install cython”以完成安装。其二进制文件可以支持包括32位和64位的Windows、通用的Linux、以及MacOS。值得注意的是,您的系统平台上必须已安装了C预言编译器,方可使用Cython。
近年来,我们的硬件处理能力虽然比以往任何时候都强大,可关键问题是,我们将如何通过横跨多个CPU内核、物理处理器、以及计算节点的方式,以最高效率完成数据科学的相关计算任务。
对此,Dask工具能够接受一项Python作业,并在多个系统之间有效地予以调度。由于那些被用于启动Dask作业的语法、与在Python中用于执行其他各项操作的语法几乎相同,因此我们在使用Dask时,几乎无需对现有的代码进行任何修改。
Dask如何协助数据科学
Dask能够为Python中许多流行的机器学习、以及科学计算库,提供了各种自有版本的接口。例如,它的DataFrame对象能够与Pandas库中的相同,它的Array对象则可以与NumPy的相一致。可见,您只需针对Dask修改几行代码,即可来快速兼容现有的代码。
同时,Dask不但允许并行地写入纯Python的作业,而且其Bag等对象类型,也能够优化诸如:map、filter、以及groupby等通用Python对象集合的操作。
从哪里下载Dask
我们既可以从GitHub的链接处获得源代码,又可以在Python Package Index的链接处下载Cython,然后在命令行中输入“pip install dask”以完成安装。此外,作为Anaconda Python发行版的一部分,用户还可以在其命令行中输入“conda install dask”,以完成安装。
根据NumPy或Pandas的数据帧格式,Vaex允许用户对大型表格的数据集(例如有数十亿行的数据量),通过执行lazy操作,以零数据复制、最少的内存使用量、以及内置的可视化工具等方式,高效地完成各项操作。
Vaex如何协助数据科学
在Python中,处理大型数据集,特别是只涉及数据的某个子集(例如,表中的一列)时,通常会耗费大量的内存、以及处理能力。而Vaex则能够根据实际需要,以按需的方式执行计算,从而充分地利用好有限的可用计算资源。
从哪里下载Vaex
我们可以在Python Package Index的链接处下载Cython,然后在命令行中输入“pip install vaex”以完成安装。值得注意的是,为了获得最佳的效果,您既可以在虚拟环境中安装Vaex,又可以直接使用Python的Anaconda发行版。
作为高性能分析工具包,Intel的可扩展数据帧编译器(Scalable Dataframe Compiler,SDC)是一个针对数据分析、以及加速集群机器学习的实验项目。它使用Open MPI项目中的mpirun的实用程序,将Python的子集编译为代码。这些代码可以在集群之间自动实现并行化。
Intel SDC如何协助数据科学
作为一个使用Python编写的、基于编译器的大数据框架, HPAT用到了前面提到的Numba。不过与Cython不同的是,它并不会按照原样去编译Python。相反,它用到了Python语言的受限子集:NumPy数组和Pandas数据帧,并通过对其优化,以实现横跨多个节点的运行。
与Numba类似,HPAT自带有@jit装饰器(decorator),可以将特定功能转化到优化的代码中。此外,它还包含了一个可用于读取和写入HDF5(并非HDFS)文件的本地 I/O模块。
从哪里下载Intel SDC
我们可以从GitHub的链接处获得源代码。不过SDC并未提供对应的二进制文件。