标签: Bokeh, Data Science, Keras, Matplotlib, NLTK, numpy, Pandas, Plotly, Python, PyTorch, scikit-learn, SciPy, Seaborn, TensorFlow, XGBoost
原文作者: ActiveWizards
原文地址:Top 20 Python Libraries for Data Science in 2018
Python今年依旧保持着数据科学领域的领先地位。去年,我们在博客上列出了15个顶级Python数据科学库的榜单,当时大家都觉得非常好。这次,介绍一下这些顶级数据科学Python库今年有哪些更新,同时,我们还为这个榜单添加了一些新库。
实际上,这次的榜单不止20个库,主要是因为现在某些领域里有多个库都能解决相同的问题,而且暂时也不好说哪个库能成为领头羊,因此,我们将这些库分为一组,供大家选择。
核心库与统计库
1. NumPy (提交修改: 17911, 贡献者: 641)
按惯例,本榜单首先列出科学应用库,Numpy是这一类的首选,它是处理大型多维数组、矩阵及高级数学函数的工具集合,提供了多种数据操作方法。
今年,Numpy进行了很多改进。除了修复Bug和加强兼容性外,关键的改进是增加了可选样式,即Numpy对象的打印格式。此外,还增加了新的功能,只要是Python支持的编码,Numpy就可以处理使用这些编码的文件。
2. SciPy (提交修改: 19150, 贡献者: 608)
科学计算的的另一个核心库是SciPy。SciPy基于Numpy,扩展了Numpy的功能,它的核心数据结构是用Numpy实现的多维数组。这个库包含了一组处理线性代数、概率论、积分学等任务的工具。
SciPy的主要改进包括对不同操作系统的集成,增加了新的函数与方法,值得一提的是,SciPy更新了优化器。此外,还打包了不少新的BLAS[1]和LAPACK[2]函数。
3. Pandas (提交修改: 17144, 贡献者: 1165)
Pandas提供了高层数据结构和大量的分析工具。这个库最牛的地方是可以用一两条命令实现很多复杂的数据分析操作。Pandas内建了很多方法,比如分组、筛选、合并数据及时间序列等功能,并且,这些操作的运算速度都非常快。
今年,Pandas进行了数百项优化,包括增加了新特性、修复了Bug、改进了API。这些优化主要集中在提升Pandas分组和排序数据的能力,提供了更适用的apply方法的输出结果,还为操作自定义类型提供了支持。
4. StatsModels (提交修改: 10067, 贡献者: 153)
Statsmodels是进行统计数据分析的Python模块,比如,评估统计模型、执行统计测试等。有了Statsmodels,就可以实现很多机器学习方法,探索不同图形的绘图可能性。
Statsmodels还在不断开发升级,将来会提供越来越多的新特性。今年,Statsmodels引入了时间序列和新的技术模型,如,广义泊松、零膨胀模型、负二项式分布等,它还提供了一些新的多元方法,如,因子分析、多元方差分析(MANOVA)和方差分析(ANOVA)的重复测量等。
可视化
5. Matplotlib (提交修改: 25747, 贡献者: 725)
Matplotlib是创建二维图形的底层库。使用Matplotlib可以创建直方图、散点图、非笛卡尔坐标图等多种图形,并且,大部分流行绘图库都与Matplotlib兼容,可以进行交互操作。
今年,Matplotlib优化了颜色、字体、尺寸、图例等样式。比如,它对外观的优化包括了自动对齐图例,还改进了色彩,新采用的色相环即便是色盲也可以看。
6. Seaborn (提交修改: 2044, 贡献者: 83)
Seaborn是基于Matplotlib开发的高层API,与Matplotlib相比,它提供了更多实用的默认图形,包括诸如时间序列、Jointplot和小提琴图这样的可视化图。
2018年上半年,Seaborn的升级主要是修复Bug。同时,还改进了FaceGrid和PairGrid与Matplotlib增强型交互后端的兼容性,并为可视化图增加了参数和选项。
7. Plotly (提交修改: 2906, 贡献者: 48)
使用Plotly可以轻易地生成复杂的图形,这个库可以用来开发交互式的网页应用,还可以生成非常华丽的等高线图、三角图及3D图。
今年,Plotly的优化主要在于提供了很多新的图形和特性,引入了对动画与串扰集成等多重链接视图的支持。
8. Bokeh (提交修改: 16983, 贡献者: 294)
Bokeh使用JavaScript Widget,用于创建可在浏览器中查看的交互式、矢量化的可视化图。通过链接图形、添加Widget和回调函数等实用特性,Bokeh提供了很多图形、样式以及交互功能。
Bokeh今年优化的交互功能还是可圈可点的,比如说,旋转式类别图例标签,缩放工具、增强型自定义工具提示字段等。
9. Pydot (提交修改: 169, 贡献者: 12)
Pydot是生成复杂定向图与非定向图的库,它是Python开发的Graphviz[3]接口。有了Pydot,就可以展示结构化的图形,构建神经网络图与基于算法的决策树等图形。
机器学习
10. scikit-learn (提交修改: 22753, 贡献者: 1084)
scikit-learn是最强大的数据处理库之一,它是基于Numpy和SciPy的Python模块。scikit-learn提供了很多标准机器学习与数据挖掘算法,比如,分类、聚类、回归、降维与模型选择等。
2018年上半年,scikit-learn做了很多改进。优化了交叉验证,使其可以使用一个以上的指标;完善了最近邻和逻辑回归等几个训练方法;还有一点是终于推出了通用术语与API元素术语表,有了这个术语表就可以很方便地了解scikit-learn的专业术语和使用约定。
11. XGBoost / LightGBM / CatBoost (提交修改: 3277 / 1083 / 1509, 贡献者: 280 / 79 / 61)
梯度增强是机器学习里最流行的算法,这个算法是基于决策树等持续精化的基本模型集合构建的。因此,现在出现了一些为了快速、便捷实现这种方法而设计的专用库。我们认为 XGBoost、LightGBM与CatBoost值得特别关注。它们都是解决梯度增强问题的竞争者,使用方式也几乎相同。XGBoost这几个库提供了高度优化、可扩展、可快速实现的梯度增强算法,这些优势让它们在现在的数据科学界里非常流行;甚至,由于其算法对赢得Kaggle比赛有很大帮助,现在很多参赛者也喜欢用这些库来解决Kaggle比赛问题。
12. Eli5 (提交修改: 922, 贡献者: 6)
机器学习模型预测的结果往往并不一目了然,无法让人轻易就能理解,Eli5就是为了解决这一痛点而开发的。Eli5用于将机器学习模型进行可视化,并进行Debug,可以一步一步追踪算法的执行步骤。Eli5支持scikit-learn、XGBoost、LightGBM、lightning和sklearn-crfsuite等库,能够为这些库执行不同的监控任务。
深度学习
13. TensorFlow (提交修改: 33339, 贡献者: 1469)
TensorFlow是谷歌大脑开发的、超级火爆的深度学习与机器学习框架,它使用人工神经网络处理多重数据集。TensorFlow广泛应用于对象识别、语音识别等业务,现在还出现了不少基于TensorFlow创建的高层辅助器,比如tflearn、tf-slim和skflow等。
TensorFlow还在快速迭代,今年发布了不少更新版本,提供了很多新特性。比如,最新的版本修复了潜在的安全隐患,改进了TensorFlow与GPU的集成,可以让TensorFlow在一台机器上使用多个GPU运行评估期模型。
14. PyTorch (提交修改: 11306, 贡献者: 635)
PyTorch是一个大型框架,允许用户使用GPU加速张量计算、创建动态计算图、自动计算梯度值。PyTorch还提供了丰富的API接口,用于解决神经网络的相关应用。
PyTorch是基于Torch这个开源深度学习开源库创建的,2017年才引入了Python API接口。从那时起,PyTorch就变得非常流行,吸引了越来越多的数据科学家用户。
15. Keras (提交修改: 4539, 贡献者: 671)
Keras是运行在TensorFlow和Theano之上的高层神经网络库,最新版本还可以将CNTK和MxNet作为后端。Keras简化了任务操作,大大地减少了编写代码的工作量。然而,对于一些复杂的任务,Keras并不是十分适用。
今年,Keras优化了性能、可用性、文档和API,增加了Conv3D转置层、MobileNet应用与自归一网络等新特性。
分布式深度学习
16. Dist-keras / elephas / spark-deep-learning (提交修改: 1125 / 170 / 67, 贡献者: 5 / 13 / 11)
如今,越来越多的用例处理工作需要消耗极为庞大的资源与时间,因此,大规模数据的深度学习问题已经变得非常严峻了。然而,随着Apache Spark等分布式计算系统拓展到深度学习领域,处理这种大规模数据就变得简单了。因此,dist-keras、elephas和spark-deep-learning这样的库很快就应运而生,开发速度也非常快。只不过这些库现在都旨在解决同样的问题,目前还看不出来谁能够脱颖而出。这些库可以通过Keras直接调用Apache Spark训练神经网络,Spark-deep-learning还提供了构建Python神经网络管道的工具。
自然语言处理
17. NLTK (提交修改: 13041, 贡献者: 236)
NLTK是自然语言处理的平台。可以使用NLTK处理、分析文本,进行分词、标记、信息提取等工作,还可以使用NLTK搭建原型和调研系统。
NLTK今年的改进不多,主要是优化了API和兼容性,以及提供了一个新的CoreNLP的接口。
18. SpaCy (提交修改: 8623, 贡献者: 215)
SpaCy这个自然语言处理库提供了很多好用的例程、API文档和应用Demo。SpaCy是使用Cython开发的,支持超过30种语言,可以轻松地与深度学习集成,还能保证稳健、精准的结果。
SpaCy还有一个非常实用的特性,就是它的设计架构很好,不需要将文档分段就可以处理整个文档。
19. Gensim (提交修改: 3603, 贡献者: 273)
Gensim是基于Numpy和Scipy的Python库,可以进行语义分析、主题建模和向量空间建模。它提供了word2vec等NLP算法。虽然Gensim有自己的models.wrappers.fasttext,但是fasttext这个库也可以用于高效的词表征学习。
数据采集
20. Scrapy (提交修改: 6625, 贡献者: 281)
Scrapy是用来构建爬虫机器人扫描网页,采集结构化数据的Python库,Scrapy还可以通过API提取数据。Scrapy支持扩展和移植,用起来非常顺手。
今年Scrapy有很多升级,优化了Proxy服务器,改进了错误提示与问题识别系统,推出了使用Scrapy解析元数据设置的新功能。
结论
以上就是我们的2018年上半年的Python数据科学库榜单。与去年相比,经典的数据科学库仍在不断地完善、优化,与此同时,这个领域里也出现了不少新兴的数据科学库。
最后,给大家呈上Github上这些库的活跃表。
ActiveWizards是由数据科学家和数据工程师组成的团队,关注于大数据、数据科学、机器学习、数据可视化等数据项目。我们的核心专业领域包括数据科学(数据研究、机器学习算法与数据开发),数据可视化(D3.js、Tableau等)、大数据开发(Hadoop、Spark、Kafka、Cassandra、HBASE、MongoDB等)及数据密集型Web应用开发(RESTful API、Flask、Django和Meteor等)。
-
BLAS的全称是Basic Linear Algebra Subprograms,即基础线性代数子程序,是一系列API规范,如向量、矩阵之间的乘法等。 ↩
-
LAPACK的全称是linear algebra package,即线性代数库,其底层是BLAS,在此基础上定义了很多矩阵和向量高级运算的函数,如矩阵分解、求逆和求奇异值等。LAPACK是科学计算(矩阵运算)的接口规范,运行效率比BLAS更高。 ↩
-
Graphviz是一个知名的绘制网络图、软件工程、数据库、网页设计及机器学习架构图的可视化工具。 ↩