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