今年的KotlinConf 2019, Roman Belov概述了在Kotlin上研究資料科學的方法。該演講現已釋出全網觀看,我們決定記錄並分享更多Kotlin為資料科學定製的工具及程式碼庫。
Kotlin如何去適配資料科學呢?近年來資料分析的大量需求,使資料科學這一學科得以復甦。但其復甦也離不開合適工具的支援。在以前,資料科學需要專門設計的程式語言,但如今通用語言也能滿足要求了。當然,這要求通用語言有正確的設計方向,和來自社群的支援。而符合所有條件的語言,例如Python,是資料科學中最流行的語言。
遵循於Kotlin多平臺的原則,Kotlin旨在將開發人員的經驗及其互操作性擴充套件到其他平臺。 Kotlin的優勢在於簡潔性,安全性和互操作性。 這些基本的語言特徵使其成為適合各種任務和平臺的出色工具。 資料科學當然是其中之一了。
好訊息是,社群已經開始為Kotlin進行資料科學的適配,並且工作進展非常迅速。 以下報告簡短概述了Kotlin對資料科學的適配進度,包括程式碼庫和用於資料科學的工具。
Jupyter
首先,得益於它們的互動性, Jupyter notebooks對於資料的轉換,視覺化和呈現非常方便。 憑藉Jupyter的擴充套件性和開源性質,它已是一個圍繞資料科學的大型生態系統,並已整合到許多與資料相關的解決方案中。 其中包括為Jupyter notebooks編寫的Kotlin核心。 通過該核心,你可以在Jupyter notebooks中編寫和執行Kotlin程式碼,並使用以Java和Kotlin編寫的第三方資料科學框架。
可以在該repo中找到可供複製的Kotlin Jupyter notebooks示例。要快速使用Kotlin膝上型電腦,你可以在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,你已經能在Jupyter和Zeppelin Spark中通過Kotlin呼叫其Java API,而無需擔心任何問題。 但是,我們正在通過Spark的Dataset API以提供對Kotlin類的完整支援來改善這種整合。Spark’s shell對 Kotlin的支援也在開發中。
Libraries
在沒有程式碼庫的情況下將Kotlin用於資料科學是沒有意義的。 但幸運的是,在社群的努力下,已經有許多不錯的Kotlin庫提供使用了。
這裡列出部分非常有用的庫:
- kotlin-statistics是一個提供了擴充套件函式以進行探索性和生產性資訊統計的庫。 它支援基本的數字列表/序列/陣列函式(從彙總到偏態),切片運算子(例如countBy,simpleRegressionBy等),binning operations,discrete PDF sampling,naive bayes classifier,clustering, linear regression等。
- kmath是一個受numpy啟發的庫; 該庫支援代數結構和運算,類似陣列的結構,數學表示式,直方圖,流運算,封裝了commons-math和koma等。
- krangl 是受R的dplyr和Python的熊貓啟發的庫; 該庫允許通過函式式API進行資料操作; 它允許你過濾,轉換,聚合和重塑表格資料。
- lets-plot是一個用以基於表格資料宣告方式繪製圖表的庫。 該庫的靈感來自R的ggplot和The Grammar of Graphics,並且與Kotlin核心緊密整合。 它是多平臺的,不僅可以與JVM一起使用,還可以與JS和Python一起使用。
- kravis是另一個受R’s ggplot啟發的庫,用於表格資料的視覺化。
關於更完整對的推薦連結列表,請參閱Thomas Nield的Kotlin資料科學資源。
Lets-Plot for Kotlin
Lets-Plot是一個完全用Kotlin編寫的開源資料統計圖表庫。作為一個多平臺庫,它包含了專門為Kotlin設計的API。 你可以通過閱讀使用者指南來熟悉這些API。
為了實現互動性,Lets-Plot與Jupyter notebooks的Kotlin核心緊密整合。 安裝並啟用Kotlin核心後,將以下配置行新增到Jupyter notebooks中:
%use lets-plot
然後你就能在單元格中呼叫Lets-Plot的API函式了, 並通過使用ggplot使用R或Python:
Kotlin bindings for NumPy
NumPy 是使用Python進行科學計算的著名第三方包。 它為多維陣列處理,線性代數,傅立葉變換,隨機數和其他數學任務提供了強大的功能。 Kotlin Bindings for NumPy 庫提供了封裝NumPy的靜態函式,使得可以從Kotlin程式碼中呼叫NumPy函式。
貢獻
整個Kotlin生態都基於開源的思想,沒有貢獻者的幫助是不可能實現的。 為資料科學而生的Kotlin才剛萌芽,現在需要你的澆灌! 可通過以下方式提供幫助:
- 闡述你的痛點,並就如何使Kotlin更適合資料科學任務(你的任務)分享你的想法。
- 為開源的資料科學相關的庫做貢獻,並建立自己的庫和工具-只要你認為可以使Kotlin更適合資料科學。
Kotlin社群在其Slack中有一個名為#datascience的專用頻道。 歡迎你加入該頻道並根據需要幫助的領域以及如何做出貢獻進行提問,當然還歡迎向社群分享你的反饋。
當前Kotlin只是資料科學家的備選方案。 但這將是一次激動人心且充滿挑戰的旅程! 它將建立一個具有豐富的工具和庫的生態系統,並調整語言設計以滿足與資料相關的任務的需求。 如果事情沒有按預期進行,請分享你的經驗-或參與並幫助解決它們。 給它們一個展示的機會,特別是Jupyter核心和庫,並向我們分享你的反饋。
資源
對於這篇文章的大部分和未列出的內容,都可以在Kotlin官方網站獲取。
KotlinConf 2019上有很多關於資料科學的激動人心的討論, 包括Kotlin for Science by Alexander Nozik和Gradient Descent with Kotlin by Erik Meijer.
我們同樣建議觀看之前的兩期KotlinConf演講:Holger Brandl的演講 (krangl的創始人, Python的pandas Kotlin版本),和Thomas Nield的演講 (kotlin-statistics創始人)。
今天就先到這裡 (亦或是今年)。總的來說,社群對Kotlin用於資料科學的適配正以一個驚人的速度進行著,現在,該你大展身手了。
Let’s Kotlin!