新年到来时,我们常常会坐下来回想一下,过去一年我们都完成了些什么。如果没有开源社区的出色工作,提供了这些稳健的库,我们很多项目是无法完成的。
似乎很多人都在搞 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。