技术 | 人生苦短,请用Python——10大Python库汇总

2018-04-03 16:01:41 浏览数 (1)

前言

对于码农来说,主要关注2017年新推出了哪些开源库,还有就是新近有什么流行的既能解决问题又好用的利器。下面就来为2017年做个总结。

1、Pipenv

第一名非它莫属,这个工具年初才发布,但它已经能够影响每个Python开发者的工作流了,更别提现在连Python.org都官方推荐它作为支持库的管理工具!

Pipenv最开始不过是大神Kenneth Reitz搞的周末项目,本意是将npm或yarn这些包管理器的闪光点引入Python世界。别管什么安装virtualenv、virtualenvwrapper,管理requirements.txt文件,更别提根据支持库的版本来确保复用性了(点击此处了解更多)。有了Pipenv,再也不需要用命令来增加、删除或更新支持库了,一个Pipfile文件就能搞定所有的支持库。这个工具会生成一个Pipfile.lock文件,确保编译的库都是最终版,还能避免因为漏掉一些边边角角的支持库而导致的bug。

当然,Pipenv还有其他不少好功能,并且它的文档也很赞。赶紧去了解一下,用它来支持你的Python项目吧,我们已经在Tryolabs上用上啦:)

2、PyTorch

要说今年深度学习社区里面哪个库实现了大爆发,那必须是PyTorch,这个深度学习框架是Facebook今年才推出的。

PyTorch是基于流行一时的Torch框架构建和改进的,与Lua相比,它是基于Python的。近几年,越来越多的人开始用Python开展数据科学工作,PyTorch让深度学习变得更加平易近人了。

值得注意的是,采用了全新动态计算图范式的PyTorch已经成为很多研究者的专用框架之一。使用TensorFlow、CNTK和MXNet等框架写代码时,必须先定义计算图,这个计算图指定了代码运行的所有操作,随后在框架中进行编译与优化,使它能进行GPU并行处理,运算速度更快,这种范式被称为静态计算图。它的好处在于可以利用各种优化,而且,因为构建与执行是分开进行的,此图一旦被构建即可在不同设备上运行。然而,对于诸如自然语言处理等任务,其工作量是可变的。将图片应用于算法前,可以将图片调整为固定尺寸,但是无法将不同长度的句子进行类似的处理。PyTorch和动态图的又是在于可在代码中使用标准Python控制指令,在执行指令时定义动态图,这就给了你更多自由,对于多任务,这点至关重要。

和其他现代深度学习框架一样,PyTorch还可以进行梯度计算,它的运行速度极快,还可以扩展,既然如此,干嘛不试试?

3、Caffe2

听上去有点不可思议,但是Facebook今年还发布了另一款重磅深度学习框架。

多年前,Caffe框架就已被广泛应用,并以无可比拟的性能和实战检测的代码库著称。然而,深度学习的最新趋势使得这个框架在某些方向陷入了停滞。Caffe2试图将Caffe引入现代世界。

它支持分布式训练及部署,包括多种移动平台、最新的CPU与CUDA适配的硬件。PyTorch更适合研究,Caffe2则适用于Facebook那种大规模部署。

还可以了解一下ONNX(微软与Facebook共同推出的开源项目,全称为Open Neural Network Exchange”) 近期的努力。用PyTorch构建和训练模型,再用Caffe2进行部署!是不是挺棒?

4、Pendulum

去年,Arrow荣登本榜,这个库是为了让Python处理datetimes更简单。今年,轮到Pendulum了。

Pendulum的一大优势是内嵌式取代Python的datetime类,可以轻易地将它整合进现有代码,并且可以在需要它的时候才进行调用。作者精心调校了时区,确保时区的正确,还让每个实例都对时区敏感,并且默认使用UTC。还有就是提供了扩展的timedelta,使datetime计算更加容易。

与现有的其他库不同,它提供了一个可预测行为的API,这样就可以知道后面会发生什么。如果你正开发使用datetimes的复杂项目,这个库能让你更轻松!想要了解更多,请查阅文档。

5、Dash

从事数据科学工作,少不了使用Pandas、scikit-learn这些Python生态系统中的利器,还有就是控制工作流的Jupyter Notebooks,没的说,你和同事都爱用。但是,要想将工作成果分享给不会用这些工具的人,那该怎么办?怎么才能构建一个人人能够轻松上手的界面,来操控数据和可视化?以前,为实现这一目的,需要一个精通Javascript的前端专职团队来搭建GUI,以后就用不着啦。

今年发布的Dash是一个在纯Python环境中构建数据可视化网站应用的开源库。基于Flask、Plotly.js和React构建,提供抽象层,无需学习上述框架即可快速上手开发。它在浏览器中渲染和响应,因此适用移动端。

如果你想知道Dash都能实现什么效果,这个样例库可以让你大饱眼福。

6、PyFlux

很多Python库都适用于数据科学和机器学习,但当数据点是随着时间进化的矩阵时,比如股价或从设备获取的测量数据等,这就是另一回事儿了。

PyFlux是专门处理时间序列的Python开源库。时间序列是统计学与计量经济学的子域,其目标是描述时间序列行为(主要是关于潜在成分或利息特征),并且预测未来它们如何演化。

PyFlux允许通过概率方式进行时间序列建模,并且实现了几个像GARCH这样的现代时间序列模型。是个不错的好东西。

7、Fire

做项目的时候经常需要制作命令行界面(Command Line Interface~CLI)。除了传统的argparse,Python还有类似click或docopt等工具。谷歌今年发布的Fire,使用另一个视角来解决同样的问题。

Fire是一个为任意Python项目自动生成命令行界面的开源库。请注意,重点是自动构建命令行界面,基本上不需要再写代码或文档说明啦。只需要调用一个Fire方法,把它传输给需要生成命令行界面的内容即可,比如,函数、对象、类、字典,就算没有参数都可以,这样Fire就会为所有代码生成一个命令行界面(CLI)。

请仔细阅读此指南,通过例子理解它如何运作。密切关注这个库,它绝对能给你节省不少时间。

8、imbalance-learn

理想状态下,我们有均衡的数据集可以用来训练模型,一切都很如意。可惜,真实世界不是这样的,现实任务更多是非均衡数据。比如,在预测伪造信用卡交易时,预期超过99.9%的绝大多数交易是合法的。如果只是训练朴素机器学习算法会让你很糟心,因此需要格外关注这类数据集。

好在这个问题已经解决了,还有各种不同的技术解决方案。Imbalanced-learn 这个Python包提供了多种技术解决方案,可以让开发工作变得更轻松。它与scikit-learn兼容,并且是scikit-learn-contrib项目的一部分。有用!

9、FlashText

一般来说,查找或替换文本可以使用正则表达式。正则表达式能妥妥的完成这项任务。但是,需要查找几千个术语时,正则表达式就慢死了。

FlashText能够更好地解决这个问题。在作者最初的基准测试中,它大幅提高了整个操作运行时间,从5天缩减到5分钟。

FlashText的美妙之处在于不论查找多少术语,其运行时间都是一样的,而正则表达式的运行时间则会随着术语数量的增加而线性增加。

FlashText证明了算法和数据结构设计的重要性,由此可知,即便是简单的问题,更好的算法也可以比更强的CPU有效。

10、Luminoth

声明:本库是由Tryolab的研发中心开发的。

当今世界图片满天飞,一些应用急需理解这些图片的内容。多亏深度学习技术的发展,图像处理技术也取得了长足的进步。

Luminoth是基于TensorFlow和Sonnet构建的一个处理计算机视觉的Python工具箱。目前,它通过快速R-CNN模型支持对象检测。

Luminoth不仅实现了这个特定模型,它还是基于模块化构建的,可以扩展。因此,自定义现有组件或结合新的模型来解决复杂问题是可行的,好好复用这些代码吧。在构建深度学习模型时,它提供了必要的开发工具:转换图像数据为适用的格式,以供数据管道(TensorFlow的tfrecords)处理,进行数据增强,在一个或多个GPU上进行训练(在处理大型数据集时,必须使用分布式训练)。运行评估指标,轻松地在TensorFlow中实现可视化,通过简单的API或浏览器界面部署训练模型,供人操作。

还有,Luminoth可以很简单地整合谷歌云的机器学习引擎,就算你没有强大的GPU,也可以和在本机一样,轻松一个指令就能在云端进行模型训练。

如果你对此感兴趣,可以阅读发布博文或观看ODSC上我们的访谈视频来了解更多。

更多优秀库:这些也不错

PyVips

可能你从没听说过libvips这个库。这么说吧,它是个像Pillow或ImageMagick这样的图像处理库,并且支持很多图片格式。然而,和其他库相比,libvips更快,占用内存更少。比如说,基准测试显示它比ImageMagick快3倍,占用内存仅为1/15。有关libvips的优势,请点此查阅。

PyVips是近期发布的Python版libvips,兼容Python2.7和3.6,还有PyPy。使用pip安装,内嵌式兼容绑定的老版本,无需修改代码。

如果在APP中进行图像处理,那一定要关注它。

Requestium

声明:本库为Tryolabs发布。

有时,你可能会在网上实现一些自动化操作。比如抓取网站,进行应用测试,或在网上填表,但又不想使用API,这时自动化就变得很必要。Python提供了非常优秀的Requests库,可以辅助进行这些操作。可惜,很多网站采用基于JavaScript的重客户端,这就意味着Requests获取的HTML代码中,根本就没有想要用于自动化操作的表单,更别提自动填表了!它取回的基本上都是React或Vue这些现代前端库在浏览器中生成的空DIV这类的代码。

可以通过反向工程处理JavaScript生成的代码,但是这需要花几个小时来编译,处理这些丑陋的JS代码。谢谢,还是算了吧。还有一个方法就是使用Selenium库,允许以程序化的方式和浏览器进行交互,并运行JavaScript代码。用了这个库就没啥问题了,但是它比占用资源很少的Requests慢太多了。

如果能以Requests为主,只有在需要Selenium的时候才无缝调用,这样不是更好?看看Requestium吧,它以内嵌方式取代Requests,而且干的不错。它还整合了Parsel,用它编写的页面查询元素选择器代码特别清晰。它还为诸如点击元素和确保在DOM中渲染内容这些通用操作提供了帮助。又一个网页自动化省时利器!

skorch

喜欢scikit-learn的API,但又得用PyTorch来进行工作?别担心,skorch这个打包器为PyTorch提供了像sklearn一样的界面。只要你熟悉这些库,就会觉得它的句法直白易懂。有了skorch,就可以将一些代码抽象化,从而把精力集中在真正重要的事上,比如干点儿数据科学。

文章来源: Python爱好者社区

文章编辑:天天

0 人点赞