为有牺牲多壮志,敢教日月换新天。

[Kotlin参考]一、总览-(5)Kotlin数据科学

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(let_us_code)
➤博主域名:https://www.zengqiang.org
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/12152292.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

Kotlin用于数据科学

数据科学在信息技术中具有特殊的地位:它同时包含软件开发和科学研究的各个方面。作为一门学科,数据科学涵盖了广泛的领域:数据工程,数据分析,机器学习,可视化等等。

为了涵盖所有这些不同领域,软件行业拥有许多用于数据科学的技术和工具。这些包括框架,特定的IDE(称为Notebook),绘图工具和专门为数据分析和数学研究设计的编程语言。

通用语言也可以应用于数据科学,而Kotlin已经被数据科学所采用。在这里,我们将向您介绍一些将Kotlin用于数据科学时有用的知识。

工具类

现代软件开发人员很少会在纯文本编辑器中编写代码,而不再通过命令行运行它。相反,他们倾向于使用可以在一个工具中处理所有开发任务的集成开发环境(IDE)。数据科学家有类似的工具,称为笔记本笔记本使用户可以进行研究并将其存储在单个环境中。在笔记本中,您可以在代码块旁边编写叙述文本,执行代码块,然后以所需的任何格式查看结果:输出文本,表格,数据可视化等等。

Kotlin提供了与两个流行笔记本的集成:Jupyter和Apache Zeppelin,它们都允许您编写和运行Kotlin代码块。

Jupyter内核

开源项目Jupyter提供了著名的基于Web的开发环境Jupyter Notebook对于代码执行,Jupyter使用内核的概念-分别运行并根据请求执行代码的组件,例如,在笔记本中单击“运行”时。

Jupyter团队维护着一个内核-IPython,用于运行Python代码。但是,还有其他社区维护的用于不同语言的内核。其中包括用于Jupyter笔记本Kotlin内核使用此内核,您可以在Jupyter笔记本中编写和运行Kotlin代码,并使用以Java和Kotlin编写的第三方数据科学框架。

设置Kotlin内核

Kotlin内核需要安装Java 8。

要安装内核,请使用Conda

 
 
 
 
 
conda安装kotlin-jupyter-kernel -c jetbrains
 
 
 

一旦安装了内核,就可以运行Jupyter笔记本并切换到Kotlin内核。这就是全部,然后您可以在笔记本中编写和运行Kotlin!

Jupyter笔记本中的Kotlin

您可以在此处找到有关Jupyter的Kotlin内核的更多信息

Zeppelin口译员

Apache Zeppelin是一种流行的基于Web的交互式数据分析解决方案。Zeppelin为Apache Spark 集群计算系统提供了强大的支持,这对于数据工程特别有用。Spark提供了多种语言的高级API。

Zeppelin中的语言支持由解释器提供-允许用户使用特定语言或数据处理后端的插件。有许多社区维护的针对不同编程语言的口译员。我们提供给您的是Apache ZeppelinKotlin解释器,它增加了Kotlin支持。

使用Kotlin口译员设置Zeppelin

当前,最新版本的Zeppelin(0.8.2)尚未附带捆绑的Kotlin解释器。但是无论如何,它可以在齐柏林飞艇的主分支中找到。因此,要向Zeppelin添加Kotlin支持,您需要从源代码构建自己的版本。

要构建Zeppelin的自定义版本,您将需要:

首先,从Zeppelin存储库中检出master分支:

 
 
 
 
 
git clone --depth = 1  git @ github.com:apache / zeppelin.git
 
 
 

要么

 
 
 
 
 
git clone --depth = 1 https://github.com/apache/zeppelin.git
 
 
 

要使用Maven构建Zeppelin,请转到Zeppelin目录并运行以下命令:

 
 
 
 
 
mvn clean package -DskipTests  -Pspark-2 .4 -Pscala-2 .11
 
 
 

然后使用以下命令运行Zeppelin:

 
 
 
 
 
./bin/zeppelin-daemon.sh 开始
 
 
 

现在可以在上使用Zeppelin UI http://localhost:8089

要了解如何在Spark集群中部署具有Kotlin支持的Zeppelin,请参阅此说明

图书馆

对于软件工程而言,任何领域的重要部分都是相关领域框架的可用性。对于数据科学,这包括机器学习,数据分析,可视化等领域。幸运的是,已经有很多用Kotlin编写的数据科学框架。还有更多用Java编写的框架,这是完美的,因为可以从Kotlin代码中无缝调用它们。

以下是两个简短的库列表,您可能会发现它们对数据科学有用。

Kotlin图书馆

  • kotlin-statistics是一个提供探索和生产统计信息扩展功能的库。它支持基本的数字列表/序列/数组函数(从sumskewness),切片运算符(例如countBysimpleRegressionBy),装箱操作,离散PDF采样,朴素贝叶斯分类器,聚类,线性回归等。

  • kmath是一个受NumPy启发的图书馆该库支持代数结构和运算,类似数组的结构,数学表达式,直方图,流运算,围绕commons-math和 koma的包装等。

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

  • lets-plot是一个用Kotlin编写的统计数据的绘图库。Lets-Plot是多平台的,不仅可以与JVM一起使用,还可以与JS和Python一起使用。有关更多信息,请参见下文

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

Java库

由于Kotlin提供了与Java的一流互操作,因此您还可以在Kotlin代码中将Java库用于数据科学。以下是此类库的一些示例:

  • DeepLearning4J -Java的深度学习库

  • ND4J -JVM的高效矩阵数学库

  • Dex-基于Java的数据可视化工具

  • Smile-全面的机器学习,自然语言处理,线性代数,图形,插值和可视化系统

  • Apache Commons Math -Java的通用数学,统计信息和机器学习库

  • OptaPlanner-用于优化计划问题的求解器实用程序

  • 图表 -开发中的科学JavaFX图表库

  • CoreNLP-自然语言处理工具包

  • Apache Mahout-用于回归,聚类和推荐的分布式框架

  • Weka-用于数据挖掘任务的机器学习算法的集合

如果此列表不能满足您的需求,您可以在Thomas Nield Kotlin数据科学资源摘要中找到更多选项 

Lets-Plot for Kotlin

Lets-Plot for Kotlin是用于Lets-Plot的Kotlin API,该库是完全用Kotlin编写的统计数据的开源绘图库。Lets-Plot建立在分层图形的概念上,该概念首先在Leland Wilkinson的著作《图形语法》中进行了描述 ,后来在ggplot2软件包中实现。

Lets-Plot for Kotlin与用于Jupyter笔记本Kotlin内核紧密集成安装并启用Kotlin内核后,将以下行添加到Jupyter笔记本中:

 
 
 
 
 
使用use-plot
 
 
 

就是这样,现在您可以从Lets-Plot调用函数并查看结果。

情节图

NumPy的Kotlin绑定

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

KNumpy为NumPy函数提供了静态类型的包装器。由于Kotlin的功能,KNumpy的API与NumPy的API非常相似。这使有NumPy经验的开发人员可以轻松地切换到KNumpy。这是两个相等的代码示例:

 
 1 # Python
 2 
 3 import numpy as np
 4 a = np.arange(15).reshape(3, 5)
 5 
 6 print(a.shape == (3, 5))        # True
 7 print(a.ndim == 2)              # True
 8 print(a.dtype.name)             # 'int64'
 9 
10 b = (np.arange(15) ** 2).reshape(3, 5)

 

// Kotlin 

import org.jetbrains.numkt.*

fun main() {
    val a = arange(15).reshape(3, 5)
    
    println(a.shape.contentEquals(intArrayOf(3, 5))) // true
    println(a.ndim == 2)                             // true
    println(a.dtype)                                 // class java.lang.Integer

    // create an array of ints, we square each element and the shape to (3, 5) 
    val b = (arange(15) `**` 2).reshape(3, 5)
}

与Python不同,Kotlin是一种静态类型的语言。这样可以避免使用KNumpy避免整个类的运行时错误:Kotlin编译器会在较早的阶段检测到它们。

 1 // Kotlin 
 2 
 3 // ...
 4 
 5 val a = ones<Int>(3, 3) * 3
 6 val b = Random.random(3, 3)
 7 
 8 b *= a // Success
 9 a *= b // Compilation error: 
10 // Type mismatch: inferred type is KtNDArray<Double> but KtNDArray<Int> was expected

 

posted @ 2020-01-05 14:07  为敢技术  阅读(725)  评论(0编辑  收藏  举报