fbpx

2018年資料科學前 15 名熱門 Scala 程式庫

前言:  這篇是翻譯自  Top 15 Scala libraries for data science in 2018
感謝作者 ActiveWizards 公司授權翻譯

我們前面的文章討論的前幾名的 Python 程式庫( libraries ),現在我們來談談 Scala 的,這是最近另一個資料科學傑出的語言。它之所以受歡迎,主要是因為 Spark , 大數據處理引擎選擇之一,它是用Scala 編寫的,提供 Scala 的原生 API。

我們在這兒不會去深入比較 Scala 和 Python ,但要注意的重點是,不像 Python,Scala 是編譯型語言,且在它上面的程式碼執行得更快(較純用 Python 來說,且不是像 NumPy 這樣的專業程式庫)。

與 Java 對比,寫 Scala 愉快多了,因為同樣的邏輯,通常可以比較少行的程式碼寫出。Scala 的功能絲毫不遜色於 Java,甚至有一些特性是更加先進。 Java 的老前輩在這裡可以提供大量的反駁,但毫無疑問的是 Scala 對資料科學任務更適合。

目前,Python 和 R 仍是快速資料分析的主要語言,也是建構、探索和操縱強大的模型,而 Scala 成為大數據作業的功能性產品開展的主要語言,因為後者需要穩定、靈活性高、速度快、可擴展性等特性。通常,在研究階段,分析和模型都是用 Python 完成,然後在生產過程中用 Scala 實現。

為方便起見,我們準備了用 Scala 執行機器學習和資料科學任務的最重要程式庫的全面概述。我們將使用相對 Python 工具的類比對一些重要方面做更好地說明。實際上,在 Scala 就一頂層全面的工具形成資料科學與大數據解決方案的基礎,名為 Apache Spark,被用 Scala 和 Java 寫的一大範圍的程式庫和工具輔助。 讓我們來仔細看看。

資料分析和數學

1. Breeze (提交: 3316, 貢獻者: 84)

Breeze 以 Scala 的主要科學計算程式庫數據著稱。 它從 MATLAB 的資料結構和 Python 的 NumPy 類( classes )中汲取想法。 Breeze 運用資料陣列提供快速有效的操作,並支持許多其他作業的實現,包括:

  • 矩陣和向量運算:用於創建、轉置( transposing )、填充數字、進行元素間的操作、反轉( inversion )、計算行列式,以及更多能滿足幾乎所有需求的其他選項。
  • 機率和統計功能:從統計分佈和計算描述性統計(如平均值、變異數和標準偏差)到馬爾可夫鏈模型許多變化。 統計的基本套件是  breeze.stats 和 breeze.stats.distributions
  • 優化:這意味著調查本地或全局最小函數。優化方法儲存在 breeze.optimize package中。
  • 線性代數:所有基本運算都依賴 netlib-java 程式庫,使得 Breeze 在代數計算方面非常快。
  • 信號處理操作:對於數位信號工作很必要。Breeze 中重要運算例子是卷積( convolution )和傅立葉轉換( Fourier transformation ),它將給定的函數分解為正弦( sin )和餘弦( cos )分量的總和。

Breeze 還提供了繪圖( plotting )可能性,我們將在下面討論。

2. Saddle (提交: 184, 貢獻者: 10)

就像Scala的數據操作工具包是Saddle一樣。它是R和Python的pandas庫的Scala模擬。就像pandas或R中的數據幀一樣,Saddle基於Frame結構(2D索引矩陣)。

總共有五種主要數據結構,即:

Vec( 1D vector ) Mat( 2D matrix )
vec.jpg mat
Series (1D indexed matrix) Frame (2D indexed matrix)
series frame.jpg
Index (hashmap-like)
index.jpg

Vec 和 Mat 類( classes ) 建於 Series 和 Frame 的基礎上。你可以對這些資料結構實施不同的操作( manipulations ),並用他們做基本的資料分析。關於 Saddle 的另一個很棒的地方是它對缺失值( missing values )的穩健性。

3. Scalalab (提交: 23, 貢獻者: 1)

ScalaLab 是 Scala 對 MATLAB 計算功能的轉譯。此外,ScalaLab 可以直接呼叫和存取 MATLAB 腳本的運算結果。

與以前的計算程式庫的主要區別在於 ScalaLab 使用自己的特定域的語言ScalaSci。方便地,Scalalab 可以訪問各種科學 Java 和 Scala 程式庫,因此你可以輕鬆輸入資料,然後使用不同的方法來操作與計算。 大多數技術類似於 Breeze 和 Saddle。此外,如在 Breeze,也有機會製圖( plotting ) 進一步解釋結算出來的資料。

NLP

4. Epic (提交: 1790, 貢獻者: 15) & 5. Puck (提交: 536, 貢獻者: 1)

Scala 有一些很棒的自然語言處理( NLP )的程式庫,為 ScalaNLP 的一部分,包括Epic 和 Puck。這些程式庫主要用作文本解析器( text parsers ),由於高速和 GPU 使用的關係,如果你需要解析數千條句子,Puck 會比較方便。 另外,Epic 以其預測框架著稱,它能採用結構化預測建構出複雜系統。

視覺化

6. Breeze-viz (提交: 29, 貢獻者: 3)

顧名思義,Breeze-viz 是由 Breeze for Scala 開發的繪圖程式庫。它基於著名的 Java 圖表程式庫 JFreeChart,並且具有類似 MATLAB 的語法。雖然 Breeze-viz 用處比 MATLAB 、Python 的 matplotlib 或 R 的機會少得多,但它在開發和建立新模型的程序中仍然非常有用。

breeze-vis-(1).jpg

7. Vegas (提交: 210, 貢獻者: 14)

另一個用於資料視覺化的Scala 程式庫是 Vegas。它比 Breeze-viz 功能更強大,並允許製作一些繪圖規格,如過濾、轉換和聚合。它的結構類似於 Python 的 Bokeh 和Plotly。

vegas-(1)

機器學習

8. Smile (提交: 1019, 貢獻者: 21)

統計機器智會和學習引擎( Statistical Machine Intelligence and Learning Engine),或簡稱 Smile,在某些方面是一個很有前途的現代機器學習系統。類似於 Python 的 cikit-learn。它是用 Java 開發的,也為 Scala 提供了一個 API。這個程式庫會給你快速和廣泛應用的驚喜,高效的記憶體使用以及運用於分類( Classification )、迴歸( Regression )、最近鄰搜索( Nearest Neighbor Search )、特徵選擇( Feature Selection )等的大量機器學習演算法。

smile.jpg

smile2

9. Apache Spark MLlib & ML 

建立在 Spark、MLlib 程式庫之上,提供各種各樣的機器學習演算法。因是用 Scala 編寫,它提供 Java、Python 和 R 很有用的 API,當然對 Scala 就更有機會提供更靈活的。 該程式庫包含兩個獨立的套件: MLlib 和 ML。 讓我們逐一詳細地看一下它們。

  • MLlib 是基於 RDD 的程式課,包含核心學習演算法,用於分類( classification )、群聚( clustering )、無監督學習( unsupervised learning )技術,由用於實現基本統計(如相關性、假設檢驗和隨機資料生成)的工具支持。
  • ML 是一個較新的程式庫,與 MLlib 不同,它可以處理資料框( data frames  )和資料集( data sets )。 該程式庫的主要目的是給你在資料上建構不同轉換的管道的能力。這管道可以被視為一序列的階段,其每一階段都是一個轉換器( Transformer ),它將一個資料框( data frame )轉換為另一個資料框,或者是一個估算器( Estimator ),一種演算法,可以適應資料框以生成轉換器

每個套件都有其優點和缺點,在實踐上,通常證明兩者一起用更有效。

10. DeepLearning.scala (提交: 1647, 貢獻者: 14)

DeepLearning.scala 是另一種機器學習工具包,可為深度學習提供有效的解決方案。它利用數學公式通過物件導向和函數式程式設計的組合創建複雜的動態神經網路。該程式庫使用多種類型,以及適應類型類( applicative type classes )。 後者允許同時開始多次計算,我們認為這對資料科學家的處理分析至關重要。 值得一提的是,該程式庫的神經網路提供程式並支持所有 Scala 功能。

11. Summing Bird (提交: 1772, 貢獻者: 31)

Summingbird 是一個特定域的資料處理框架,它允許整合批量和線上 MapReduce 計算以及混合批處理/線上處理模式。 設計語言的主要催化劑來自 Twitter 開發人員,他們經常要寫相同的程式碼兩次:第一次是進行批處理( batch processing ),然後進行一次線上處理。

Summingbird 消耗並生成兩種類型的資料:串流(無限序列的元組tuples),以及在某個時間點被視為資料集完整狀態的快照。 最後,Summingbird 為 Storm、Scalding 和用於測試目的內部記憶執行引擎提供了多個平台實踐。

12. PredictionIO (提交: 4343, 貢獻者: 125)

當然,我們不能忽視用於建構和佈署名為 PredictionIO 的預測引擎的機器學習伺服器。 它建立在 Apache Spark、MLlib 和 HBase 之上,甚至在 Github 上被評為最受歡迎的基於 Apache Spark 的機器學習產品。 它讓你能夠輕鬆高效地建構、評估和佈署引擎,實施自己的機器學習模型,並將它們整合到引擎中。

補充

13. Akka (提交: 21430, 貢獻者: 467)

Akka 是由 Scala 的創建公司開發的,是一個用於在 JVM 上建構分散式應用程式的共時框架( concurrent framework )。它使用基於 Actor 的模型,其中 Actor 表示一個訊息接收並做出適當行動的物件。 Akka 取代了Actor 類( class )的功能,這在以前的 Scala 版本中有提供。

主要區別,也被認為是最重要的改進,是 Actors 和基礎系統間的附加層,只需要Actors 處理訊息,同時由框架( framework )處理所有其他復雜情況。所有 Actors 都是按層次排列的,Actors 系統可以幫助 Actors 更有效地互相交流,並通過將他們分成更小的任務來解決複雜的問題。

14. Spray (提交: 2663, 貢獻者: 74)

現在讓我們來看看 Spray – 一套用在 Akka 上建構 REST / HTTP Web 服務的 Scala 程式庫。 它確保非同步、非阻塞的基於 Actor 的高性能請求處理,而內部Scala DSL 提供定義的 Web 服務行為,以及高效便捷的測試功能。

UPD:Spray不再維護,已被 Akka HTTP 暫停。雖然大多數程式庫功能仍然留著,但與此替代連接的串流、模組結構和DSL路由等有一些變化和改進。 遷移指南將幫助你了解所有的發展。

15. Slick (提交: 1940, 貢獻者: 92)

在我們的列表最後但並非最不重要的是 Slick,它代表 Scala 語言整合連接工具包( Language-Integrated Connection Kit )。它是一個用於創建和執行資料庫查詢的程式庫,支援各種常用資料庫,如 H2、MySQL、PostgreSQL 等。某些資料庫可通過 Slick 擴展獲得。

為了建構查詢,Slick 提供了一個功能強大的 DSL,使程式碼看起來就像使用 Scala 集合( collections )一樣。Slick 支援簡單的 SQL 查詢和幾個表的強類型連接( strongly-typed joins )。此外,簡單的子查詢可用於構造更複雜的子查詢.

結論

在本文中,我們概述了一些在執行主要資料科學任務時非常有用的 Scala 程式庫。事實證明,它們對於獲得最佳結果非常有效。你還可以在下面 GitHub 上擷取的活動統計看到每個程式庫的活動狀況 。

conclusion.jpg

你可能會有興趣

喜歡我們的分享嗎?使用以下的社群分享按鈕分享給你的朋友吧!

 

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料

Powered by WordPress.com.

Up ↑

%d 位部落客按了讚: