<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # Kotlin 用于數據科學 ![](https://img.kancloud.cn/4d/d8/4dd85d0d59d8c66fa58c85f05c44d4bf_1440x840.png) 數據科學在信息技術中具有特殊地位:它同時包含軟件開發與科學研究兩方面。作為一門學科,數據科學涵蓋了廣泛的領域:數據工程、數據分析、機器學習、可視化等等。 為了涵蓋所有這些不同領域,軟件行業有許多用于數據科學的技術與工具。其中包含框架、特定的 IDE(稱為*notebook*)、繪圖工具以及專為數據分析與數學研究設計的編程語言。 通用語言也可以應用于數據科學領域,而 Kotlin 已經為數據科學所采用。在此我們會介紹一些關于將 Kotlin 用于數據科學時的實用知識。 ## 工具 現代軟件開發人員很少會在純文本編輯器中編寫代碼并在命令行運行。相反,大家傾向于使用可以在一個工具中處理所有開發任務的集成開發環境(IDE,Integrated Development Environment)。數據科學家也有類似的工具,稱為 *notebook*。notebook 讓用戶可以進行研究并將其存儲在單個環境中。在一個 notebook 中,可以在代碼旁編寫敘述性文本、執行代碼塊及以任何所需格式(輸出文本、表格、數據可視化等等)查看結果。 Kotlin 提供了與兩個流行的 notebook 的集成:Jupyter 與 Apache Zeppelin,它們都支持編寫及運行 Kotlin 代碼塊。 ### Jupyter 內核 開源項目 [Jupyter](https://jupyter.org/) 提供了著名的基于 web 的開發環境 **Jupyter Notebook**。對于代碼執行,Jupyter 使用*內核*的概念——獨立運行的不同組件,并且這些組件根據請求執行代碼,例如,當在一個 notebook 中點擊 **Run** 時。 Jupyter 團隊維護了一個內核——運行 Python 代碼的 IPython。但是,還有其他社區維護的用于不同語言的各種內核。 其中包括**用于 Jupyter notbook 的 Kotlin 內核**。有了這個內核,就可以在 Jupyter notebook 中編寫并運行 Kotlin 代碼,以及使用以 Java 或 Kotlin 編寫的第三方數據科學框架。 #### 設置 Kotlin 內核 Kotlin 內核需要安裝 Java 8。 請使用 [Conda](https://docs.conda.io/projects/conda/en/latest/) 安裝該內核: ```bash conda install kotlin-jupyter-kernel -c jetbrains ``` 一旦內核安裝完畢,就可以運行 Jupyter notebook 并切換到 Kotlin 內核。僅此而已,然后就可以在 notebook 中編寫并運行 Kotlin 了! ![](https://img.kancloud.cn/12/3f/123f73bf621ec2d97b06c8f7f669dd83_1190x383.png) 可以在[這里](https://github.com/cheptsov/kotlin-jupyter-demo/blob/master/index.ipynb)找到關于 Jupyter 的 Kotlin 內核的更多信息。 ### Zeppelin 解釋器 [Apache Zeppelin](http://zeppelin.apache.org/) 是一個流行的基于 web 的交互式數據分析解決方案。Zeppelin 為 [Apache Spark](http://zeppelin.apache.org/docs/latest/interpreter/spark.html)集群計算系統提供了強大的支持,這對于數據工程特別有用。Spark 提供了多種語言的高級 API。 Zeppelin 中的語言支持由*解釋器*提供,解釋器是讓用戶能夠使用指定語言或者數據處理后端的插件。對于不同的編程語言有許多社區維護的解釋器。我們提供了增加 Kotlin 支持的**用于 Apache Zeppelin 的 Kotlin 解釋器**。 #### 設置帶 Kotlin 解釋器的 Zeppelin 目前,最新版本的 Zeppelin(0.8.2)并未內置 Kotlin 解釋器。不過,在 Zeppelin 的 master 分支中有。因此,為了向 Zeppelin 添加 Kotlin 支持,需要從源代碼構建自己的版本。 構建 Zeppelin 的定制版需要: * [Git](https://git-scm.com/) * [Maven](https://maven.apache.org/install.html), * [JDK 8](https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) * 列在[此處](https://zeppelin.apache.org/docs/latest/setup/basics/how_to_build.html#build-requirements)各項依賴 首先,從 Zeppelin 版本庫中檢出 master 分支: ```bash git clone --depth=1 git@github.com:apache/zeppelin.git ``` 或者 ```bash git clone --depth=1 https://github.com/apache/zeppelin.git ``` 使用 Maven 構建 Zeppelin,請切換到 Zeppelin 目錄并運行以下命令: ```bash mvn clean package -DskipTests -Pspark-2.4 -Pscala-2.11 ``` 然后使用以下命令運行 Zeppelin: ```bash ./bin/zeppelin-daemon.sh start ``` 現在可以在 `http://localhost:8089` 打開 Zeppelin UI 了。 如需了解如何在 Spark 集群中部署帶 Kotlin 支持的 Zeppelin,請參見[這個說明](/docs/tutorials/zeppelin-spark-cluster.html)。 ## 相關庫 對于軟件工程來說,任何領域的重要組成部分都有相關領域框架的可用性。對于數據科學,包括諸如機器學習、數據分析、可視化等領域。幸運的是,已經有很多用 Kotlin 編寫的數據科學框架。更完美的是還有更多用 Java 編寫的框架,因為可以在 Kotlin 代碼中無縫調用 Java 框架。 以下是可能對數據科學有用的庫的兩個簡短列表。 ### Kotlin 庫 * [kotlin-statistics](https://github.com/thomasnield/kotlin-statistics) 是一個為探索性統計與生產統計中提供擴展函數的庫。它支持基本的數字列表/序列/數組函數(從 `sum` 到 `skewness`)、切片操作符(諸如 `countBy`、 `simpleRegressionBy`)、分箱(binning)操作符、離散 PDF 采樣、樸素貝葉斯分類器、聚類、線性回歸等等。 * [kmath](https://github.com/mipt-npm/kmath) 是一個受 [NumPy](https://numpy.org/) 啟發的庫。這個庫支持代數結構與運算、類數組結構、數學表達式、直方圖、流運算、[commons-math](http://commons.apache.org/proper/commons-math/) 與[koma](https://github.com/kyonifer/koma) 的包裝等等。 * [krangl](https://github.com/holgerbrandl/krangl) 是一個受 R 語言的 [dplyr](https://dplyr.tidyverse.org/)與 Python 的 [pandas](https://pandas.pydata.org/) 啟發的庫。這個庫提供了采用函數式風格 API進行數據操作的功能;它還包括過濾、轉換、聚合與重塑表格數據的函數。 * [lets-plot](https://github.com/JetBrains/lets-plot) 是一個用 Kotlin 編寫的統計數據繪圖庫。Lets-Plot 是多平臺的,不僅可以用于 JVM,還可以用于 JS 與 Python。更多信息請參見[下文](#lets-plot-for-kotlin)。 * [kravis](https://github.com/holgerbrandl/kravis) 是另一個用于表格數據可視化的庫,其靈感來自于Python 的 [ggplot](https://ggplot2.tidyverse.org/)。 ### Java 庫 因為 Kotlin 提供了與 Java 互操作的頭等支持,所以也可以在用于數據科學的 Kotlin 代碼中使用 Java 庫。 以下是這些庫的一些示例: * [DeepLearning4J](https://deeplearning4j.org/)——一個 Java 深度學習庫 * [ND4J](http://nd4j.org/)——用于 JVM 的高效矩陣數學庫 * [Dex](https://github.com/PatMartin/Dex)——一個基于 Java 的數據可視化工具 * [Smile](https://github.com/haifengl/smile)——一個全面的機器學習、自然語言處理、線性代數、圖、插值與可視化系統 * [Apache Commons Math](http://commons.apache.org/proper/commons-math/)——一個 Java 通用數學、統計與機器學習庫 * [OptaPlanner](https://www.optaplanner.org/)——一個用于優化規劃問題的求解器實用程序 * [Charts](https://github.com/HanSolo/charts)——一個正在開發中的科學 JavaFX 圖表庫 * [CoreNLP](https://stanfordnlp.github.io/CoreNLP/)——一個自然語言處理工具包 * [Apache Mahout](https://mahout.apache.org/)——一個回歸、聚類與推薦的分布式框架 * [Weka](https://www.cs.waikato.ac.nz/ml/index.html)——一組用于數據挖掘任務的機器學習算法 如果這個列表還不能滿足需求,可以在 Thomas Nield 的[**Kotlin 數據科學資源**](https://github.com/thomasnield/kotlin-data-science-resources)摘要中找到更多選項。 ### Lets-Plot for Kotlin **Lets-Plot for Kotlin** 是 [Lets-Plot](https://github.com/JetBrains/lets-plot) 庫的 Kotlin API, Lets-Plot 是一個完全用 Kotlin 編寫的開源的統計數據繪圖庫。Lets-Plot 建立在分層圖形的概念上,該概念首先在 Leland Wilkinson 的著作 [The Grammar of Graphics](https://www.goodreads.com/book/show/2549408.The_Grammar_of_Graphics)中描述,后來在 R 語言的 [ggplot2](https://ggplot2.tidyverse.org/) 包中實現。 Lets-Plot for Kotlin 與[用于 Jupyter notebook 的 Kotlin 內核](http://www.kotlincn.net/docs/reference/data-science-overview.html#jupyter-%E5%86%85%E6%A0%B8)緊密集成。安裝并啟用 Kotlin 內核后,將以下行添加到 Jupyter notebook 中: ``` %use lets-plot ``` 就是這樣,現在就可以調用 Lets-Plot 中的函數并查看結果了。 ![](https://img.kancloud.cn/0b/a0/0ba0bfc8f2f4b43a7e71b04c0228bfab_2797x1513.png) ### NumPy 的 Kotlin 綁定 [**KNumpy**](https://github.com/kotlin/kotlin-numpy/)(**NumPy 的 Kotlin 綁定**)是一個能讓 Kotlin 代碼調用 NumPy 函數的 Kotlin 庫。[NumPy](https://numpy.org/)是使用 Python 進行科學計算的一個流行軟件包。它為多維數組處理、線性代數、傅立葉變換、隨機數以及其他數學任務提供了強大的功能。 KNumpy 為 NumPy 函數提供了靜態類型的包裝。由于 Kotlin 的函數式能力,KNumpy 的 API 與對應的 NumPy API 非常相似。這讓有 NumPy 經驗的開發人員可以輕松切換到 KNumpy。 以下是兩份等價代碼的示例: ```python # Python import numpy as np a = np.arange(15).reshape(3, 5) print(a.shape == (3, 5)) # True print(a.ndim == 2) # True print(a.dtype.name) # 'int64' b = (np.arange(15) ** 2).reshape(3, 5) ``` ```kotlin // 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 // 創建一個整型數組,我們將每個元素取平方,然后重塑為 (3, 5) val b = (arange(15) `**` 2).reshape(3, 5) } ``` 與 Python 不同的是,Kotlin 是一種靜態類型語言。這樣使用 KNumpy 就可以避免運行時的類型錯誤: Kotlin 編譯器會在更早的階段檢測到相應問題。 ```python # Python import numpy as np a = np.ones((3, 3), dtype=int) * 3 b = np.random.random((3, 3)) b *= a # 成功 a *= b # 運行時 TypeError ``` ```kotlin // Kotlin // …… val a = ones<Int>(3, 3) * 3 val b = Random.random(3, 3) b *= a // 成功 a *= b // 編譯錯誤: // Type mismatch: inferred type is KtNDArray<Double> but KtNDArray<Int> was expected ``` </div>
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看