從零開始學量化(二):python/matlab/r/sas/vba選哪個

2021-02-24 量化小白上分記

上一篇總結了一些入門的知識內容,本文結合個人經驗,總結編程軟體方面的內容,對各種軟體在量化上的應用做一個對比,供參考。首先我的觀點是,沒有最好的軟體,只有最適用的領域,先明確自己想做的是什麼,再選擇最合適的軟體。這不是一篇廣告文,也不是百度複製粘貼的結果。

我個人來說,最開始是大二做數學建模開始學matlab,不過現在來看其實建模用python也挺好,不明白為什麼當時所有的人都會推薦matlab,可能已經是一種傳統了吧。之後大三上統計課學習了R,上計量課學習了stata,之後大四研究生實習又學了python,vba。整體就是這樣,接下來分軟體說說自己的體會。

MATLAB全稱matrix laboratory,特性也跟名字一樣,對矩陣的處理功能非常強大,對不能裝到矩陣裡的元素比較吃力,當然也可以是我菜。

先說優點,量化或者數據分析來說,正如前面說的,matlab對矩陣的支持非常強,二維以及更高維的矩陣,雖然python,r裡面也有矩陣這樣的數據類型,但感覺沒有matlab的好用,比如python裡的矩陣,剛開始學經常會被矩陣裡的中括號搞的很暈,二維或者以上的矩陣,每個元素都會帶一個[],matlab看多了用這個會有點不習慣,比如下面這些。

相比較來說,matlab的矩陣就非常簡潔了,至於支持矩陣運算和向量化的函數,這個各個軟體基本都差不多。

缺點來說,matlab對字符串的支持不是很方便,尤其是做量化很多時間都要考慮到日期,股票代碼等等文本數據,矩陣裡只能輸入數值形式的,字符串只能放到cell,struct,或者fints裡面,但這些的運算操作就沒有矩陣那麼方便了。一般都會用cell2mat,fts2mat之類的函數先轉成矩陣再處理。

此外,老版本的matlab沒有帶標籤的數據格式,類似python,r裡dataframe這種,用矩陣的話,需要自己記住每一列代表什麼含義,這種情況下自己寫還好,但看別人的代碼會非常痛苦。 新版本的裡面有table格式可以解決這個問題,但碰到的大部分用matlab的人都還是習慣用原來的那些數據類型。

還有,matlab中各種機器學習算法沒有python,r那麼全,如果是做這方面的話肯定不會選matlab。

最後,matlab不是免費的,雖然個人可以用破解的,但企業用破解的還是有風險,而且太大了,裝個python才幾百M,matlab幾G。

python應該是目前在量化/數據領域最廣泛應用的軟體了,之前實習也基本是用python,不論是數值還是文本數據,都能很好處理,而且也有各種算法模塊可以直接調用,省去了自己編寫的麻煩,語言也很簡潔。

所以如果是工作中用的話,最建議學的還是python,只要會用python裡的numpy,pandas,scipy,matplotlib,sklearn,一般的問題都能處理了。

但python也有他不適合的地方,python在量化上比較適合用在數據處理和回測上,但如果要做一些其他的就會存在一些問題,後面說sas的時候會舉一個例子。

R經常會被用來跟python做對比,我自己用下來的感覺是,量化/數據上能用python做到的,r都有類似的模塊可以做到,非常同質。之前刷kaggle也是用R刷的,各種機器學習算法也都有,沒什麼影響。

會有一些很細節的地方,可能r裡面有但是python裡面沒有,比如copula函數相關的,python裡面只有一兩個模塊,而且功能非常簡單,但r裡面有若干個模塊可以調用,而且有很詳細的說明文檔,所以如果做這塊不想自己寫的話,用r會好一些。

不過去實習下來感覺用R的非常少,學校裡老師上課寫論文倒是用R多一些,所以可能R更學院派一些。而且r跟其他語言交互一定沒有python方便,這也使得r的性價比低了不少。

SAS也是大三上統計課的時候學過,但這個我學的很粗淺了,非常不熟練,但印象非常深刻,因為實習時候碰到的一個具體問題。

SAS也是各種算法模塊都有,這一點跟上跟python,r不會差多少,但sas的代碼寫法跟其他軟體不太一樣,用多了python,r去寫那個還是感覺怪怪的。sas可以對一個命令逐行去運行,不需要自己加循環,可以少寫一點代碼。SAS有一些函數的默認跟其他軟體不太一致,比如merge函數,其他軟體一般是默認內連接,只保留匹配到的,但sas默認是外連接的。

SAS有一個非常好的特性是提取資料庫裡的數據,create table生成的數據是存在硬碟裡的,而python,r等等其他軟體提到的數據都是存在內存裡的,這樣就沒法用python和r提太多量的數據出來,而用sas甚至可以直接把全量數據提出來用,這樣的特性在一些時候會非常有優勢,比如在指數編制時候,python,r就有些廢了,成分股跟全量股票匹配再跟分紅配股股權分置等等這些做匹配的話,用python沒法一步到位,內存會爆掉,只能一期一期循環,但是用sas就很方便了,直接create table然後用sql語句匹配就可以了。

而且因為資料庫中是可以通過between語句進行時間點和時間範圍的匹配的,SAScreate table之後也可以,比如A表裡每行是具體的年月日,B表裡每行是起止時間段,這兩個表是可以根據起止時間段匹配的,但是python的pandas包以及R裡類似的包裡沒有這種操作,如果要實現點跟範圍的匹配,只能循環。這也是其他軟體不及sas的一點。總結起來SAS優點在於大數據和各種需要跟資料庫交互的操作

SAS缺點也很明顯,非常大,十多G,很佔空間,啟動慢,而且還是收費的,破解很麻煩,所以選擇這個做量化回測的應該很少了,做風控數據還有指數編制的挺多。

VBA是比較特殊的一門語言,內嵌在OFFICE中,是VB的簡化版,不僅僅是針對EXCEL了,WORD,PPT裡都可以用,有時候也叫宏,基本是一樣的,只不過VBA是碼的,宏是錄的。

VBA最為人詬病的地方是他的編譯器實在是太垃圾了,而且還沒有其他插件可以支持,只能用官方的,長成下面這個樣子,excel/word裡按alt+F11可以打開。

看上去跟常見的編譯截面都差不多,有文件窗口、變量窗口、編譯窗口,歷史記錄也是有的,但真的去寫一兩次就知道有多坑了,debug非常不方便,報錯提示你可能根本不知道他在說什麼,不會像其他軟體那樣提示的很具體。

所以我一般能錄就錄,能不寫就不寫,錄的邏輯是,你可以在excel把你想通過代碼實現的功能操作一遍,編譯器裡會自動生成代碼,直接運行的話效果跟操作時一模一樣的,再稍微改一改就可以用了。但這種方法比較有局限性,他僅限於你的操作時能在當前的excel裡能內完成的,比如畫個圖,調個格式,做個數透什麼的,但如果你要把一個文件夾下幾千個excel併到一起執行一些操作,這就只能忍受垃圾編譯器慢慢寫了。

VBA最強大的地方在於跟OFFICE的交互,進而實現批量和自動化,這個是前面幾種語言比不了的,比如你可以用python/r做統計分析把數據輸出到excel裡,然後再用vba作圖/算各種統計量最後出一份報告或者做一份模板,整個流程最終可以實現自動化。

可以通過vba把excel的一張表視為資料庫中的表,用select語句進行操作,如果數據量很大的話,上百萬,直接操作分分鐘卡死,用vba會很快。

個人理解,excel中寫vba儘量減少激活各個sheet單元格,跳來跳去,有什麼東西可以直接往裡寫,這樣會快一些。word裡難度在於定位,excel因為是矩陣,有行列標好一些,word一種可以先把整個文檔都畫上無色的表格,然後表格內進行定位會容易一些,還有一種是控制光標的移動,設定移動單位,慢慢調。

STATA和EVIEWS是兩個功能非常類似的軟體,計量上用的比較多,我當時選擇了stata,沒有學EVIEWS,整體來說,都是計量軟體,STATA對面板數據支持比較多,EVIEWS對時間序列支持更好,STATA需要碼代碼,EVIEWS可以碼代碼,也可以用滑鼠點點點。

量化/數據上偶爾也會用到,比如做一做協整之類的檢驗,回歸等等,但必要性不是特別強,pyhon也可以完成。

如果你說SQL不算程式語言,我也贊成。

SQL是取數據必須用到的語言,所以這個必須看一看,基本上會SELECT,WITH語句就可以了。建庫,寫入等等的操作,實習生基本上是不會有的,所以除非你打算用自己的電腦建個庫,也不用太關注,用到的地方很少。

綜上,觀點很明確,如果你一定要學一門語言,個人感覺學python性價比最高,一方面基本上你所有需要的操作用python都能搞定,另一方面,python跟r很類似,python的numpy跟matlab邏輯差不多,會這一個以後需要學別的也能很快上手。

如果你一定要學兩門語言,或者說雖然不做量化/數據,但是我還是想學一門,我建議學VBA,會讓你的OFFICE非常溜。搞個下拉菜單,事件什麼的,更會讓別人對你刮目相看。

當然以上的並不全面,如果你是做高頻方面的,可能還需要學C++,如果是做數據可視化的,多半還需要Tableau。但不管怎麼樣,有空的時候還是先學一點比較好,臨時抱佛腳這種事情,絕對不適合零編程基礎的人。

最後,也想聽聽大家的看法!

相關焦點

  • 量化 | 從零開始學量化(五):用Python做回歸
    :量化小白上分記回歸作為數據分析中非常重要的一種方法,在量化中的應用也很多,從最簡單的因子中性化到估計因子收益率,以及整個Barra框架,都是以回歸為基礎,本文總結各種回歸方法以及python實現的代碼。
  • 【Python金融量化】零基礎如何開始學?
    Python某種程度上類似於matlab和SAS和R語言,結合python的幾種強大的科學計算類庫:NumPy(數組、矩陣、線性代數)、Pandas(數據處理和分析庫)、SciPy(統計運算)、SymPy(符號運算庫)、matplotlib(繪圖庫)、Traits(程序界面庫)等,可以近似地替代matlab、Java、R和SAS等。
  • 從零開始學量化(五):用Python做回歸
    python實現的代碼。接下用用python實現OLS,所用數據為特定日期全A股的PB、ROE、行業、市值數據,部分數據如下,數據和代碼獲取後臺回復「回歸」。np.linalg.lstsq(a, b, rcond='warn')lstsq的輸入包括三個參數,a為自變量X,b為因變量Y,rcond用來處理回歸中的異常值,一般不用。lstsq的輸出包括四部分:回歸係數、殘差平方和、自變量X的秩、X的奇異值。一般只需要回歸係數就可以了。
  • python、量化與「雅典娜」項目
    python、量化與「雅典娜」項目QQ群:124134140 (zwPython大數據,量化交易)今天,Q群裡面有朋友問道:【新人】yongle sunny(1535327967) 11:43:10   老大,我們老師說量化投資用python最好,但是現在網際網路上關於python搞量化並願意分享經驗的就您一家,而且還沒正式開始
  • 從零開始學python | 什麼是Python JSON?
    JSON數據包幾乎等同於python字典。現在,您一定想知道。問題的答案是,您必須導入JSON模塊,該模塊通常將Python數據類型轉換為JSON字符串文件。它由直接從JSON文件讀取和寫入的JSON函數組成。Python具有內置的JSON包,並且是標準庫的一部分,因此您無需安裝它。
  • python中調用MATLAB程序
    cmd = 'matlab -nodesktop -nosplash -r ma_py';# 已經配置好配置MATLAB的情況下,-r 後邊就是要執行的MATLAB文件,ma_py是MATLAB的』.m』文件。os.system(cmd);# 運行MATLAB函數,函數system()是運行後面的函數。
  • 編程小技巧之matlab python畫二項分布的動態圖
    >在數據處理中,matlab和Python是常用的工具,在量化模型中,概率論是一項很重要的基礎,而中心極限定理在概率論中又是一個很重要的理論。當n→∞時,Sn的分布形狀很像正態分布。matlab動態圖:
  • matlab量化投資基本操作:數據導入與簡單繪圖(1)
    今天開始,我們放出之前儲備的一些教程內容,我們計劃在8月中旬,再完成一套規模較小的公開課內容,大致內容是以matlab為工具,講解如何進行量化投資分析
  • 零基礎入門,Python量化交易課程
    ,註定是金融界裡一場技術的革新,在這裡你要學會編程,懂數理統計,甚至AI,交易升級,你不學豈不是OUT!抑或遇到問題無法得到及時的幫助,產生畏難情緒而遲遲沒有取得進展,第五期初級量化課程,帶你零編程基礎入門量化交易,這門課你一定不能錯過!
  • 從零開始學CIRCOS繪製圈圖(三)
    從零開始學Circos繪製圈圖(一)從零開始學CIRCOS繪製圈圖(二)這一篇會在之前的基礎上開始在
  • 統計學軟體SAS 9.4 64位,適配win10系統
    統計學專業的朋友可能都知道,除了圖形化軟體spss,sas,還有R語言,python語言可以實現統計功能(有大量的包直接使用,當然spss和sas統計過程中也需要編程)搞統計工作的鄙視鏈,分領域:學術界 R > SAS > stata(python) > SPSS > EXCEL ; 商業界:SAS > R > SPSS
  • Python模型完美切換SAS,還能這麼玩..
    而SAS需付費,且費用較高,一般網際網路公司無法承擔,更多的是在銀行等傳統金融機構中使用,不過這兩年由於Python太火,原本使用SAS的也開始逐漸轉向Python了。擁抱開源,越來越多的愛好者造出優秀的Python輪子,比如當下比較流行的萬金油模型Xgboost、LightGBM,在各種競賽的top級方案中均有被使用。
  • 數據分析:R與Python怎麼選?
    Rweekly連結:https://rweekly.org/Python中文社區維基  連結:https://python-chinese.github.io/Python中文學習大本營連結:http://www.pythondoc.com
  • 005從零開始學Python—字符串處理
    # 單引號構造字符串string1 = '"歡迎關注Excel知識管理微信公眾號,我是數據可視化愛好者李強"'# 雙引號構造字符串string2 = "'這是我的第五篇Python讀書筆記,希望能幫到大家更好地入門Python'"# 三引號構造字符串string3 = ''''Tips':"如果你覺得從零開始學Python系列很好, 請分享給你的朋友們
  • 002從零開始學Python—Anaconda下載與安裝
    好處有二:其一,Anaconda是專門用於科學計算的Python發行版,可以很方便地解決多版本Python並存、切換以及各種第三方模塊安裝的問題。更重要的是,當你下載並安裝好Anaconda後,它就已經集成了上百個科學計算的第三方模塊,例如numpy,pandas,matplotlib,seaborn,statsmodels,sklearn等。
  • matlab vs R
    matlab 的開始,也是準備進一步與 R 語言做比較。關於詳細的 matlab vs R, 可以參考 CRAN 上的文檔:https://cran.r-project.org/doc/contrib/Hiebeler-matlabR.pdfwho 命令等同於 R 的 ls() 函數,但你需要注意的是
  • 高質量交易課程資源共享:【Python量化投資實戰​視頻教程】
    ,不管你杭州指標延新紀元期貨期勝交易形態率如何高滬深股指走股票分析軟體勢炒股python期貨量化交易小主機,靠輕投資攻略倉炒股指標三劍客 股票一鍵期權期貨買賣鍵盤 白糖持倉 積累炒股筆記本了多少盈股指怎期貨投資者教育系列叢書麼交割利弗莫爾的股票交易方法利,股票總黑馬 牛股期貨與期權 選量變 智能炒股機器人指股票技術標會有遇到一兩期貨技術指標次極端行情讓你血本無最中輝博易大股票漲停板 股票百川
  • 從零開始學Python數據分析【13】-- matplotlib(直方圖)
    作者:劉順祥個人微信公眾號:每天進步一點點2015前文傳送門:從零開始學Python數據分析
  • 從零開始學Python【12】--matplotlib(箱線圖)
    前言       今天繼續我們的python繪圖系列,針對離散變量我們可以使用常見的條形圖和餅圖完成數據的可視化工作,那麼,針對數值型變量,我們也有很多可視化的方法
  • matlab程序代寫C++代做C語言java安卓app設計python網站php代碼
    15、代做sas enterprise miner workstation的問16、代做spss中介效應分析17、代做eviews實證模型,沒數據18、代做用spss做19、代做Spsss數據分析代做價格20、代做matlab簡單修改Wind Farm-DFIG Detailed Model21、代做請問