掌握數(shù)據(jù)科學(xué)應(yīng)該學(xué)習(xí)哪些語言?
原始的數(shù)據(jù)科學(xué)是勞動密集型活動,但當(dāng)你會用適合的語言進(jìn)行工作時,數(shù)據(jù)科學(xué)應(yīng)該是非常智能有趣的工作,會讓你得到一些不容易看到的結(jié)論。
一般來說,數(shù)據(jù)科學(xué)中常常會涉及大量數(shù)據(jù)的處理,此時優(yōu)化代碼的性能非常重要??紤]到這些基本原則,來看看哪些語言是數(shù)據(jù)科學(xué)中應(yīng)該掌握的:
R
??
R 發(fā)布于 1995 年,是 S 語言的一個分支,開源。目前由 R Foundation for Statistical Computing 提供技術(shù)支持。
優(yōu)點:
- 免費(fèi)、開源,各種功能和函數(shù)琳瑯滿目
- 專門為統(tǒng)計和數(shù)據(jù)分析開發(fā)的語言,即使基礎(chǔ)安裝也包含全面的統(tǒng)計功能和方法
數(shù)據(jù)可視化
缺點:
- 性能,R 作為解釋型語言,運(yùn)行效率并不高
- R 在統(tǒng)計學(xué)的表現(xiàn)很出色,但并不適用于通用編程
Package 的可靠性問題
小結(jié):R 語言在統(tǒng)計和數(shù)據(jù)可視化方面非常強(qiáng)大,并且開源讓它聚集了一幫活躍的貢獻(xiàn)者,不過由于開發(fā)者良莠不齊,導(dǎo)致 Package 的可靠性方面會有點問題
Python
Guido van Rossum 在 1991 年推出 Python,開源。Python 廣泛用于數(shù)據(jù)科學(xué)領(lǐng)域,目前主要的版本是 3.6 和 2.7。
優(yōu)點:
- Python 是一門主流編程語言,有著廣泛的在線支持
- 入門友好,易于學(xué)習(xí)
- 有諸如 pandas,scikit-learn 和 Tensorflow 這樣優(yōu)秀的 package
缺點:
- Python 作為動態(tài)語言,比 Java 還慢,而且容易出現(xiàn)類型錯誤
- 對于特定的統(tǒng)計或數(shù)據(jù)分析,R 的封裝會比 Python 更輕松;而在通用性方面,也有比 Python 更好的替代方案
小結(jié):Python 是數(shù)據(jù)科學(xué)中很好的選擇,而且,Google 的 TensorFlow 使得機(jī)器學(xué)習(xí)框架都偏向于Python
SQL
SQL 是結(jié)構(gòu)化查詢語言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫系統(tǒng)
優(yōu)點:
- 在查詢、更新和管理關(guān)系數(shù)據(jù)庫方面非常有效
- 易讀。類似這樣的語句基本不會有歧義:SELECT name FROM users WHERE age > 18
- SQLAlchemy 等模塊使 SQL 與其他語言的集成變得簡單明了
缺點:
- 分析功能相當(dāng)有限
- SQL有很多不同的實現(xiàn),如 PostgreSQL,SQLite,MariaDB。他們都是不同的,操作起來有點麻煩。
小結(jié):SQL 作為數(shù)據(jù)處理語言比作為高級分析工具更有用
Java
Java 具有簡單性、面向?qū)ο蟆⒎植际?、健壯性、安全性、平臺獨立與可移植性、多線程、動態(tài)性等特點,目前由 OSracle Corporation 支持。
優(yōu)點:
- 應(yīng)用廣泛,許多系統(tǒng)和應(yīng)用都用 Java 寫后端,能夠?qū)?shù)據(jù)科學(xué)方法直接繼承到現(xiàn)有的代碼庫
- 健壯。對于重要任務(wù)的大數(shù)據(jù)應(yīng)用,這點很寶貴
- 適合編寫高效的 ETL 生產(chǎn)代碼和計算密集型機(jī)器學(xué)習(xí)算法
缺點:
- 對于專用的統(tǒng)計分析,Java 的冗長度不適合作為首選。不過動態(tài)類型的腳本語言(如 R 和 Python)可以提高生產(chǎn)率
- 與 R 這樣特定領(lǐng)域的語言相比,Java 中沒有大量可用于高級統(tǒng)計方法的庫
小結(jié):Java 其實不推薦作為數(shù)據(jù)科學(xué)語言的首選,盡管它能將數(shù)據(jù)科學(xué)代碼無縫接入現(xiàn)有代碼庫,而且性能和安全性也是它的優(yōu)勢。但是作為開發(fā)者,使用 Java 就意味著沒有其他語言特定的包可用。
Scala
Scala 是一門多范式的編程語言,類似 Java,由 Martin Odersky 開發(fā)并于 2004 年發(fā)布。
優(yōu)點:
- Scala + Spark = 高性能集群計算。它是大數(shù)據(jù)領(lǐng)域的殺手級應(yīng)用框架
- 多范式
- Scala 被編譯為 Java 字節(jié)碼并在 JVM 上運(yùn)行,這使 Scala 成為非常強(qiáng)大的通用語言,同時也非常適合數(shù)據(jù)科學(xué)
缺點:
- Scala 并不太適合初學(xué)者
- 語法和類型都比較復(fù)雜,這對于 Python 開發(fā)者其實是個比較陡峭的學(xué)習(xí)曲線
小結(jié):對于集群處理大數(shù)據(jù)的環(huán)境,Scala + Spark 是一個很棒的解決方案。但對于少量數(shù)據(jù)而言,其他語言或許效率更高
Julia
Julia 是一款剛出現(xiàn)沒幾年的 JIT 科學(xué)計算語言, 為高性能科學(xué)計算而生。
優(yōu)點:
- JIT(just-in-time)語言,性能良好,還提供像 Python 等解釋語言的腳本功能和動態(tài)類型
- 為數(shù)值分析而生,但也同樣能進(jìn)行通用編程
- 可讀性好,而且 Julia 文檔的中文翻譯優(yōu)秀(因為核心組有個中國人哈哈哈)
缺點:
- 作為一種新語言,很難說已經(jīng)可以成熟到大規(guī)模使用
- 有限的包
小結(jié):潛力無限,但就目前而言,還不如 R 和 Python 一樣成熟穩(wěn)定
MATLAB
MATLAB 是 MathWorks 公司出品的商業(yè)數(shù)學(xué)軟件,用于算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以及數(shù)值計算的高級技術(shù)計算語言和交互式環(huán)境,在數(shù)學(xué)類科技應(yīng)用軟件中在數(shù)值計算方面首屈一指。
優(yōu)點:
- 專為數(shù)值計算而設(shè)計,非常適合具有復(fù)雜數(shù)學(xué)計算的定量應(yīng)用,如信號處理、傅里葉變換、圖像處理等
- 數(shù)據(jù)可視化,MATLAB 內(nèi)置了繪圖功能
- 作為數(shù)學(xué)本科課程的一部分,它在物理、工程、應(yīng)用數(shù)學(xué)等領(lǐng)域有著廣泛應(yīng)用
缺點:
- 還挺貴的(獲取 MATLAB 及工具箱報價)
- 不適用于通用編程
小結(jié):MATLAB 最適合數(shù)據(jù)密集型應(yīng)用,畢竟它就是為此而生的。
總結(jié)
本文只是個快速指南,來幫助選擇哪種語言適合做數(shù)據(jù)科學(xué)。當(dāng)然,除了上述介紹的語言外,C++、JavaScript、Perl 還有 Ruby 也可以解決一些數(shù)據(jù)問題,其中的關(guān)鍵在于你的使用需求,以及個人的喜歡等。