程式語言哪家強?4種資料分析領域語言優缺點對比

導讀:程式語言的好壞及排行之爭由來已久。“PHP是世界上最好的語言”,這是一個流傳於程式設計師圈子的梗。

筆者無意加入“哪門語言更好”的戰爭。每門語言的誕生,都有其特定的背景和需求,都能解決相應的問題,脫離需求和背景爭論哪門語言更好是沒有意義的。

最重要的是,我們需要搞清楚到底要解決什麼問題,這樣才能更方便地找到對應的工具。

作者:趙志強 劉志偉

資料分析領域

(包括量化投資),程式語言具有

兩大作用

,一個是科學計算、統計等演算法層面,主要用於業務的相關研究;另一個是系統應用開發,主要用來搭建基礎IT設施,比如資料庫、交易平臺等。

Matlab和R主要用於業務層面的研究工作。C++和Java則主要是用於系統搭建工作。業務研究和系統搭建的區別還是很明顯的,每類語言適應的場景都不太一樣,否則也沒有必要存在那麼多種語言了。比如,使用Matlab搭建一個交易系統,那麼其速度一定會慢得讓人無法忍受。如果用C++或者Java做資料分析,那麼其效率一定也會非常低。

至於Python,其優勢在於作為一種膠水語言,其適用面非常廣。換句話說,

Python是可以同時完成資料分析和系統搭建兩種工作的,而且效能和效率有著非常好的平衡。

使用Python既可以編寫機器學習的複雜模型,也可以搭建支撐億級別訪問量的網站系統,又或者搭建微秒級的程式化交易系統。

什麼都能做,而且還能做得很不錯,這是Python能夠迅速流行的核心原因之一。

下面將對上面提到的部分常見的語言做一個簡單的介紹。

01 Matlab

截至目前,在國內量化研究領域,Matlab的使用率應該是最高的。這個資料來源於Wind,在他們的量化介面中,Matlab的使用率是最高的,Python其次。但是Python是增長速度最快的。

程式語言哪家強?4種資料分析領域語言優缺點對比

Matlab作為商業軟體,功能很全很強大,可靠性也很好。最早一批做科學計算和資料分析的,很多都是使用的Matlab。量化投資在國內剛出現的時候,Python和R的社群生態還沒有像現在這樣完善,所以很多量化投資的業內人士都更習慣於使用Matlab。

如果不考慮授權費用的問題,那麼Matlab確實是一款非常好用的資料分析乃至量化投資分析的工具,畢竟有實力雄厚的公司在支援Matlab的開發,效能和工具包都能得到保證。

不過,Matlab與Python相比,除了費用問題之外,

還存在很多缺陷,而且是無法彌補的缺陷。

特別是涉及系統級別的開發時,比如交易系統、爬蟲系統等。在這些領域,Matlab不僅缺少相應的庫,而且速度非常慢,因此其很難在工業界得到廣泛應用。

02 R

R是一個開源的資料分析軟體。實際上,R的誕生,就是為了協助完成統計和資料分析。由於R在研究機構和大學非常流行,因此這些機構反過來也開發了大量相應的開源專案,這也使得R的各種統計功能和函式琳琅滿目。

程式語言哪家強?4種資料分析領域語言優缺點對比

R很多常用的統計功能都經過了大量實踐的檢驗,是非常完善和成熟的

,比如,時間序列分析、經典統計模型、貝葉斯統計、機器學習等。R也有一些量化相關的庫,比如quantmod。

當然,R也有它的缺點,比如,對於大量的資料處理,R還是力有不逮。由於R更多的是由統計界人士完成的,所以偏底層的資料管理並不是R的強項。

總體上講,

R的統計和資料分析相關功能非常強大,更適合做研究,不適合開發大型的系統。

03 C++

C++最大的好處就是效能強,速度極快。幾乎所有需要高效能的科學計算功能都是基於C++或者Fortran開發的。比如,Python的底層其實就是用C語言實現的。

程式語言哪家強?4種資料分析領域語言優缺點對比

因為速度快,C++在高頻交易領域也是獨佔一席。然而,在進行日常的資料分析和研究中使用C++其實是非常不方便的。因為C++語言偏底層,對程式設計人員的要求很高,同樣的功能,開發難度高很多,除錯起來也比較麻煩。

所以除非是在對效能有極高要求的地方,一般不推薦使用C++進行開發。

04 Python

Python語法非常易學易懂,很容易快速上手。很多人剛開始學習程式設計的時候,往往會選擇從Python入手。

程式語言哪家強?4種資料分析領域語言優缺點對比

與Matlab、R一樣,Python也是指令碼語言,寫好了就可以直接執行,省去了編譯連結的麻煩,對於需要快速開發和進行驗證的程式,可以省去很多編碼和除錯的時間。

Python也是面向物件的語言,但它的面向物件不像C++那樣強調概念,而是更注重實用。

它能使用最簡單的方法讓程式設計者享受到面向物件帶來的好處。

這也是Python能像Java、C#那樣吸引眾多支持者的原因之一。

雖然Python是一種指令碼語言,但它的速度並不是很慢,特別是在一些庫經過最佳化之後(直接基於C語言編寫介面),速度比純C語言慢不了多少。在這方面,它遠勝於R和Matlab。

Python是一種功能豐富的語言,

它擁有一個強大的基本類庫和數量眾多的第三方擴充套件生態。

Python幾乎在各個領域都有對應的開源專案,因此我們不必重新造輪子。使用Scrapy,我們可以編寫網路爬蟲系統,爬取網路相關資料;使用各種資料庫介面,我們可以將資料的儲存、讀取工作標準化;使用PyAlgoTrader,我們可以構建策略回測系統和自動交易系統。

Python還有很多優秀的量化、資料分析、機器學習(ML)工具,比如NumPy、SciPy、Pandas、Scikit-Learn和Maplotlib等。

雖然Python在機器學習和一般的資料分析中非常出色,

但仍然存在短板

,比如,其在一部分傳統領域裡表現就不算太好,包括很多傳統統計模型、時間序列分析等,Python就不如Matlab和R。

簡而言之,我們可以用Python構建一條完整的量化投資生產線。當然,不可否認的是,對於某些環節,有些語言相對於Python也有其優勢,比如R的統計庫、Matlab的科學計算、SAS的可靠性、C++構建高速交易系統等。不過這些優勢只是95分和90分的區別,除了少數極端業務場景之外,絕大部分工作Python其實都能勝任。

在量化投資領域,大多數需求都可以用Python完成,這可以為團隊節省大量的時間。畢竟在不同的語言之間不斷切換,也是一件很耗費精力的事情。

05 其他語言

除了上面介紹的語言之外,其實還有很多其他的語言在量化投資領域中也都有應用。比如Java、C#、Scala等,這些語言也都有其相應的優勢和特點。不過相對於上面介紹的語言來說,這些語言在國內的使用群體仍然是偏小眾的。對於初學者來說,建議還是選擇Python語言。

劉志偉,在中國銀聯雲閃付事業部從事資料分析、資料探勘等工作。對自然語言處理、文字分類、實體識別、關係抽取、傳統機器學習,以及大資料技術棧均有實踐經驗。目前正在探索相關技術在金融場景內的落地應用,包括自動知識圖譜、大規模文字資訊抽取結構化、異常識別等領域,關注人工智慧行業前沿技術發展。

本文摘編自《Python量化投資:技術、模型與策略》,經出版方授權釋出。

程式語言哪家強?4種資料分析領域語言優缺點對比

延伸閱讀《Python量化投資:技術、模型與策略》

推薦語:

理論與實踐相結合,基於Python闡述量化投資理論和策略,深入分析Python在量化投資分析中具體的應用案例。