數(shù)據(jù)科學是技術領域中最時髦的領域。數(shù)據(jù)科學專業(yè)人員的需求量巨大,以至于Glassdoor連續(xù)四年將其評為美國第一名。盡管產(chǎn)生了共鳴,但是數(shù)據(jù)科學對于許多程序員而言還是令人生畏的,因為它需要強大的數(shù)學基礎,并且由于編碼的先決條件而對數(shù)學家來說是不可取的。這就是為什么數(shù)據(jù)科學中需求與供應之間的差異巨大。那么在數(shù)據(jù)科學領域中,Java或Python應該學哪個呢?如今有那么一句俗話,如果想獲得可以找到工作的技能,那么數(shù)據(jù)科學是您的最佳選擇。
在數(shù)據(jù)科學之旅的開始,您將需要選擇一種編程語言來運行算法。開發(fā)人員使用許多編程語言,例如R,Clojure,Julia或Scala。
但是,在這篇文章中,我想比較導致StackOverflow的“頂級軟件開發(fā)語言”調查的兩種語言-Python和Java。讓我們討論這些技術在數(shù)據(jù)科學中的優(yōu)點,缺點和應用。
Python:學術界和企業(yè)界的熱門選擇
目前,Python主導了數(shù)據(jù)科學。根據(jù)Kaggle的一項調查,有93%的數(shù)據(jù)科學家使用該語言-相比之下,SQL的54%和R的46%令人沮喪。在四分之三的程序員選擇DS項目語言的情況下,很顯然,技術社區(qū)對Python的熱愛是很強烈的。
在數(shù)據(jù)科學中如此廣泛使用Python的原因是什么?我們僅舉幾例:
易于收集數(shù)據(jù)
數(shù)據(jù)收集是數(shù)據(jù)科學的核心。處理不同格式的大量信息的能力決定了任何科學家的下一個項目的效率和成功。
在這方面,Python是一個強大的選擇:它支持最流行的數(shù)據(jù)格式(CSV,JSON,TSV等),并且有許多庫可以幫助實現(xiàn)該過程的自動化(例如BeautifulSoup)。健壯的數(shù)據(jù)收集基礎設施在Python的崛起中扮演了重要角色,而Python成為機器學習和AI的默認語言。
面向對象
學習OOP的概念是大多數(shù)計算機科學課程的一部分。開發(fā)人員最初學習的大多數(shù)語言都是面向對象的:Java,C和其他語言。這就是為什么在進行DS項目時,程序員更喜歡使用面向對象的語言-Python是其中之一。
Python的面向對象性質使它比Scala或R更容易學習。我應該提到,就編碼的便利性而言,Python并不是A+–例如,我的許多同齡人都不愿意手動加白-隔開他們的代碼。
廣泛的數(shù)據(jù)建模工具集
數(shù)據(jù)建模是執(zhí)行任何項目的重要組成部分,因為它允許開發(fā)人員減小數(shù)據(jù)集的尺寸并提高算法的執(zhí)行速度。有很多數(shù)據(jù)建模操作–數(shù)值建模,科學計算等。
擁有在整個過程中發(fā)揮作用的基礎架構對開發(fā)人員而言非常有用-這就是Python完全達到目標的地方。該語言提供了簡化數(shù)據(jù)建模的工具-NumPy用于數(shù)值運算,ScikitLearn用于將ML算法應用于數(shù)據(jù)集,SciPy用于科學計算。
易于學習
開發(fā)人員比其他編程語言更多地使用Python的原因之一是,更多的開發(fā)人員知道如何使用Python進行編碼。該技術已包含在大多數(shù)大學CS課程中,并擁有許多教科書,在線課程和教程。
Python學習者社區(qū)非?;钴S且熱忱,以至于您問:“我應該首先學習哪種編程語言?”毫無疑問,在一個技術論壇上,您會收到一些提及Python的回復。
Java:一種我們討厭討厭但無法生存的編程語言
許多開發(fā)人員都不愿意學習Java–是因為他們對大量學習資料感到害怕,或者是因為他們不同意Oracle做出的行政決策(例如起訴Google侵犯版權)。而且,由于Java已有很長的歷史了,它不再給程序員帶來新鮮的氣氛或刺激。
話雖如此,當您瀏覽數(shù)據(jù)科學職位空缺時,通常會在所需技能列表中看到Java和Python。歸根結底,該語言在數(shù)據(jù)科學中起著至關重要的作用,并帶來了許多好處:
數(shù)據(jù)科學工具的骨干網(wǎng)
學習Java進行數(shù)據(jù)科學的原因之一是它是Hadoop生態(tài)系統(tǒng)的基礎語言。即使不是直接在Java上構建的工具(例如Storm或Spark,它們都基于Scala)也可以在Java虛擬機上運行。因此,在Java編程中具有扎實的基礎將有助于您更快地工作,并充分利用所有可用的工具。
高性能
盡管Java有其弱點(例如,無與倫比的代碼冗長性),但在代碼速度和可伸縮性方面,它比Python差強人意。由于Java是在沒有Python的地方編譯的,因此它可以更快地執(zhí)行應用程序代碼。
至于可伸縮性,Java在以下方面擊敗了Python:多線程支持。
安全。許多開發(fā)人員更喜歡使用Java構建大型工具,因為他們可以使用加密技術,復雜的身份驗證和訪問控制。
減少了運行時錯誤的數(shù)量–作為一種靜態(tài)類型的語言,Java具有一種安全系統(tǒng),可以鼓勵開發(fā)人員校對其應用程序。
促進算法部署
當技術團隊負責人希望開始利用數(shù)據(jù)科學算法的功能,而不是改變其平臺的整個基礎結構時,他們更愿意聘請精通Java并將這些算法與代碼庫其余部分聯(lián)系起來的候選人。
這就是為什么Java編碼現(xiàn)在并將成為企業(yè)中大多數(shù)DS職位的前提條件。與僅使用Python的開發(fā)人員相比,技術團隊負責人更喜歡Java/Python的另一個原因是他們的工作場所靈活性。
精通兩種語言的編碼人員可以輕松分配給新項目或任務。
大量的AI和數(shù)據(jù)處理庫
由于數(shù)據(jù)科學基礎架構的強大功能,Java與Python相當。有許多框架和庫可幫助開發(fā)人員簡化和自動化工作流程。以下是一些使用最廣泛的Java編寫的數(shù)據(jù)科學工具:
ADAMS–機器學習中使用的工作流引擎。
Deeplearning4j–用于Scala和Java的健壯的深度學習庫,已通過開源許可證分發(fā)。
Mahout–基于Java的機器學習框架,是Hadoop生態(tài)系統(tǒng)的一部分。
StanfordClassifier–用Java編寫的工具,用于將項目分組為k類。
在選擇數(shù)據(jù)科學技術時,Python和R仍然是許多開發(fā)人員的首選。但是,這并不意味著有抱負的數(shù)據(jù)科學家不應將Java視為其學習曲線的一部分。我們主要在部署DS算法時談論Java-但是,它在機器學習和人工智能中具有大量獨立應用程序。
盡管要有足夠的決心和經(jīng)過深思熟慮選擇的資源來一次學習兩種編程語言并不容易,但是掌握Java和Python并成為熟練,多才多藝的數(shù)據(jù)科學家,您應該不會遇到任何問題。想了解更多關于數(shù)據(jù)科學的信息,請繼續(xù)關注中培偉業(yè)。