Python 2015年度十佳第三方库
新的一年就要到来,我们常常会坐下来回想一下,在 2015 年我们都完成了些什么。如果没有开源社区的出色工作,提供了这些稳健的库,我们很多项目是无法完成的。
似乎很多人都在搞 Top10 排名,我们也来做一个自己的排名。下面是我们在 2015 年使用过 Python 库的十大排名,排名不分先后。我们尽量避开已经被广泛接受的库,例如 Django、Flask、Django Rest Framework 等,介绍一些可能不是那么出名的库。系好安全带,老司机要开车了!
1. jupyter
如果画家无法立即看到他作画的内容,这对画家来说可真是太难了。『Jupyter Notebooks』 让我们更容易与代码、绘图和结果进行交互,它正逐渐成为一款数据科学家们所喜爱的工具。这些 Notebook 是结合了实时代码(live code)和说明文档的文档。由于这个原因,它可以快速创建原型或者教程。
虽然我们只使用 Jupyter 来写 Python,不过它最近增加了对不少编程语言的支持,例如 Julia 或者 Haskell。
2. retrying
『Retrying』库可以帮你避免重复劳动:它实现了『重试』行为。它提供了一个通用的 decorator,这个 decorator 可以很容易给方法增添重试的能力,而且还可以设置一系列的属性,如最大重试次数、延时、退避休眠(backoff sleeping)和错误条件(error conditions)等,以此来获得你想要的重试行为。简单轻便。
3. aiohttp
2015年有很多非常重要的库都被移植到 Python 3,所以我们也要开始拥抱它了。在使用协程写并发代码的时候,我们非常喜欢用 asyncio,所以需要一个使用相同并发模式的 HTTP 客户端(比如 requests )和服务器。而『aiohttp』就是这样一个库,它为 asyncio 提供了简洁易用的 HTTP 客户端和服务器。
4. plumbum
为了在 Python 程序中调用其他脚本或者可执行程序,我们尝试过很多『subprocess』的封装,但『plumbum』模式很轻松就击败了它们。它提供了非常易用的语法,可以轻松地以跨平台的方式执行本地或者远程命令,获取输出或者错误代码。如果这还不够,你还可以组合它们(shell 管道的方式),而且它还提供了创建命令行应用的接口。试试吧!
5. phonenumbers
处理和验证电话号码是一件非常痛苦的事情,因为需要考虑一大堆国际前缀和区域码,还可能遇到某个国家的特殊情形。这个叫做 『phonenumbers』的 Python 库,是从 Google 的『libphonenumbers』库移植而来,后者极大的简化了这项工作。它可以用来解析、格式化或者验证电话号码,而且需要写的代码非常少。最重要的是,『phonenumbers』可以判断一个电话号码是否是唯一的(遵照 E.164 格式)。它同时支持 Python 2 和 Python 3。
我们已经在很多项目中广泛使用这个库了,主要是调整 django-phonenumber-field ,用它来解决这个经常遇到的枯燥问题。
6. networkx
在很多任务中,图形和网络是非常常用的工具,比如组织数据、显示它们的流动或者展示实体之间的关联。『NetworkX』允许创建、操作图形和网络,它所使用的算法很容易拓展,并且在处理大型图形时非常理想。除此之外,它提供了很多对图形进行着色的选项,这也让它变成了一种非常棒的可视化工具。
7. influxdb
如果你要按照时间顺序储存一批数据,那你一定要考虑一下用 InfluxDB 。InfluxDB 是一个时间序列数据库,我们用它来储存不同时间的测量值。通过 RESTFul API(译注: REST ,表现层状态转化,是一种软件架构风格,目前主流的 Web 服务实现方案之一,符合 REST 设计风格的 Web API 称为 RESTful API),它变得极其易用而且高效,这在处理海量数据时是非常必要的。另外,由于其内建了聚类功能,因此对数据的检索和分组也变得十分轻松。这个官方的客户端通过 API 调用抽象掉了大部分工作,不过我们也确实希望它能再改进一下,不要直接写 JSON,而是使用查询这种更符合 Python 风格的方式。
8. elasticsearch-dsl
如果你曾经用过 Elasticsearch ,那你想必被那些特别长的 JSON 格式的查询摧残过,而且把大把的时间浪费在了检查哪里有解析错误上。『Elasticsearch DSL』是一个建立在 Elasticsearch 官方客户端基础之上的客户端,它让你不必再为 JSON 担心:你只需要用一个 Python 类或者类 queryset 表达式把需要的东西写好。同时它还提供了将文档转换成 Python 对象、映射等的接口。
9. keras
深度学习是一个新的趋势,这正是『keras』的闪光点。它可以在 Theano 之上运行,并且可以利用多种神经网络架构进行快速实验。它极其精简而且高度模块化,可以在 CPU 和 GPU 上无缝运行。类似『keras』这样的库是我们在 2015 年处理 R&D 项目的关键所在。
10. gensim
如果你对 NLP(自然语言处理)很感兴趣却从没有听说过『Gensim』……火星人你好。它提供了一些常用算法,例如 tf-idf、word2vec、doc2vec、LSA 等的快速、可拓展(内存无关)实现,同时还提供了简单易用的借口和完善的文档。
福利: MonkeyLearn Python
最后,还有绝对不能错过的 MonkeyLearn 。这是 Tryolabs 公司的产品的一个分支,它通过简单易用的 RESTFul API 提供了云端的文本挖掘功能。通过它你可以对文本有更加深入的理解,比如文字中的情感、最重要的关键字,可以对文本进行话题检测,还可以使用自定义的文本分类器进行其他任何处理。『MonkeyLearn Python』是这个 API 的官方 Python 客户端,同时支持 Python 2 和 Python 3。