在新的十年裡,什麼程式語言看起來最有希望應用於數據科學?
導言
過去的十年也許已經結束了,下一個十年也許看起來並不那麼有希望,但數據科學的未來肯定是光明的。數據科學無疑仍然是一個熱門職業,而機器學習技術也從未像現在這樣令人興奮!作為一名數據科學家,作為解決問題的最開始的環節,您需要回答的最重要的問題之一是,您應該實際使用什麼語言來獲得您想要的結果。
在過去的幾年裡,我們確實看到了各種語言的數據科學工作生態系統的繁榮。話雖如此,對於許多不同的程式設計師來說,進入這個領域或在語言方面邁出下一步可能是相當困難的。在數據科學領域更是如此,那裡的事情會持續地激動人心。當然,這就是數據科學的樂趣所在;不斷有新的東西要去認識和學習。話雖如此,理想的情況下,可能會有一些新的語言,你可以從這個語言列表中檢查出來,我認為這些語言是有價值的,而且在明年可能會變得更有價值。
Python
在大多數領域,無論是開發,軟體工程,甚至是Web開發,一個新的程式設計師可能想要開始學習如何用Python程式語言來編程。Python不僅是一種多樣化的程式語言,具有數據科學之外的許多功能,而且可能是高級數據分析的最佳工具之一。
通過Pandas,SkLearn,Tensorflow,Keras,NumPy等軟體包,Python的生態系統顛覆了大多數競爭對手。話雖如此,儘管有些人可能更喜歡其他語言的語法,但很難對這種程式語言可用的軟體包數量之少提出異議!幸運的是,許多語言(如R和Julia)的解決方案都有用於調用Python包的包,通常使用C,因為這兩種語言都是基於LLVM的,並且在編譯器方面與C共享類似的體系結構。
除此之外,Python還有非常棒的數值包。不用說,NumPy是一個很好的例子,它是一個用於Python線性代數的實用程序包。Pandas在處理數據方面也很棒,在我個人看來,在用戶友好性方面是無與倫比的。
Python最大的缺點當然是速度。然而,鑑於Python是由基於LLVM的語言C來解釋的,因此它在使用這個編譯器庫的其他語言中將是普遍可擴展的。這就是Python相對於R的真正優勢所在,也是它與其他程式語言(有時是低級程式語言)非常接近的地方。這無疑是Python的一大優勢,因為它不像一種解釋的腳本語言,而是更像一種用於基於C的模塊調用的應用程式編程接口(API)。
R
最受歡迎的數據科學語言選擇是R編程。R是一種很棒的程式語言,它在範式上不同於大多數程式設計師使用的許多其他語言,並且肯定通過這種範式讓人受益很多。R還有一個很棒的數據科學生態系統。
雖然Python有超過200,000個註冊包——比R多得多,但R本質上是一種更加面向統計的語言。話雖如此,R擁有許多久經考驗的工具,如gleam和ggplot2。還有很多更好的軟體包起源於R,現在已經擴展到各種程式語言和軟體包中。
R最大的缺點可能是它的速度。雖然Python也不算是一種速度很快的語言,但是C語言對它的解釋使得將C代碼作為Python模塊運行是非常可行的。話雖如此,更多的分析和基於可視化的數據科學家肯定會更喜歡R的聲明式函數語法,而同時他們仍然會編譯完全構建的應用程式。如果使用R的原因不是為了以專業的方式使用它,也不是為了將它部署到生產中,那麼它當然仍然可以作為一種突出的學習經驗。
最近,在數據科學領域,R肯定已經退居Python之後。我認為這些理由當然是有道理的,我當然喜歡這兩種語言,因為它們在不同方面各有其用武之地。這兩個肯定都值得一挑。
雖然R是一種用於統計,數據分析和機器學習的優秀語言,但它也不是沒有問題。當然,一個明顯的問題就是語言的速度。一些數據科學家也從來不需要運行調用大量線程的機器學習算法。話雖如此,在數據科學中,仍然有一些方法可以用R來處理任何事情,儘管可能不是沒有一些問題。但是,如果你像我一樣,也痴迷於機器學習,那麼你可以選擇一種較新的程式語言Julia,它是一種編譯後的JIT語言,以其速度而備受推崇。
Julia
對於機器學習的未來,如果有什麼我可以肯定地說我感到興奮的話,那毫無疑問就是Julia程式語言和它的生態系統。Julia是一種使用多重分派作為範例的高性能編譯程式語言。它可以採取程式設計師在典型程式語言中習慣的對類型的簡單處理,並且對其賦予全新的用途。
Julia相對於競爭對手的最大優勢當然是速度。雖然Julia是一種專注於數學計算的完美範例的語言,但不用說速度也是它的優勢的一部分。Julia的速度通常可以與C媲美,這也是數據科學界許多人推崇它的一個潛在原因。
話雖如此,我認為關於Julia的一些東西也被低估了,那就是語言是如何對待它的範式的。它是一種令人愉快的語言,因為語言本身永遠不會妨礙程式設計師想要表達的算術。此外,Julia代碼的編寫非常類似於常規數學的語法,這使得它特別適合我們這些科學迷。
2021年學習Julia語言的最大障礙肯定是生態系統。雖然能夠編寫自己的算法是很棒的,但一天只有這麼幾個小時,有時開源開發人員已經將某些東西的偉大實現寫進了其他程式語言。話雖如此,Julia語言還是有一些令人興奮的軟體包值得一查!
此外,Julia之所以偉大,是因為它不僅是一種編譯速度快的語言,而且編寫速度也快。雖然Julia的速度和編譯可能會吸引其他人,但一些科學程式設計師可能對Julia的語法非常感興趣。Julia使用多重分派作為範例。這意味著Julia中的任何內容,從函數調用到類型和表達式,都將使用斷言運算符生成lambdified表達式。對於那些不熟悉其他語言中lambda表達式的人來說,它允許只通過創建一個表達式就可以將變量調用到函數中。這就是Julia讓人著迷的地方。
在這令人驚嘆的優勢中,最亮眼的還是我之前提到的——速度。
當然,Julia的速度是出了名的。Julia使用Just In Time(JIT)編譯,它允許在執行時編譯語言。這意味著首先,編譯器的啟動時間更短,其次,類型可以被難以置信地動態處理。通過讓編譯器知道要準備哪種類型,甚至可以用不同的Julia代碼迭代,從而獲得更快的速度。
Scala
另一種以速度著稱的有趣程式語言是Scala。雖然Scala曾經是大多數機器學習工程師的大數據分析工具,但最近隨著新的解決方案的推出,它的受歡迎程度也在逐漸下降。話雖如此,雖然掌握Scala或Java可能不如十年前對數據科學有價值,但對Hadoop和Spark的了解無疑是非常重要的,並且這些技能可以轉化為對其他伺服器體系結構和其他語言包的了解,例如PySpark。
話雖如此,我在日常工作中使用Scala的次數比預期的少得多。但並不是所有的工作都是一樣的,Scala無疑是一種很棒的程式語言。影響Scala的最大問題主要是時間,以及依賴項缺乏現代化。很多時候,在科學中,依賴關係真的會變得一團糟。對於Python和Julia這樣的語言,包管理器的能力可能有點太過分了,而有時Scala的情況就不那麼簡單了。
Scala的最大障礙可能是採用。Scala已經慢慢地但肯定地變得越來越不受歡迎了。我認為這部分歸功於數據分析的興起,以及最近機器學習生態系統的快速發展。雖然Scala在處理大數據時可能仍然被少量使用,但這種情況似乎正在迅速變化。
C++
今年我會考慮的最後一種數據科學語言是C++。雖然人們通常認為C++與數據科學不像Python那樣和諧,但它是一種經過14年發展的久負盛名的語言。您可能有幾個原因想要使用C++,但當然也有一些原因會讓數據科學中不考慮使用C++。
最大的原因是因為C++本質上是一種相對命令式的語言,它需要更多的狀態和內存管理,而不是使用更多的聲明性語言,比如像Python那樣。話雖如此,對於實驗來說,C++可能不是我會使用的語言——因為它是靜態類型的,當涉及到處理數據時可能會引起一些相當大的麻煩。
話雖如此,雖然C++可能不是用於實驗和分析的最佳語言,但在生態系統中有一些引人注目的庫可能會吸引任何機器學習工程師的注意。這裡有幾個很好的例子可以提及,比如Shogun,MLPack,OpenCV,以及所有典型的埠,這些埠可以在最後一種語言中找到,比如Tensorflow。此外,與Python和R等其他的語言相比,C++自然是一種快得多的語言。這意味著用C++代碼和C++生態系統構建的算法通常比它的競爭對手運行得快得多。
信不信由你,C++實際上是機器學習中相當流行的語言。對於更多的基於數據管道/模型的數據科學工作,這一點尤其正確,這些工作可能在一個大型團隊中共享。這與該語言不適合分析項目的原因相同,因為許多程式設計師可能更頻繁地一起為同一個目標工作。
目前C++語言的最大障礙可能是採用。雖然C++確實有一系列可以選擇的包,但是調試或解決問題可能會非常困難。就通用性而言,C++無疑是當今最好的語言之一,但由於其他語言具有更強的聲明性(和數學)能力,它可能不是專門用於數據分析的好選擇。這當然是一個取決於個人的東西,而且需要明確的是,C++可能也不想成為你可以學習的第一門數據科學語言。
另一方面,使用C++語言有很多很大的優勢。它可以提供一些其他語言無法實現的非常棒的功能!如果您想儘快開始使用C++,那麼學習一下線性代數是一個很好的起點。
結論
在2021年,數據科學家們在選擇上會變得異常任性。雖然大多數行業都轉向了Python,但幸運的是Python不是唯一可用的程式語言和/或生態系統。R當然也已經存在很長時間了,而且它將是語言中另一個很好的選擇。此外,在過去的一年裡,新崛起的Julia的生態系統和用戶群確實蓬勃發展,使得Julian ML,stats和analytics變得更加可行。
此外,仍然有幾十萬不同的工作崗位在拼命地尋找Scala,C和C++開發人員——特別是具有DS/ML技能的開發人員。話雖如此,我認為所有這些語言肯定都是可行的選擇!
那麼,在2021年,你應該選擇這些偉大的語言中的哪一種來學習或使用DS/ML呢?當然,答案幾乎普遍取決於你需要練習和體驗的技能。C++可能比學習Python,R,甚至Julia要難得多。Scala也不像其他一些語言那麼容易,但是那些在基於Java的程式語言方面有經驗的人可能會發現這種語言很有吸引力。那些完全沒有經驗的人也可能希望從查詢框架開始,比如SQL。