【译Py】2017年10大Python库

简介: 原文作者:Tryolabs  原文链接年底啦,又该交年终总结了。对于码农来说,当然是关注今年新推出了哪些开源库,还有就是新近又有什么又流行又好用的好东西啦。
img_0a391e323af9b3034ade3b2be04a8c7d.png

原文作者:Tryolabs  原文链接

年底啦,又该交年终总结了。对于码农来说,当然是关注今年新推出了哪些开源库,还有就是新近又有什么又流行又好用的好东西啦。

前两年,我们在博客贴出了Python社区里流行的好作品。现在,为2017年做个总结。

这次的榜单充满了浓浓的机器学习风,请非机器学习库的大神见谅,不过,这次我们确实有点儿偏心:)。为了公平起见,请大家在评论区为本文没有提及的优秀软件摇旗呐喊吧。

废话少说,干货来了!

1Pipenv

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

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

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

2PyTorch

img_d8908330a1c17ccebbca28c0881939a5.png

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

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

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

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

3Caffe2

img_84c2c7569c98e1b797fa091047a3b31e.png

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

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

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

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

4Pendulum

img_3dfef651f0287dc634320d33b9ba8e03.png

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

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

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

5Dash

img_c7d3467e99948a62095bce3baf969ed3.png

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

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

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

6PyFlux

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

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

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

7Fire

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

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

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

8imbalance-learn

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

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

9FlashText

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

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

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

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

10Luminoth

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

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

Luminoth是基于TensorFlow和Sonnet构建的计算机视觉处理工具箱。目前,它通过快速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,就可以将一些代码抽象化,从而把精力集中在真正重要的事上,比如干点儿数据科学的事儿。

结论

今年!如果你认为还有别的库也可以上榜,赶紧在去评论区里发表意见吧,这世界变化太快,我们也有些跟不上潮流啦。最后,再次感谢社区中每个人所做的贡献!

最后,别忘了订阅我们的简报,不要错过我们的机器学习内容哦。

相关文章
|
1月前
|
调度 开发者 Python
Python中的异步编程:理解asyncio库
在Python的世界里,异步编程是一种高效处理I/O密集型任务的方法。本文将深入探讨Python的asyncio库,它是实现异步编程的核心。我们将从asyncio的基本概念出发,逐步解析事件循环、协程、任务和期货的概念,并通过实例展示如何使用asyncio来编写异步代码。不同于传统的同步编程,异步编程能够让程序在等待I/O操作完成时释放资源去处理其他任务,从而提高程序的整体效率和响应速度。
|
1月前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
68 0
|
22天前
|
XML 存储 数据库
Python中的xmltodict库
xmltodict是Python中用于处理XML数据的强大库,可将XML数据与Python字典相互转换,适用于Web服务、配置文件读取及数据转换等场景。通过`parse`和`unparse`函数,轻松实现XML与字典间的转换,支持复杂结构和属性处理,并能有效管理错误。此外,还提供了实战案例,展示如何从XML配置文件中读取数据库连接信息并使用。
Python中的xmltodict库
|
29天前
|
数据库 Python
异步编程不再难!Python asyncio库实战,让你的代码流畅如丝!
在编程中,随着应用复杂度的提升,对并发和异步处理的需求日益增长。Python的asyncio库通过async和await关键字,简化了异步编程,使其变得流畅高效。本文将通过实战示例,介绍异步编程的基本概念、如何使用asyncio编写异步代码以及处理多个异步任务的方法,帮助你掌握异步编程技巧,提高代码性能。
59 4
|
29天前
|
API 数据处理 Python
探秘Python并发新世界:asyncio库,让你的代码并发更优雅!
在Python编程中,随着网络应用和数据处理需求的增长,并发编程变得愈发重要。asyncio库作为Python 3.4及以上版本的标准库,以其简洁的API和强大的异步编程能力,成为提升性能和优化资源利用的关键工具。本文介绍了asyncio的基本概念、异步函数的定义与使用、并发控制和资源管理等核心功能,通过具体示例展示了如何高效地编写并发代码。
35 2
|
1月前
|
数据采集 JSON 测试技术
Python爬虫神器requests库的使用
在现代编程中,网络请求是必不可少的部分。本文详细介绍 Python 的 requests 库,一个功能强大且易用的 HTTP 请求库。内容涵盖安装、基本功能(如发送 GET 和 POST 请求、设置请求头、处理响应)、高级功能(如会话管理和文件上传)以及实际应用场景。通过本文,你将全面掌握 requests 库的使用方法。🚀🌟
60 7
|
1月前
|
开发者 Python
Python中__init__.py文件的作用
`__init__.py`文件在Python包管理中扮演着重要角色,通过标识目录为包、初始化包、控制导入行为、支持递归包结构以及定义包的命名空间,`__init__.py`文件为组织和管理Python代码提供了强大支持。理解并正确使用 `__init__.py`文件,可以帮助开发者更好地组织代码,提高代码的可维护性和可读性。
31 2
|
1月前
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
40 3
|
1月前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
40 2
|
28天前
|
数据采集 数据可视化 数据挖掘
利用Python进行数据分析:Pandas库实战指南
利用Python进行数据分析:Pandas库实战指南