对于码农来说,关注的永远是新近有什么流行的、既能解决问题又好用的利器。本文就为你盘点十大新开源Python库。
更多Python视频、源码、资料加群683380553免费获取
第一名非它莫属,这个工具2017年初才发布,但它已经能够影响每个Python开发者的工作流了,更别提现在连Python.org都官方推荐它作为支持库的管理工具!
Pipenv最开始不过是大神Kenneth Reitz搞的周末项目,本意是将npm或yarn这些包管理器的闪光点引入Python世界。别管什么安装virtualenv、virtualenvwrapper,管理requirements.txt文件,更别提根据支持库的版本来确保复用性了。有了Pipenv,再也不需要用命令来增加、删除或更新支持库了,一个Pipfile文件就能搞定所有的支持库。这个工具会生成一个Pipfile.lock文件,确保编译的库都是最终版,还能避免因为漏掉一些边边角角的支持库而导致的bug。
当然,Pipenv还有其他不少好功能,并且它的文档也很赞。赶紧去了解一下,用它来支持你的Python项目吧,我们已经在Tryolabs上用上啦:)
要说2017年深度学习社区里面哪个库实现了大爆发,那必须是PyTorch,这个深度学习框架是Facebook 2017年才推出的。
PyTorch是基于流行一时的Torch框架构建和改进的,与Lua相比,它是基于Python的。近几年,越来越多的人开始用Python开展数据科学工作,PyTorch让深度学习变得更加平易近人了。
值得注意的是,采用了全新动态计算图范式的PyTorch已经成为很多研究者的专用框架之一。使用TensorFlow、CNTK和MXNet等框架写代码时,必须先定义计算图,这个计算图指定了代码运行的所有操作,随后在框架中进行编译与优化,使它能进行GPU并行处理,运算速度更快,这种范式被称为静态计算图。它的好处在于可以利用各种优化,而且,因为构建与执行是分开进行的,此图一旦被构建即可在不同设备上运行。然而,对于诸如自然语言处理等任务,其工作量是可变的。将图片应用于算法前,可以将图片调整为固定尺寸,但是无法将不同长度的句子进行类似的处理。PyTorch和动态图的又是在于可在代码中使用标准Python控制指令,在执行指令时定义动态图,这就给了你更多自由,对于多任务,这点至关重要。
和其他现代深度学习框架一样,PyTorch还可以进行梯度计算,它的运行速度极快,还可以扩展,既然如此,干嘛不试试?
听上去有点不可思议,但是Facebook 2017年还发布了另一款重磅深度学习框架。
多年前,Caffe框架就已被广泛应用,并以无可比拟的性能和实战检测的代码库著称。然而,深度学习的最新趋势使得这个框架在某些方向陷入了停滞。Caffe2试图将Caffe引入现代世界。
它支持分布式训练及部署,包括多种移动平台、最新的CPU与CUDA适配的硬件。PyTorch更适合研究,Caffe2则适用于Facebook那种大规模部署。
还可以了解一下ONNX(微软与Facebook共同推出的开源项目,全称为Open Neural Network Exchange)近期的努力。用PyTorch构建和训练模型,再用Caffe2进行部署!是不是挺棒?
2016年,Arrow荣登本榜,这个库是为了让Python处理datetimes更简单。2017年,轮到Pendulum了。
Pendulum的一大优势是内嵌式取代Python的datetime类,可以轻易地将它整合进现有代码,并且可以在需要它的时候才进行调用。作者精心调校了时区,确保时区的正确,还让每个实例都对时区敏感,并且默认使用UTC。还有就是提供了扩展的timedelta,使datetime计算更加容易。
与现有的其他库不同,它提供了一个可预测行为的API,这样就可以知道后面会发生什么。如果你正开发使用datetimes的复杂项目,这个库能让你更轻松!想要了解更多,请查阅文档。
从事数据科学工作,少不了使用Pandas、scikit-learn这些Python生态系统中的利器,还有就是控制工作流的Jupyter Notebooks,没的说,你和同事都爱用。但是,要想将工作成果分享给不会用这些工具的人,那该怎么办?怎么才能构建一个人人能够轻松上手的界面,来操控数据和可视化?以前,为实现这一目的,需要一个精通Javascript的前端专职团队来搭建GUI,以后就用不着啦。
2017年发布的Dash是一个在纯Python环境中构建数据可视化网站应用的开源库。基于Flask、Plotly.js和React构建,提供抽象层,无需学习上述框架即可快速上手开发。它在浏览器中渲染和响应,因此适用移动端。
如果你想知道Dash都能实现什么效果,这个样例库可以让你大饱眼福。
很多Python库都适用于数据科学和机器学习,但当数据点是随着时间进化的矩阵时,比如股价或从设备获取的测量数据等,这就是另一回事儿了。
PyFlux是专门处理时间序列的Python开源库。时间序列是统计学与计量经济学的子域,其目标是描述时间序列行为(主要是关于潜在成分或利息特征),并且预测未来它们如何演化。
PyFlux允许通过概率方式进行时间序列建模,并且实现了几个像GARCH这样的现代时间序列模型。是个不错的好东西。
做项目的时候经常需要制作命令行界面(Command Line Interface~CLI)。除了传统的argparse,Python还有类似click或docopt等工具。谷歌今年发布的Fire,使用另一个视角来解决同样的问题。
Fire是一个为任意Python项目自动生成命令行界面的开源库。请注意,重点是自动构建命令行界面,基本上不需要再写代码或文档说明啦。只需要调用一个Fire方法,把它传输给需要生成命令行界面的内容即可,比如,函数、对象、类、字典,就算没有参数都可以,这样Fire就会为所有代码生成一个命令行界面(CLI)。
请仔细阅读此指南,通过例子理解它如何运作。密切关注这个库,它绝对能给你节省不少时间。
理想状态下,我们有均衡的数据集可以用来训练模型,一切都很如意。可惜,真实世界不是这样的,现实任务更多是非均衡数据。比如,在预测伪造信用卡交易时,预期超过99.9%的绝大多数交易是合法的。如果只是训练朴素机器学习算法会让你很糟心,因此需要格外关注这类数据集。
好在这个问题已经解决了,还有各种不同的技术解决方案。Imbalanced-learn 这个Python包提供了多种技术解决方案,可以让开发工作变得更轻松。它与scikit-learn兼容,并且是scikit-learn-contrib项目的一部分。有用!
一般来说,查找或替换文本可以使用正则表达式。正则表达式能妥妥的完成这项任务。但是,需要查找几千个术语时,正则表达式就慢死了。
FlashText能够更好地解决这个问题。在作者最初的基准测试中,它大幅提高了整个操作运行时间,从5天缩减到5分钟。
FlashText的美妙之处在于不论查找多少术语,其运行时间都是一样的,而正则表达式的运行时间则会随着术语数量的增加而线性增加。
FlashText证明了算法和数据结构设计的重要性,由此可知,即便是简单的问题,更好的算法也可以比更强的CPU有效。
声明:本库是由Tryolab的研发中心开发的。
当今世界图片满天飞,一些应用急需理解这些图片的内容。多亏深度学习技术的发展,图像处理技术也取得了长足的进步。
Luminoth是基于TensorFlow和Sonnet构建的一个处理计算机视觉的Python工具箱。目前,它通过快速R-CNN模型支持对象检测。
Luminoth不仅实现了这个特定模型,它还是基于模块化构建的,可以扩展。因此,自定义现有组件或结合新的模型来解决复杂问题是可行的,好好复用这些代码吧。在构建深度学习模型时,它提供了必要的开发工具:转换图像数据为适用的格式,以供数据管道(TensorFlow的tfrecords)处理,进行数据增强,在一个或多个GPU上进行训练(在处理大型数据集时,必须使用分布式训练)。运行评估指标,轻松地在TensorFlow中实现可视化,通过简单的API或浏览器界面部署训练模型,供人操作。
还有,Luminoth可以很简单地整合谷歌云的机器学习引擎,就算你没有强大的GPU,也可以和在本机一样,轻松一个指令就能在云端进行模型训练。
可能你从没听说过libvips这个库。这么说吧,它是个像Pillow或ImageMagick这样的图像处理库,并且支持很多图片格式。然而,和其他库相比,libvips更快,占用内存更少。比如说,基准测试显示它比ImageMagick快3倍,占用内存仅为1/15。有关libvips的优势,请点此查阅。
PyVips是近期发布的Python版libvips,兼容Python2.7和3.6,还有PyPy。使用pip安装,内嵌式兼容绑定的老版本,无需修改代码。
如果在APP中进行图像处理,那一定要关注它。
声明:本库为Tryolabs发布。
有时,你可能会在网上实现一些自动化操作。比如抓取网站,进行应用测试,或在网上填表,但又不想使用API,这时自动化就变得很必要。Python提供了非常优秀的Requests库,可以辅助进行这些操作。可惜,很多网站采用基于JavaScript的重客户端,这就意味着Requests获取的HTML代码中,根本就没有想要用于自动化操作的表单,更别提自动填表了!它取回的基本上都是React或Vue这些现代前端库在浏览器中生成的空DIV这类的代码。
可以通过反向工程处理JavaScript生成的代码,但是这需要花几个小时来编译,处理这些丑陋的JS代码。谢谢,还是算了吧。还有一个方法就是使用Selenium库,允许以程序化的方式和浏览器进行交互,并运行JavaScript代码。用了这个库就没啥问题了,但是它比占用资源很少的Requests慢太多了。
如果能以Requests为主,只有在需要Selenium的时候才无缝调用,这样不是更好?看看Requestium吧,它以内嵌方式取代Requests,而且干的不错。它还整合了Parsel,用它编写的页面查询元素选择器代码特别清晰。它还为诸如点击元素和确保在DOM中渲染内容这些通用操作提供了帮助。又一个网页自动化省时利器!
喜欢scikit-learn的API,但又得用PyTorch来进行工作?别担心,skorch这个打包器为PyTorch提供了像sklearn一样的界面。只要你熟悉这些库,就会觉得它的句法直白易懂。有了skorch,就可以将一些代码抽象化,从而把精力集中在真正重要的事上,比如干点儿数据科学。
你喜欢那个呢?