让 Kotlin 为数据科学做好准备

发布于 JetBrains_CN

今年在 2019 年 KotlinConf 上,Roman Belov 概述了 Kotlin 的数据科学方法。既然该演讲现在已公开,我们决定重述一下,并分享一些有关 Kotlin 数据科学工具和库的当前状态。

https://youtu.be/APnyDVye4JA

Kotlin 如何适应数据科学?由于需要分析大量数据,最近几年为数据科学学科带来了真正的复兴。没有适当的工具就不可能实现所有这些数据科学复兴。以前,您需要一种专门为数据科学设计的编程语言,但是今天,您已经可以使用通用语言了。当然,这需要通用语言做出正确的设计决策,更不用说获得社区的帮助了。这使某些语言(例如 Python )比其他语言更受数据科学欢迎。

借助 Kotlin Multiplatform 的概念,Kotlin 旨在复制其开发人员的经验并将其互操作性扩展到其他平台。Kotlin 的主要设计品质包括简洁性、安全性和互操作性。这些基本的语言特征使其成为用于各种任务和平台的出色工具。数据科学当然是这些任务之一。

好消息是,社区已经开始采用 Kotlin 进行数据科学,并且这种采用正在快速进行。以下简短报告概述了 Kotlin 对数据科学的准备情况,包括 Kotlin 库和用于数据科学的 Kotlin 工具。

Jupyter

首先,由于其交互性, Jupyter Notebook非常便于转换、可视化和呈现数据。凭借 Jupyter 的可扩展性和开源性质,它已成为围绕数据科学的大型生态系统,并已集成到大量与数据相关的其他解决方案中。其中包括用于 Jupyter Notebook 的 Kotlin 内核。使用此内核,您可以在 Jupyter Notebook 中编写和运行 Kotlin 代码,并使用以 Java 和 Kotlin 编写的第三方数据科学框架。

可在此存储库中找到可复制的 Kotlin Jupyter Notebook 的示例。要快速使用 Kotlin Notebook,您可以在 Binder 上启动它(请注意,设置环境通常需要一分钟时间)。

Apache Zeppelin

由于对 Spark 和 Scala 的强大支持, Apache Zeppelin 在数据工程师中非常受欢迎。与 Jupyter 相似,Zeppelin 具有一个插件 API(称为 Interpreters ),以通过支持其他工具和语言来扩展其核心。目前,最新版本的 Zeppelin(0.8.2)并未随附捆绑的 Kotlin 解释器。但是无论如何,它可以在 Zeppelin 的主分支中获得。要了解如何在 Spark 群集中部署具有 Kotlin 支持的 Zeppelin,请参阅这些说明

Apache Spark

由于 Spark 具有强大的 Java API,因此您已经可以将 Kotlin 在 Jupyter 和 Zeppelin 中的 Spark Java API 使用,而不会出现任何问题。但是,我们正在通过使用 Spark 的 Dataset API 添加对 Kotlin 类的完全支持来改善这种集成。使用 Spark 的外壳支持 Kotlin 还正在进行中。

在没有库的情况下仅将 Kotlin 用于数据科学是没有意义的。幸运的是,由于社区的最新努力,已经有许多不错的 Kotlin 库可供您立即使用。

以下是一些最有用的库:

  • kotlin-statistics 是一个提供了一组扩展功能的库,用于执行探索性和生产性统计信息。它支持基本的数字列表 / 序列 / 数组函数(从总和到偏度)、切片运算符(例如 countBy、simpleRegressionBy 等)、分箱操作、离散PDF 采样、naive bayes 分类器、聚类、线性回归等。

  • kmath 是一个受 numpy 启发的库; 该库支持代数结构和运算、类似数组的结构、数学表达式、直方图、流操作、commons-math 和 koma 的包装器等。

  • krangl 是一个受 R 的 dplyr 和 Python 的 pandas 启发的库; 该库提供使用功能样式的 API 进行数据操作; 它允许您过滤、转换、聚合和重塑表格数据。

  • lets-plot 是一个用于基于表格数据以声明方式创建图的库。该库的灵感来自 R 的 ggplot 和 The Grammar of Graphics (图形语法),并与Kotlin内核紧密集成。它是跨平台的,不仅可以与 JVM 一起使用,还可以与 JS 和 Python 一起使用。

  • kravis 是另一个受 R 的 ggplot 启发的库,用于可视化表格数据。

有关有用链接的更完整列表,请参阅 Thomas Nield 的 Kotlin 数据科学资源

Lets-Plot for Kotlin

Lets-Plot 是一个开源绘图库,用于完全用 Kotlin 编写的统计数据。作为一个跨平台库,它具有专门为 Kotlin 设计的 API。您可以通过阅读用户指南来熟悉如何使用此 API。

为了实现交互性,Lets-Plot 与 Jupyter Notebook 的 Kotlin 内核紧密集成。安装并启用 Kotlin 内核后,将以下行添加到 Jupyter Notebook 中:

%use lets-plot

然后,您将能够从单元格中调用 Lets-Plot API 函数,并通过将 ggplot 与 R 或 Python 一起使用,通常会在单元格下面立即看到结果:

NumPy 的 Kotlin 绑定

NumPy 是使用 Python 进行科学计算的流行软件包。它为多维数组处理、线性代数、傅立叶变换、随机数和其他数学任务提供了强大的功能。NumPy 的 Kotlin 绑定是一个 Kotlin 库,通过为 NumPy 函数提供静态类型的包装器,可以从 Kotlin 代码调用 NumPy 函数。

贡献您的力量

整个 Kotlin 生态系统都是基于开源的思想,没有许多贡献者的帮助就不可能实现。面向数据科学的 Kotlin 才刚刚起步,现在需要您的帮助!

 您可以使用以下方法協助:

  • 讨论您遇到难点,并就如何使 Kotlin 更适合数据科学任务(您的任务)分享您的想法。

  • 为与开源数据科学相关的库做点贡献,创建自己的库和工具 – 您认为可以帮助 Kotlin 成为数据科学选择语言的任何内容都可以。

Kotlin 社区在其 Slack 中有一个名为 #datascience 的专用频道。我们邀请您加入此频道,以提问、找出需要帮助的领域以及如何做出贡献,当然还要与社区分享您的反馈和工作。

请记住,Kotlin 仍处于成为数据科学家首选工具的初期。这将是一次激动人心且充满挑战的旅程!它将需要建立一个丰富的工具和库生态系统,并调整语言设计以满足与数据相关的任务的需求。如果发现事情没有按预期进行,请分享您的经验 – 或参与并帮助解决它们。欢迎试试看,特别是 Jupyter 内核和库,并与我们分享您的反馈。

资源

这篇文章中的大多数信息以及更多信息都可以在 Kotlin 官方网站上找到。

KotlinConf 2019 对数据科学进行了更多鼓舞人心的演讲,包括 Alexander Nozik 的 Kotlin for Science (适用于科学的 Kotlin) 和 Erik Meijer 的 Gradient Descent with Kotlin (梯度下降法与 Kotlin)

我们还建议您观看过去两次 KotlinConf 会议上的演讲:Holger Brandl 的演讲 krangl 的创建者,Kotlin 类似于 Python pandas 的创建者),以及 kotlin-statistics 创建者 Thomas Nield 的演讲

今天的内容就到这里了。

总结起来,社区正在以不错的速度采用 Kotlin 进行数据科学,现在轮到了。

Let’s Kotlin!

原文发表于2019年12月20日,作者Andrey Cheptsov