2017最流行的十大Python库
2018年01月01日 由 yuxiangyu 发表
86617
0
年末是你需要思考过去一年的成就的时候。对于程序员来说,这通常是回顾今年发布的或者最近流行的开源库,因为它们是解决特定问题的绝佳工具。
在过去的两年中,我们都会在博客中选取我们认为在Python社区最有用的库。今年也是如此。
这一次,这份列表基本都是机器学习(ML)的库。请非ML库的作者而且能够谅解,这都怪我们的偏见。希望在读到本文的人能评论并提出一些被我们忽略的伟大的库帮助我们矫正它。
那么,让我们开始盘点吧!
链接:https://github.com/pypa/pipenv
我们为今年年初发布的这个工具排到榜首,它有能力影响每个Python开发者的工作流程,它已经成为Python管理依赖项的官方推荐工具。
https://packaging.python.org/tutorials/managing-dependencies/#installing-pipenv
Pipenv最初是由
Kenneth Reitz创立的一个
周末项目,旨在将其他包管理者(如
npm或
yarn)的创意带入Python中。不再去安装
virtualenv,
virtualenvwrapper,管理requirements.txt文件,并确保对依赖项的依赖版本的再现性(https://www.kennethreitz.org/essays/a-better-pip-workflow)。使用Pipenv,你可以在Pipfile中指定所有的依赖关系(通常使用命令添加,删除或更新依赖关系)。该工具可以生成一个Pipfile.lock文件,使你的构建deterministic,帮助你避免那些因为你不知道是否需要的模糊依赖产生的难以捕捉的bug。
当然,Pipenv还有很多其他的特性,并且它的
文档非常好,所以一定要看一下,并且在你所有的Python项目中使用它,就像我们在Tryolabs中做的那样。
2. PyTorch
链接:http://pytorch.org/
说到今年流行,尤其是在深度学习(DL)社区流行的库,那就要提到今年Facebook推出的DL框架PyTorch。
PyTorch构建并改进了流行的Torch框架,与Lua不同它是基于Python的。由于最近几年人们大多转向使用Python进行数据科学研究,它是让DL更容易接近的重要一步。
最值得注意的是,PyTorch已经成为众多研究人员的首选框架之一,因为它实现了动态计算图(Dynamic Computational Graph)范式。当使用
TensorFlow,
CNTK或
MXNet等其他框架编写代码时,必须首先定义计算图。该图指定了我们的代码运行的所有操作,这些操作稍后会被编译并可能被框架优化,以便能够在GPU上并行运行得更快。这个范式被称为静态计算图,因为你可以利用各种优化,而且这个图形一旦建成,就有可能运行在不同的设备上(因为执行与构建分离)。然而,在自然语言处理等许多任务中,工作的量通常是可变的:在将图像提供给算法之前,可以将图像调整为固定的分辨率,但不能对可变长度的句子进行相同的处理。这是PyTorch和动态图的亮点,通过在代码中使用标准的Python控制指令,图在执行时被定义,给了你很多这对于一些任务来说必不可少的自由。
当然,PyTorch也为你
计算梯度(就像你期望从任何现代的DL框架中获得的那样),速度非常快,而且是
可扩展的,所以为什么不试试呢?
3. caffe2
链接:https://caffe2.ai/
这可能听起来很疯狂,但Facebook今年也发布了另一个很棒的DL框架。
原来的
Caffe框架已被大众使用多年,以无与伦比的性能和久经考验的代码库而闻名。然而,最近DL的趋势使这个框架在某些方面停滞不前。Caffe2是将Caffe带入“现代世界”的尝试。
它支持分布式训练,部署(即使在移动平台上),最新的CPU并且支持CUDA的硬件。虽然PyTorch可能更适合研究,但Caffe2适合在Facebook上看到的大规模部署。
另外,请看看近期的
ONNX。你可以在PyTorch中构建和训练模型,同时使用Caffe2进行部署!
链接:https://github.com/sdispater/pendulum
去年,Arrow被列入榜单,它旨在通过使用Python的datetime让你生活轻松一些。而今年,我们轮到Pendulum了。
Pendulum的优点之一是它是Python标准
datetime
类嵌入式的替代品,因此可以轻松地将其与现有代码集成,并且只有在实际需要时才使用它的功能。者已经特别注意确保正确地处理时区,默认每个实例的timezone-aware和UTC。你也将得到一个扩展
timedelta
,使datetime算法更简单。
与其他现有的库不同,它努力使API具有可预测的行为,所以你知道会发生什么。如果你正在做任何与datetimes有关的重要工作,这会让你更快乐!(查看更多:https://pendulum.eustace.io/docs/)。
5. Dash
https://plot.ly/products/dash/
如果你正在做数据科学,你会使用Python生态系统中的优秀工具,比如
Pandas和
scikit-learn。并在工作流程使用
Jupyter Notebooks,这对你和你的同事来说非常棒。但是,你如何与那些不知道如何使用这些工具的人分享这项工作呢?你如何建立一个界面,使人们可以轻松地使用数据,可视化过程?过去,你需要一个前端团队,用Javascript知识来构建这些GUI。但现在不用了。
今年宣布的Dash是一个用于构建Web应用程序的Python开源库,尤其是那些充分利用数据可视化的Web应用程序。它建立在
Flask,
Plotly.js和
React的基础上,并提供了抽象,使你不必学习这些框架,更高效的研发。这些应用程序可以在浏览器中呈现并响应,因此在移动设备中也能使用。
了解更多关于Dash:https://plot.ly/dash/gallery
Python中有许多库用来做数据科学和ML,但是当你的数据点是随着时间的推移而变化的度量(例如股票价格,从仪表中获得的度量等等)时,这样的库就很少了。
PyFlux是一个专门为时间序列而开发的 Python开源库。时间序列研究是统计学和计量经济学的一个分支,目标可以描述时间序列的表现(依据隐藏组件或特征),也能预测时间序列未来的表现。
PyFlux允许用于时间序列建模的概率方法,并且已经实现了几个像
GARCH这样的现代时间序列模型。
https://github.com/google/python-fire
通常情况下,你需要为自己的项目制作命令行界面(CLI)。除了传统的
argparse,Python中还有
click或
docopt可用。谷歌今年宣布的
Fire,在解决同样的问题上提出了不同的方法。
Fire是一个开源的库,可以为任何Python项目自动生成一个CLI。没错,是自动的:你几乎不需要编写任何代码或文档来构建你的CLI!想完成你的CLI,只需要调用一个
Fire
方法并把它传递给一个CLI:一个函数,一个对象,一个类,一个字典,甚至你可以不传递任何参数(这会将你的整个代码转换为一个CLI)。这个库可以为你节省很多时间。
https://github.com/scikit-learn-contrib/imbalanced-learn
在一个完美世界的里,我们会有完美平衡的数据集,我们将它们都拿来将训练模型,多么美好。可惜现实世界不是这样的,某些任务更倾向于不平衡的数据。例如,在预测信用卡交易中的欺诈行为时,你会预测绝大多数交易(+ 99.9%)实际上是合法的。如果我们简单的训练ML算法会出现令人沮丧的性能,所以在处理这些类型的数据集时需要特别小心。
幸运的是,这是一个已经被研究过的问题,存在各种各样解决的技术。Imbalanced-learn是一个Python包,它提供了关于这些技术的实现。它与
scikit-learn兼容,是
scikit-learn-contrib项目的一部分。
9. FlashText
https://github.com/vi3k6i5/flashtext
如果您需要搜索某些文本并将其替换为其他内容(如大多数数据清理工作),则通常将其转为正则表达式。他们能很好地完成这项工作,但是有时会发生这样的情况:需要搜索的数以千计的内容,正则表达式可能会非常缓慢。
为此,FlashText是一个更好的选择。它使整个操作的运行时间大大提高了。FlashText的优点在于无论搜索条件有多少,运行时都是一样的,而正则表达式中运行时几乎是随着条件数呈线性增长。
FlashText证明了算法和数据结构设计的重要性,即使对于简单的问题,更好的算法也可以很容易地胜过最快的cpu运行简单的实现。
10. Luminoth
https://luminoth.ai/
现在,图像无处不在,理解它的内容对于许多应用程序来说至关重要。值得庆幸的是,由于DL的进步,图像处理技术已经进步了很多。
Luminoth是一个使用
TensorFlow和
Sonnet构建的用于计算机视觉的开源Python工具包。目前,它可以支持以Faster R-CNN模型的形式进行对象检测。
但是Luminoth不仅是一个特定模型的实现。它是被构建为模块化和可扩展,所以可以直接定制现有的部分或者将其扩展为新的模型来处理不同的问题,尽可能多地复用代码。它提供的工具可以轻松完成构建DL模型所需的工程工作:将数据(在本例中为图像)转换合适的格式输送到数据管道(
TensorFlow的tfrecords)中,执行数据增强,在一个或多个gpu上运行训练(使用大型数据集时必须进行分布式培训),运行评估度量,轻松地
在TensorBoard中可视化 并用简单的API或浏览器界面部署训练号的模型,以便人们使用。
此外,Luminoth直接与Google Cloud的
ML Engine集成,所以即使你没有强大的GPU,也可以使用命令在云端进行训练。