收藏!2018年数据科学前15名的Scala库

在我们以前的文章中,已经讨论过用于数据科学的顶级Python库。这次我们将重点介绍Scala,它最近成为数据科学家的另一个重要语言。而且获得了普及,主要是由于Spark的兴起,一个大型的数据处理引擎,它是用Scala编写的,因此在Scala中提供了本地API。

我们不会在这里深入的比较Scala和Python,但是需要注意的是,与Python不同,Scala是一种编译语言。因此写在其中的代码得到更快的执行(与纯Python相比,而不是像NumPy这样的专业库)。

与Java相比,在Scala中编写更令人愉快,因为相同的逻辑通常可以用少得多的行来表示。Scala的功能绝不逊色于Java,甚至有一些更高级的属性。 从事Jave的老前辈们或许会在这里提出很多反驳的意见,但毫无疑问,Scala更适合数据科学任务。

目前,Python和R仍然是用于快速数据分析以及构建、探索和操纵强大模型的主要语言,而Scala正在成为开发可处理大数据的功能性产品的关键语言,因为后者需要稳定性、灵活性、高速度、可扩展性等等。通常,在研究阶段,分析和模型在Python中完成,然后生产阶段在Scala中实现。

为了你的方便,我们已经准备好了用于在Scala中执行机器学习和数据科学任务的最重要库的全面概述。我们将使用类比与相应的Python工具来更好地理解一些重要的方面。实际上,只有一个顶级综合工具可以构成Scala数据科学和大数据解决方案开发的基础,这个解决方案被称为Apache Spark,并由Scala和Scala编写的各种库和工具进行补充Java。让我们来仔细看看它们。

数据分析和数学

Breeze被称为Scala的主要科学计算库。它从MATLAB的数据结构和Python的NumPy类中挖掘了一些想法。 Breeze提供数据阵列的快速高效的操作,并能够执行许多其他的操作,包括:

·用于创建、置换、填充数字、执行元素操、反转、计算行列式的矩阵和向量操作,以及更多其他选项以满足几乎所有需求。

·优化,这意味着对局部或全局最小值的函数进行调查。优化方法存储在breeze.optimize包中。

·线性代数:所有的基本操作都依赖于netlib-java库,使得Breeze在代数运算上非常快速。

·信号处理操作,是数字信号处理所必需的。 Breeze中重要操作的例子是卷积和傅里叶变换,它将给定的函数分解成正弦和余弦分量的和。

Breeze也提供了绘图的功能,我们将在下面讨论。

另一个用于Scala的数据操作工具包是Saddle。像pandas或R中的数据框一样,Saddle基于Frame结构(二维索引矩阵)。

总共有五种主要的数据结构,即:

·Vec (1D vector)

·Mat (2D matrix)

·Series (1D indexed matrix)

·Frame (2D indexed matrix)

·Index (hashmap-like)

Vec和Mat类是Series和Frame的基础。你可以对这些数据结构实施不同的操作,并将其用于基本的数据分析。关于Saddle的另一个重要的事情是它对缺失值的稳健性。

Scalalab

ScalaLab是Scala对MATLAB计算功能的解释。而且,ScalaLab可以直接调用并访问MATLAB脚本的结果。

与以前的计算库的主要区别在于ScalaLab使用自己的领域特定语言ScalaSci。 Scalalab方便地访问各种科学Java和Scala库,因此你可以轻松导入数据,然后使用不同的方法进行操作和计算。大部分技术与Breeze和Saddle类似。另外,就像Breeze一样,也有绘图机会,可以进一步解释所得到的数据。

NLP

Epic&Puck

Scala有一些伟大的自然语言处理库作为ScalaNLP的一部分,包括Epic和Puck。这些库大多用作文本解析器,如果由于其高速和GPU使用情况而需要解析数千个句子,则Puck会更方便。此外,Epic被称为预测框架,它采用结构化预测来构建复杂系统。

可视化

Breeze-vis

顾名思义,Breeze-viz是由Breeze为Scala开发的绘图库。它基于著名的Java图表库JFreeChart,并具有MATLAB类似的语法。虽然与MATLAB相比,Breeze-viz的机会要少得多,但在Python或R中,它仍然非常有助于开发和建立新模型。

Vegas

另一个用于数据可视化的Scala lib是Vegas。它比Breeze-viz功能更强大,并允许进行一些绘图规范,如过滤,转换和聚合。它的结构与Python的Bokeh和Plotly类似。

Vegas提供了声明性可视化,使你能够主要专注于指定需要对数据执行哪些操作,并进行可视化的进一步分析,而无需担心代码的实现。

机器学习

Smile

统计机器智能和学习引擎(简称Smile)是一个有前途的现代机器学习系统,在某些方面类似于Python的scikit-learn。它是用Java开发的,也为Scala提供了一个API。该库将使用快速广泛的应用程序、高效的内存使用以及用于分类、回归、最近邻检索、特征选择等的大量机器学习算法,令你惊叹不已。

Apache Spark MLlib&ML

建立在Spark之上,MLlib库提供了大量的机器学习算法。使用Scala编写,它还为Java、Python和R提供了高度功能的API,但Scala的机会更加灵活。该库由两个独立的软件包组成:MLlib和ML。让我们一个一个来看。

·MLlib是一个基于RDD的库,包含用于分类、聚类、无监督学习技术的核心机器学习算法,这些技术由实现诸如相关性、假设检验和随机数据生成等基本统计的工具支持。

·与MLlib不同,ML是一个更新的库,用于处理数据帧和数据集。该库的主要目的是为了给你的数据构建不同转换管道的能力。流水线可以被认为是一个阶段序列,其中每个阶段是一个变换器,将一个数据帧转换成另一个数据帧,或一个估计器、一个算法,可以在一个数据帧上运行,从而产生一个变压器。

每一个方案都有其优点和缺点,在实践中,这两个方案通常被证明更有效。

DeepLearning.scala

DeepLearning.scala是另一种机器学习工具包,可为深度学习提供有效的解决方案。它利用数学公式通过结合面向对象和函数式编程来创建复杂的动态神经网络。该库使用了广泛的类型以及应用类型。后者允许同时开始多个计算,我们认为这是数据科学家处理中至关重要的。值得一提的是,图书馆的神经网络是程序,并支持所有的Scala功能。

Summing Bird

Summingbird是一个特定于领域的数据处理框架,允许批量和在线MapReduce计算以及混合批量/在线处理模式的集成。设计语言的主要催化剂来自Twitter开发人员,他们经常处理两次相同的代码:第一个是批处理,第二个是在线处理。

Summingbird使用并生成两种类型的数据:流(元组的无限序列)和在某个时间点被视为数据集的完整状态的快照。最后,Summingbird为Storm、Scalding和内存执行中的引擎提供了用于测试目的的平台实现。

PredictionIO

当然,我们不能忽视一个机器学习服务器来构建和部署预测引擎PredictionIO。它基于Apache Spark、MLlib和HBase构建的,甚至在Github上被评为最受欢迎的基于Apache Spark的机器学习产品。它使你能够轻松高效地构建、评估和部署引擎,实现你自己的机器学习模型,并将它们合并到你的引擎中。

额外的

Akka

由Scala的创建者公司开发,Akka是一个在JVM上构建分布式应用程序的并发框架。它使用基于actor的模型,其中actor表示接收消息并采取适当操作的对象。 Akka取代了以前的Scala版本中可用的Actor类的功能。

主要的区别也被认为是最显著的改进,是参与者和底层系统之间的附加层,它只需要参与者处理消息,而框架处理所有其他复杂问题。所有参与者均按层次排列,从而创建了一个参与者系统,帮助他们更有效地互动,并通过将其划分为更小的任务来解决复杂的问题。

Spray

现在让我们来看看Spray--一套用于构建基于Akka顶层的REST / HTTP Web服务的Scala库。它确保异步的、非阻塞的基于角色的高性能请求处理,而内部的Scala DSL提供了定义的Web服务行为以及高效便捷的测试功能。

Slick

最后但并非最不重要的是Slick,它代表Scala语言集成连接工具包。它是一个用于创建和执行数据库查询的库,提供各种支持的数据库,如H2、MySQL、PostgreSQL等。有些数据库可通过slick-extensions获得。

为了构建查询,Slick提供了一个强大的DSL,这使得代码看起来就像使用Scala集合一样。 Slick既支持简单的SQL查询,也支持多个表的强类型连接。而且,简单的子查询可以用来构造更复杂的子查询。

结论

在本文中,我们概述了一些在执行主要数据科学任务时非常有用的Scala库。事实证明,这对于取得最好的结果非常有帮助和有效。你还可以在下面提供的每个库中查看从GitHub获取的活动统计信息。

请注意,上面提到的列表并不全面,市场上还有很多适合不同用例的工具。如果你对其他有用的Scala库或框架有一些积极的经验值得添加到此列表中,请随时在下面的评论部分分享它们。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180212A0BYU100?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券