2018年数据科学前 15 名热门 Scala 库

前言:  这篇是翻译自  Top 15 Scala libraries for data science in 2018
感谢作者 ActiveWizards 公司授权翻译

我们前面的文章讨论的前几名的 Python 库( libraries ),现在我们来谈谈 Scala 的,这是最近另一个数据科学杰出的语言。它之所以受欢迎,主要是因为 Spark , 大数据处理引擎选择之一,它是用Scala 编写的,提供 Scala 的原生 API。

我们在这儿不会去深入比较 Scala 和 Python ,但要注意的重点是,不像 Python,Scala 是编译型语言,且在它上面的程式码执行得更快(较纯用 Python 来说,且不是像 NumPy 这样的专业程式库)。

与 Java 对比,写 Scala 愉快多了,因为同样的逻辑,通常可以比较少行的程式码写出。Scala 的功能丝毫不逊色于 Java,甚至有一些特性是更加先进。 Java 的老前辈在这里可以提供大量的反驳,但毫无疑问的是 Scala 对数据科学任务更适合。

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

为方便起见,我们准备了用 Scala 执行机器学习和数据科学任务的最重要程式库的全面概述。我们将使用相对 Python 工具的类比对一些重要方面做更好地说明。实际上,在 Scala 就一顶层全面的工具形成资料科学与大数据解决方案的基础,名为 Apache Spark,被用 Scala 和 Java 写的一大范围的程式库和工具辅助。 让我们来仔细看看。

数据分析和数学

1. Breeze (提交: 3316, 贡献者: 84)

Breeze 以 Scala 的主要科学计算程式库数据著称。 它从 MATLAB 的数据结构和 Python 的 NumPy 类( classes )中汲取想法。 Breeze 运用数据阵列提供快速有效的操作,并支持许多其他作业的实现,包括:

  • 矩阵和向量运算:用于创建、转置( transposing )、填充数字、进行元素间的操作、反转( inversion )、计算行列式,以及更多能满足几乎所有需求的其他选项。
  • 机率和统计功能:从统计分布和计算描述性统计(如平均值、变异数和标准偏差)到马尔可夫链模型许多变化。 统计的基本套件是  breeze.stats 和 breeze.stats.distributions
  • 优化:这意味着调查本地或全局最小函数。优化方法储存在 breeze.optimize package中。
  • 线性代数:所有基本运算都依赖 netlib-java 程式库,使得 Breeze 在代数计算方面非常快。
  • 信号处理操作:对于数位信号工作很必要。Breeze 中重要运算例子是卷积( convolution )和傅立叶转换( Fourier transformation ),它将给定的函数分解为正弦( sin )和余弦( cos )分量的总和。

Breeze 还提供了绘图( plotting )可能性,我们将在下面讨论。

2. Saddle (提交: 184, 贡献者: 10)

就像Scala的数据操作工具包是Saddle一样。它是R和Python的pandas库的Scala模拟。就像pandas或R中的数据帧一样,Saddle基于Frame结构(2D索引矩阵)。

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

Vec( 1D vector ) Mat( 2D matrix )
vec.jpg mat
Series (1D indexed matrix) Frame (2D indexed matrix)
series frame.jpg
Index (hashmap-like)
index.jpg

Vec 和 Mat 类( classes ) 建于 Series 和 Frame 的基础上。你可以对这些数据结构实施不同的操作( manipulations ),并用他们做基本的资料分析。关于 Saddle 的另一个很棒的地方是它对缺失值( missing values )的稳健性。

3. Scalalab (提交: 23, 贡献者: 1)

ScalaLab 是 Scala 对 MATLAB 计算功能的转译。此外,ScalaLab 可以直接呼叫和存取 MATLAB 脚本的运算结果。

与以前的计算程式库的主要区别在于 ScalaLab 使用自己的特定域的语言ScalaSci。方便地,Scalalab 可以访问各种科学 Java 和 Scala 程式库,因此你可以轻松输入数据,然后使用不同的方法来操作与计算。 大多数技术类似于 Breeze 和 Saddle。此外,如在 Breeze,也有机会制图( plotting ) 进一步解释结算出来的数据。

NLP

4. Epic (提交: 1790, 贡献者: 15) & 5. Puck (提交: 536, 贡献者: 1)

Scala 有一些很棒的自然语言处理( NLP )的程式库,为 ScalaNLP 的一部分,包括Epic 和 Puck。这些程式库主要用作文本解析器( text parsers ),由于高速和 GPU 使用的关系,如果你需要解析数千条句子,Puck 会比较方便。 另外,Epic 以其预测框架著称,它能采用结构化预测建构出复杂系统。

视觉化

6. Breeze-viz (提交: 29, 贡献者: 3)

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

breeze-vis-(1).jpg

7. Vegas (提交: 210, 贡献者: 14)

另一个用于资料视觉化的Scala 程式库是 Vegas。它比 Breeze-viz 功能更强大,并允许制作一些绘图规格,如过滤、转换和聚合。它的结构类似于 Python 的 Bokeh 和Plotly。

vegas-(1)

机器学习

8. Smile (提交: 1019, 贡献者: 21)

统计机器智会和学习引擎( Statistical Machine Intelligence and Learning Engine),或简称 Smile,在某些方面是一个很有前途的现代机器学习系统。类似于 Python 的 cikit-learn。它是用 Java 开发的,也为 Scala 提供了一个 API。这个程式库会给你快速和广泛应用的惊喜,高效的记忆体使用以及运用于分类( Classification )、回归( Regression )、最近邻搜索( Nearest Neighbor Search )、特征选择( Feature Selection )等的大量机器学习演算法。

smile.jpg

smile2

9. Apache Spark MLlib & ML 

建立在 Spark、MLlib 程式库之上,提供各种各样的机器学习演算法。因是用 Scala 编写,它提供 Java、Python 和 R 很有用的 API,当然对 Scala 就更有机会提供更灵活的。 该程式库包含两个独立的套件: MLlib 和 ML。 让我们逐一详细地看一下它们。

  • MLlib 是基于 RDD 的程式课,包含核心学习演算法,用于分类( classification )、群聚( clustering )、无监督学习( unsupervised learning )技术,由用于实现基本统计(如相关性、假设检验和随机数据生成)的工具支持。
  • ML 是一个较新的程式库,与 MLlib 不同,它可以处理数据框( data frames  )和资料集( data sets )。 该程式库的主要目的是给你在资料上建构不同转换的管道的能力。这管道可以被视为一序列的阶段,其每一阶段都是一个转换器( Transformer ),它将一个数据框( data frame )转换为另一个资料框,或者是一个估算器( Estimator ),一种演算法,可以适应数据框以生成转换器

每个套件都有其优点和缺点,在实践上,通常证明两者一起用更有效。

10. DeepLearning.scala (提交: 1647, 贡献者: 14)

DeepLearning.scala 是另一种机器学习工具包,可为深度学习提供有效的解决方案。它利用数学公式通过物件导向和函数式程式设计的组合创建复杂的动态神经网路。该程式库使用多种类型,以及适应类型类( applicative type classes )。 后者允许同时开始多次计算,我们认为这对数据科学家的处理分析至关重要。 值得一提的是,该程式库的神经网路提供程式并支持所有 Scala 功能。

11. Summing Bird (提交: 1772, 贡献者: 31)

Summingbird 是一个特定域的数据处理框架,它允许整合批量和线上 MapReduce 计算以及混合批处理/线上处理模式。 设计语言的主要催化剂来自 Twitter 开发人员,他们经常要写相同的程式码两次:第一次是进行批处理( batch processing ),然后进行一次线上处理。

Summingbird 消耗并生成两种类型的数据:串流(无限序列的元组tuples),以及在某个时间点被视为资料集完整状态的快照。 最后,Summingbird 为 Storm、Scalding 和用于测试目的内部记忆执行引擎提供了多个平台实践。

12. PredictionIO (提交: 4343, 贡献者: 125)

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

补充

13. Akka (提交: 21430, 贡献者: 467)

Akka 是由 Scala 的创建公司开发的,是一个用于在 JVM 上建构分散式应用程式的共时框架( concurrent framework )。它使用基于 Actor 的模型,其中 Actor 表示一个讯息接收并做出适当行动的物件。 Akka 取代了Actor 类( class )的功能,这在以前的 Scala 版本中有提供。

主要区别,也被认为是最重要的改进,是 Actors 和基础系统间的附加层,只需要Actors 处理讯息,同时由框架( framework )处理所有其他复杂情况。所有 Actors 都是按层次排列的,Actors 系统可以帮助 Actors 更有效地互相交流,并通过将他们分成更小的任务来解决复杂的问题。

14. Spray (提交: 2663, 贡献者: 74)

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

UPD:Spray不再维护,已被 Akka HTTP 暂停。虽然大多数程式库功能仍然留着,但与此替代连接的串流、模组结构和DSL路由等有一些变化和改进。 迁移指南将帮助你了解所有的发展。

15. Slick (提交: 1940, 贡献者: 92)

在我们的列表最后但并非最不重要的是 Slick,它代表 Scala 语言整合连接工具包( Language-Integrated Connection Kit )。它是一个用于创建和执行数据库查询的程式库,支援各种常用数据库,如 H2、MySQL、PostgreSQL 等。某些资料库可通过 Slick 扩展获得。

为了建构查询,Slick 提供了一个功能强大的 DSL,使程式码看起来就像使用 Scala 集合( collections )一样。Slick 支援简单的 SQL 查询和几个表的强类型连接( strongly-typed joins )。此外,简单的子查询可用于构造更复杂的子查询.

结论

在本文中,我们概述了一些在执行主要数据科学任务时非常有用的 Scala 程式库。事实证明,它们对于获得最佳结果非常有效。你还可以在下面 GitHub 上撷取的活动统计看到每个库的活动状况 。

conclusion.jpg

♥欢迎关注 Soft & Share 微博

 

发表评论

Powered by WordPress.com.

Up ↑

%d 博主赞过: