閱讀230 返回首頁    go 阿裏雲 go 技術社區[雲棲]


一份語言選擇指南帶你玩數據科學,選出你心中支持的語言

https://yq.aliyun.com/cloud

ef1442b57c5bbb99f0210d176241ca27996af3af

隨著大數據時代的到來,網絡每天會產生大量的數據,一些行業會對這些數據進行分析並協助企業不斷地發展新業務、創建運營模式等,比如電子商務、推薦係統等。那麼誰對這些大數據進行分析呢?對應的工作領域是數據科學Data Science),該領域需要結合先進的統計知識、定量分析能力和編程能力。涉及到編程,大家都會麵臨一個問題,有太多的編程語言可供選擇,那麼哪些編程語言適合數據科學領域呢?雖然沒有正確答案,但想成為一名成功數據科學家將考慮以下幾點

特異

當涉及到先進的數據科學時,你將不僅僅是老瓶裝新酒了,需要學習掌握你選擇的編程語言提供的特定領域的各種軟件包和模塊。

一般

頂尖數據科學家將具有全麵良好的編程技巧以及處理大量數據的能力。科學數據的日常工作多是圍繞原始數據進行一些處理或數據清洗。

快節奏的商業數據科學世界裏,一般要盡快完成這項工作同時,這也使得技術債務蔓延——隻有明智的做法可以最小化

在某些情況下,優化代碼的性能顯得至關重要,尤其是在處理大量的關鍵任務數據。編譯語言通常比解釋語言快得多;同樣,靜態類型語言比動態類型的故障要多得多顯而易見,權衡這些會下降生產力。在某種程度上,這被看作是一個雙刃劍(一般性-特異性,性能-效率)。每一種語言都會麵臨這個問題考慮到這些核心原則,讓我們看一下數據科學中使用的一些較流行的編程語言。以下是結合自己的個人經驗和研究,僅供參考

R

需要知道2cd2cfdea434c4379eab9d86c615172cd61ba856

R語言誕生於1980年左右的S語言的一個分支,目前該項目是R語言統計計算基金會支持

許可證

免費

讚成的理由

  • 開放源碼軟件包R語言有一個幾乎涵蓋所有的定量和統計應用程序的數據包,包括神經網絡、非線性回歸模型等;
  • 基礎設施是非常全麵的內置一些統計功能和方法處理矩陣代數效果好
  • 數據可視化的能力很強,比如ggplot2

反對的理由

  • 性能方麵R語言不是一個快速的語言
  • 領域特殊性R語言對於統計和數據科學是很好的,不適合通用程序設計;
  • 孤僻,R語言有一些不同於其他編程語言的特點例如:索引1開始等;

裁決—— “為它的設計而精彩”

R語言是一個功能強大的語言,擅長各種統計和數據可視化應用並開放源代碼。

Python

a26627f33f4b19736673936e1413b174e9d21c80

需要知道

它由Guido van Rossum1991年發明,已經成為一個非常流行的通用語言,並在數據科學界廣泛使用的。目前主要版本是目前3.62.7

許可證

免費

讚成的理由

  • Python是一個受歡迎的主流通用程序設計語言它有廣泛的目標模塊和社區支持及一些 API
  • Python是一種易學的語言
  • 一些軟件包如pandas、scikit-learn、tensorflow使得Python成為機器學習應用的不二選擇;

反對的理由

  • 類型安全性:Python是動態類型語言,類型錯誤是預料的;
  • 對於具體的數據統計和分析的目的,有更快和更安全的通用語言替代Python

裁決——“優秀的全才”

Python語言對數據科學而言是一個很好的選擇。很多數據科學過程圍繞ETL過程(提取、轉換和加載)這使得Python的通用性非常適合。還有一些庫比如tensorflow使Python在機器學習領域表現優異

0f0018cd704b137188e3d93191b4b5ab645cc7ce

需要知道

SQL結構性查詢查詢語言)定義、管理和查詢關係數據庫1974以來發生了許多的改變,但核心原則保持不變。

許可證

不同—— 某些是免費的,其他是收費的!

讚成的理由

  • 查詢、更新和操縱數據庫非常高效;
  • 聲明性語法使得SQL語言非常,而且沒有什麼歧義
  • SQL具有非常廣的應用範圍,使其成為一個非常熟悉的有用語言

反對理由

  • SQL的分析能力是相當有限的——除了匯總計數和平均數據等操作外,你的選擇是有限的
  • 對於來自命令式背景的程序員,SQL的聲明性語法會呈現出一個學習遺忘曲線
  • 實現SQL有許多不同工具比如PostgreSQLSQLite等,操作起來難免會“頭疼”;

裁決——“長期且高效”

SQL是有用的作為一個數據處理語言不是作為一種先進的分析工具。然而,大多數據科學過程依賴於ETL,SQL的長壽和效率證明了它對於現代數據科學家來說是一種非常有用的語言。

f1b76d30b8f34ee06ade858111d3809ca9fb0a1b

需要知道

Java是一個非常受歡迎的通用語言運行在Java虛擬機(JVM)上,目前甲骨文公司支持。

許可證

8版——免費!舊版本是收費的

讚成的理由

  • 無處不在許多現代的係統和應用程序是建立在一個java後端;
  • 強類型Java語言確保類型安全
  • Java是一種高性能、通用的匯編語言,這使得它適合於編寫高效的ETL生產代碼和計算密集型機器學習算法;

反對理由

  • 對於特定的分析和更專門的統計程序而言Java冗長使得它不太可能成為首
  • 相比於特定領域語言R語言,沒有大量的可供Java高級統計方法庫

裁決——“數據科學的有力競爭者”

如果將Java作為第一選擇的數據科學語言而言,你會發現Java的性能和類型安全優勢。然而,你沒有考慮用於其他語言比如R或Python範圍具體軟件包。

158a07d0bcf5dbfedb5d1b2c93b246ee522c9806

需要知道

由Martin Odersky2004年開發和發布,Scala運行在JVM的一種語言它是一個多範式語言,支持麵向對象和函數方法。集群計算框架Apache Spark是用Scala寫的。

許可證

免費

讚成的理由

  • ScalaSpark結合相當於高性能集群計算,對於使用高容量數據集的研究者來說,Scala是一種理想的選擇;
  • 多範式:Scala程序員可以兩全其美,因為Scala提供麵向對象和函數式編程範式
  • Scala編譯成Java字節碼並運行在JVM上,使得它成為一個非常強大的通用型語言;

反對理由

  • Scala的建立和運行需要依賴於一些特定的集成開發環境,比如Eclipse、IntelliJ;
  • 語法和類型係統描述複雜。這使得那些學過動態語言如Python學者來說較困難;

裁決——“適合於大數據”

當它涉及到使用集群計算處理大數據,那麼Scala結合Spark是極好的解決方案然而,如果你的應用程序不處理數據,Scala隻會增加複雜度。

9ca9d0402beb9a04a85c4aa03666b59b69f86064

需要知道

Julia發布於5年前,在數值計算領域留下了深刻的印象幾個主要的組織早期采用它帶動了它的發展

許可證

免費

讚成的理由

  • Julia是一個JIT(即時)編譯語言,這讓它提供了良好的性能它還提供了Python這樣的簡單、動態類型和腳本功能
  • Julia專門設計用於數值分析,也能夠進行通用編程

可讀性

反對理由

  • 不成熟,作為一個新的語言,Julia的用戶者使用一些數據包時會不穩定,但核心語言本身穩定;

裁決——“明日之星”

Julia作為一種新興的語言,它不Python和R語言那樣成熟,如果你願意耐心,可以關注在未來幾年的發展。

a6611059934bf1c79cd0f34240439204311927b5

需要知道

MATLAB是一個學術界和工業界應用的數值計算語言由MathWorks公司於1984開發並投入市場

許可證

專有——定價取決於你的使用情況

讚成的理由

  • 數值計算而設計。MATLAB非常適合複雜的數學要求,如信號處理、傅裏葉變換圖像處理等;
  • 數據可視化MATLAB有一些強大的內置繪圖功能
  • MATLAB經常作為工程數學與應用數學本科課程的一部分,因此,MATLAB在這些領域得到廣泛應用

反對理由

  • 專利許可證根據使用情況(學術、個人或企業)可能要付昂貴的許可證,也有免費的替代品如Octave
  • MATLAB不是通用編程的一個選擇;

裁決——“最好用的數學密集型應用程序”

MATLAB在工業界和學術界廣泛應用於定量和數值計算領域,使它成為數據科學一個重要選擇你的應用程序或日常的應用需要密集、高級的數學功能時,MATLAB是你的不二選擇

還有其他的主流語言,數據科學家對這些可能感興趣,下麵讓我們快速的概述

C++

72636afad5cb653dc28dafd8e7d42f63ec5f2741

C++不是數據科學的共同選擇,原因很簡單,可能是一個生產力與效率的問題。

正如一個Quora用戶提出

“如果你寫的代碼做一些是為了特定的分析可能隻運行這麼一次,你願意花30分鍾寫一個程序,運行10秒,或10分鍾寫一個程序,運行1分鍾嗎?

這雖然有點道理,但是對於重要的生產級性能,C++是實現低級別優化的機器學習算法的極佳選擇。

裁決——“不適合日常工作,但適合性能關鍵時的應用”

c014a22a43327146fc14dba0e9e8a8dcaa982d27

隨著Node.js近年來的提升JavaScript已經成為一個越來越重要的服務器端語言。然而,它在數據科學和機器學習領域的使用卻受到了限製,以下是其幾個缺點

  • 起步得晚(Node.js隻有8歲!)
  • 很少有一些相關的科學數據庫和模塊可用這意味著沒有真正主流的興趣或動力
  • 性能雖好,JavaScript也得到許多批評

Node的強項是在異步I/O,廣泛使用編譯JavaScript語言可以想象下這對數據科學和實時ETL處理結合是多麼的方便,但關鍵問題是這是否會與已經存在的東西有所不同

裁決——“JavaScript可以被視為一個重要的數據科學語言還有許多工作要做

cb8f7b736fbdbda3b2225e103d63b960d8c0577c

Perl被稱為“瑞士軍刀的編程語言,由於作為一個通用腳本語言的通用性它與Python有很多相似之處。但還沒有Python在數據科學領域那樣流行

考慮它在生物信息學等定量領域中的應用,有點出人意料。當涉及到數據科學時,Perl有幾個主要缺點:表現不是太優異、語法不友好,在開發數據科學專用庫方麵沒有強的動力。在任何領域,動力都是關鍵。

裁決——“有用的通用腳本語言,但它沒有為的數據科學的簡曆提供真正的優勢

3941c2dd8a0fca52808aa0c6f14b5e3edb5153c1

Ruby是一個通用的動態類型的解釋型語言。然而,它沒有像Python那樣在數據科學上被廣泛采用。

這似乎很奇怪,但這很有可能是由於Python在學術界的主導地位,以及正反饋效應,使用Python的人越多導致更多的模塊和框架開發,同時會帶來更多的人轉向Python。雖然Sciruby項目帶來的科學計算功能,如矩陣代數但隨著時間的推移,Python仍將引領潮流

裁決——“對於數據科學而言,目前不是顯而易見的選擇,但不會傷害的簡曆

通過以上內容,現在你有了一個關於考慮數據科學的語言的指南。關鍵是要一般性和特異性理解你的使用需求,以及個人針對性能和生產力而言誰優先的開發風格。

針對以上的內容,或許你有一個完全不同的建議如果是這樣的話,請在下麵留言 回複我期待聽到你的回音

Peter Glesson:數據科學、統計和編程方麵的作家

個人主頁:https://medium.freecodecamp.org/@petergleeson1

Linkedin:https://www.linkedin.com/in/peter-gleeson-874238140

本文由北郵@愛可可-愛生活老師推薦,阿裏雲雲棲社區組織翻譯。

文章原標題《Which Languages Should You Learn For Data Science?》,作者:Peter Glesson,譯者:海棠,審閱

文章為簡譯,更為詳細的內容,請查看原文

最後更新:2017-09-04 11:32:49

  上一篇:go  3D機器視覺起飛 未來市場將達21億美元
  下一篇:go  阿裏雲前端周刊 - 第 23 期