最近,Scala语言已被数据科学广泛使用。 它之所以受到欢迎,主要是因为使用Scala编写的Spark的出现。 在实践中,通常在研究阶段,使用Python执行模型的分析和创建,然后在Scala中实施,因为这种语言更适合于生产。
我们已经准备了最有趣的库的详细概述,这些库用于在Scala中实现机器学习和数据科学任务。 其中一些用于我们的教育计划“ Scala上的数据分析 ”。
为了方便起见,该评分中提供的所有库均分为5组:数据分析和数学,NLP,可视化,机器学习等。
数据分析与数学
1号 微风(贡献:3316,贡献者:84)
微风图书馆被称为Scala的主要科学图书馆。 它在MATLAB中(就数据结构而言)以及Python中的NumPy类具有类似的功能。 Breeze提供了快速有效的数据数组操作,并允许您执行许多其他操作,包括以下内容:
- 矩阵和向量运算,用于创建,转置,执行逐元素运算,求逆,计算行列式和许多其他事情。
- 概率和统计功能:从统计分布和描述性统计(例如均值,方差和标准差)的计算到马尔可夫链模型。 统计信息的主要软件包是breeze.stats和breeze.stats.distributions。
- 优化,涉及检查功能的局部或全局最小值。 优化方法存储在breeze.optimize包中。
- 线性代数:所有基本运算都基于netlib-java库,这使Breeze进行代数计算的速度非常快。
- 信号处理操作。 微风中此类运算的示例是卷积和傅立叶变换,它们将该函数分为正弦和余弦分量之和。
值得注意的是,Breeze还允许您构建图形,但是我们稍后会讨论。
2号 鞍座(提交:184,贡献者:10)
Scala的另一个数据工具是Saddle。 这与Python中的Pandas类似,但仅适用于Scala。 与Pandas或R中的数据帧一样,Saddle也基于帧结构(二维索引矩阵)。
共有五个基本数据结构,分别是:
Vec(1D向量)

垫子(2D矩阵)

系列(一维索引矩阵)

帧(二维索引矩阵)

- 索引(作为哈希图)

Vec和Mat类位于“系列”和“框架”中。 您可以对这些数据结构执行各种操作,并将其用于基本数据分析。 Saddle的另一个重要功能是可以抵抗数据缺口。
3号 ScalaLab(提交:23,贡献者:1)
ScalaLab是Scala中的一种MATLAB。 而且,ScalaLab可以直接调用和访问MATLAB脚本结果。
与以前的计算库的主要区别在于ScalaLab使用自己的特定于域的语言,称为ScalaSci。 Scalalab的方便之处在于它可以访问Java和Scala的许多科学库,因此您可以轻松地导入数据,然后使用各种方法来执行操作和计算。 大多数东西都类似于微风和马鞍。 此外,如在Breeze中一样,有些图表可让您进一步解释数据。
Nlp
4号 史诗(贡献:1790,贡献者:15)和帕克(贡献:536,贡献者:1)
作为ScalaNLP的一部分,Scala具有一些良好的自然语言处理库,包括Epic和Puck。 这些库主要用作文本分析工具。 同时,由于Puck的高速度和GPU的使用,如果您需要分析成千上万的商品,Puck更加方便。 Epic也称为使用结构化预测来构建复杂系统的预测框架。
可视化
5号 Breeze-viz(贡献:29,贡献者:3)
顾名思义,Breeze-viz是由Breeze为Scala开发的可视化库。 它基于著名的Java库JFreeChart,图表在某种程度上类似于MATLAB。 尽管Breeze-viz的功能比MATLAB或Python或R中的matplotlib少得多,但在创建模型和分析数据时还是很有用的。

6号 拉斯维加斯(提交:210,贡献者:14)
另一个Scala数据可视化库是Vegas。 它比Breeze-viz的功能要强大得多,并且允许您进行一些对图形有用的转换:过滤,转换和聚合。 通常,该库类似于Python中的Bokeh和Plotly。
Vegas允许您以声明式的方式编写代码,这使您可以集中精力确定需要处理的数据并进行可视化的进一步分析,而不必担心实现代码。

机器学习
7号 微笑(贡献:1019,贡献者:21)
统计机器智能和学习引擎,或简称为Smile,是一个很有前途的现代机器学习库,有点类似于Python中的scikit-learn。 它是用Java开发的,但也具有Scala的API。 该库非常快速且高效:存储的有效利用,用于分类,回归,NNS,函数选择等的大量机器学习算法。


8号 火花ML
机器学习库,可以在Apache Spark中直接使用。 Spark本身是用Scala编写的,并具有适用于其所有库的API。
Spark ML-与Spark MLlib(较旧的库)不同,它适用于数据帧。 它还使您可以在数据上构建各种转换的管道。 这可以视为一系列阶段,其中每个阶段要么是将一个数据帧转换为另一数据帧的Transformer,要么是Estimator,例如在数据帧上训练的机器学习算法。
9号 DeepLearning.scala(贡献:1647,贡献者:14)
DeepLearning.scala是替代的机器学习工具,可让您构建深度学习模型。 该库使用数学公式,通过结合面向对象和功能编程来创建复杂的动态神经网络。 它使用各种类型以及适用类型的类别。 后者使您可以同时启动多个计算,从而提高了生产率。
10号 总结鸟(提交:1772,贡献者:31)
Summingbird是一个数据处理框架,允许使用批处理和实时MapReduce计算。 Twitter语言开发的主要推动力是Twitter开发人员,他们经常两次编写相同的代码:首先用于批处理,然后又用于流式处理。
Summingbird使用并生成两种类型的数据:流(元组的无穷序列)和快照,它们在某个时间点被视为数据集的完整状态。 最后,Summingbird提供了一个用于Storm,Scalding的平台以及一个用于测试目的的内存引擎。
11号 PredictionIO(提交:4343,贡献者:125)
还值得一提的是用于创建和部署称为PredictionIO的预测机制的机器学习服务。 它基于Apache Spark MLlib和HBase构建,甚至在Github上被评为基于Apache Spark的最受欢迎的机器学习产品。 它使您能够轻松,高效地创建,评估和部署服务,实现自己的机器学习模型并将其合并到服务中。
其他
12号 Akka(提交:21430,贡献者:467)
Akka由Scala开发,是用于构建分布式JVM应用程序的并行环境。 它使用基于参与者的模型,其中参与者是一个接收消息并执行适当操作的对象。
主要区别在于参与者和框架之间的额外层,该层仅需要参与者来处理消息,而框架则负责其他所有事务。 所有参与者都按等级进行组织,这有助于参与者之间进行更有效的互动并解决复杂的问题,将他们划分为较小的任务。
13号 Slick(提交:1940,贡献者:92)
最新的库是Slick,这意味着Scala语言集成了连接套件。 这是一个用于创建和执行数据库查询的库:H2,MySQL,PostgreSQL等。某些数据库可通过slick-extensions获得。
对于构建查询,Slick提供了功能强大的DSL,使您的代码就像使用Scala集合一样。 Slick支持简单的SQL查询和几个表的强类型联接。 另外,可以使用简单的子查询来创建更复杂的子查询。
结论
在本文中,我们已经确定并简要描述了一些Scala库,这些库在执行基本数据处理任务时非常有用。
如果您有使用其他值得添加到该列表的有用的Scala库或平台的经验,请随时在评论中分享它们。